首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将“惯性”风格的水平滚动应用到div?

要将“惯性”风格的水平滚动应用到div,可以通过以下步骤实现:

  1. 首先,确保目标div具有足够的宽度和高度,并设置其CSS属性overflow-x: scroll;以启用水平滚动。
  2. 接下来,使用JavaScript监听div的滚动事件。可以通过addEventListener方法将滚动事件绑定到div上。
  3. 在滚动事件的处理函数中,获取滚动的距离,并根据滚动距离计算出速度。
  4. 使用CSS的transform属性和translateX函数,根据计算得到的速度来实现平滑的水平滚动效果。将滚动距离应用到目标div的transform属性上,例如:div.style.transform = "translateX(" + distance + "px)";
  5. 为了实现“惯性”效果,需要在滚动事件处理函数中使用requestAnimationFrame方法来连续更新滚动距离,以实现平滑的滚动效果。

以下是一个示例代码:

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
  <style>
    .scrollable-div {
      width: 500px;
      height: 200px;
      overflow-x: scroll;
    }
  </style>
</head>
<body>
  <div class="scrollable-div">
    <!-- 在这里放置内容 -->
  </div>

  <script>
    var div = document.querySelector('.scrollable-div');
    var isScrolling = false;
    var startX, startY;
    var currentX, currentY;
    var distanceX, distanceY;
    var startTime, endTime;
    var velocityX, velocityY;

    div.addEventListener('mousedown', function(e) {
      isScrolling = true;
      startX = e.pageX || e.touches[0].pageX;
      startY = e.pageY || e.touches[0].pageY;
      currentX = startX;
      currentY = startY;
      distanceX = 0;
      distanceY = 0;
      startTime = Date.now();
    });

    div.addEventListener('mousemove', function(e) {
      if (!isScrolling) return;
      currentX = e.pageX || e.touches[0].pageX;
      currentY = e.pageY || e.touches[0].pageY;
      distanceX = currentX - startX;
      distanceY = currentY - startY;
      div.style.transform = "translateX(" + distanceX + "px)";
    });

    div.addEventListener('mouseup', function(e) {
      isScrolling = false;
      endTime = Date.now();
      var timeDiff = endTime - startTime;
      velocityX = distanceX / timeDiff;
      velocityY = distanceY / timeDiff;
      requestAnimationFrame(animateScroll);
    });

    function animateScroll() {
      if (!isScrolling) return;
      distanceX += velocityX;
      div.style.transform = "translateX(" + distanceX + "px)";
      velocityX *= 0.95; // 减少速度以实现“惯性”效果
      if (Math.abs(velocityX) > 0.1) {
        requestAnimationFrame(animateScroll);
      }
    }
  </script>
</body>
</html>

这个示例代码实现了一个具有“惯性”风格的水平滚动效果的div。你可以将内容放置在scrollable-div类的div中,并通过鼠标拖动或触摸滑动来体验滚动效果。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法

关于 mCustomScrollbar mCustomScrollbar 是个基于 jQuery UI 的自定义滚动条插件,它可以让你灵活的通过 CSS 定义网页的滚动条,并且垂直和水平两个方向的滚动条都可以定义...set_width:false:设置你内容的宽度 值可以是像素或者百分比 set_height:false:设置你内容的高度 值可以是像素或者百分比 horizontalScroll:Boolean:是否创建一个水平滚动条...默认是垂直滚动条 值可为:true(创建水平滚动条) 或 false scrollInertia:Integer:滚动的惯性值 在毫秒中 使用0可以无滚动惯性 (滚动惯性可以使区块滚动更加平滑) scrollEasing...("scrollTo","left");:滚动到最左边(水平滚动条) $(selector).mCustomScrollbar("scrollTo","right");:滚动到最右边(水平滚动条 $(selector...下面这个结构是 水平滚动条 的结构: div class="mCustomScrollBox mCSB_horizontal"> div class="mCSB_container">

14.2K30

【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

代码示例 /** * 手指滑动事件, 此时手指没有离开屏蔽 * * 随着滚动 , 改变图片的解码区域 ; * * @param e1 滑动的起始按下事件..., 计算惯性滑动的量 ; 3 ....惯性滑动计算 : 调用 Scroller 的 fling 方法 , 进行计算 , 在某时刻可以调用 Scroller 对象的 getCurrY 获取当前滑动到了哪里 ; /** * 惯性滑动...设置惯性滑动区域 : 惯性滑动后 , View 组件的 computeScroll 方法会自动回调 , 在这里计算 区域解码的 Rect 区域 , 计算完成后重绘组件 ; /** *...布局文件中的标签属性 AttributeSet * 2. defStyleAttr 指定的默认风格 * 3. defStyleRes 指定的默认风格 * 4.

1.6K22
  • 一篇文章带你了解CSS基础知识和基本用法

    出现滚动条 no 没有滚动条 6)).背景大小 div style='background-size:50px 50px'>div> 7)).背景图片的定位区域 div style...固定值 而且还支持百分比 4).边框Border 首先说一下边框风格,它的风格比较多,常用的一般是实线为主: div style='border-style:none'>div> hidden...风格和颜色,然后定义边框的其它属性。...如果定义一个length 参数,那么定义的是水平和垂直间距 如果定义两个length 参数,那么第一个设置水平间距,而第二个设置垂直间距 4)).表格标题的位置 caption { caption-side...,并且其余内容是不可见的 scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容 auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容 12).裁剪Clip 对元素某块区域就行剪切

    11.1K20

    移动端滚动研究

    移动web滚动问题 在移动端如果使用局部滚动,意思就是我们的滚动在一个固定宽高的div内触发,将该div设置成overflow:scroll/auto;来形成div内部的滚动,这时我们监听div的onscroll...requestanimationframe来在一个线型函数下不断的修改元素的transform来实现手指离开时的一段惯性滚动距离。...和function来实现手指离开时的一段惯性距离。...方案比较 第一种方案由于惯性滚动的时机时由js自己控制所以可以拿到滚动触发阶段的scrolltop值,并且滚动的回调函数onscroll在滚动的阶段都会触发。...第二种方案相比第一种要劣势一些,区别在于手指离开时,采用的时css的animation来实现惯性滚动,所以无法直接触发惯性滚动过程中的onscroll事件,只有在animation结束时才可以借助animationend

    3.2K20

    如何使用 CSS 设置和自定义水平和垂直滚动条

    body的高度以使其足够长以滚动以下CSS代码片段描述了如何将初始导航栏样式设置为侧边栏并调整body的底部边距。...在下一节中,我们将学习如何设置水平滚动条。设置自定义水平滚动条。您可以向网页内的容器添加水平滚动条。水平滚动条可以使用户在较短的容器内查看一系列横向内容。...">6div> div class="box">7div> div>页面在屏幕左下角有一个默认的水平滚动条,但您不希望网站的用户使用它。...将overflow-x属性的值设置为scroll可以将水平滚动条添加到容器的底部。您的网站用户将能够平稳地滚动容器中的内容。您已成功创建了水平和垂直滚动条。...样式化水平滚动条(flexbox滚动)样式化水平滚动条与样式化垂直滚动条类似,只是一个属性不同。高度属性用于设置水平滚动条的厚度,而不是宽度属性。

    1.9K00

    记录一些小技巧-CSS篇

    ,例如:div:not(:last-child),选中除最后一个div的所有div元素 有时候在做列表时需要为每项添加下边框线,但最后一个项不需要边框线 .item:not(:last-child){...的值参照于 width div class="parent"> div class="child"> 这里是内容 div> div> .parent{...div{ filter: drop-shadow(0 0 6px #ddd); } ios移动端滚动卡顿 在ios端中滚动容器不会有惯性滚动,用户在滑动时会出现明显的卡顿感,添加以下属性可解决问题...比如,地址为 loacalhost:3000#red,则选择中ID属性值为red的元素,可以应用到网页换肤功能中。 ?...::selection伪元素应用于文档中被用户选中的部分 div class="demo">我是一段很长很长很长很长很长很长长很长很长长很长很长的文字div> .demo::selection{

    88420

    设计师会编程、程序员懂艺术:Semi Flat Design

    也即是拟物还是扁平之争,发展到现在的半扁平,融合了拟物跟扁平的特性,产生一种介于2者之间的风格。...它最早应用于瑞士的公共交通系统中,随后这种完美的导航设计方法被广泛应用到对速度、视觉、信息传达要求颇高的全球公交系统中。微软的设计师受到了Metro的启发,创作了微软的Metro UI。 ?...我们采用的方案是before伪元素的应用。 div里放文本内容,div:before伪元素里放毛玻璃效果,只要把两个div重叠就可以达到我们预想的效果啦,代码实现下 ?...2)scroll: 背景图像相对于元素固定,也就是说当元素内容滚动时背景图像不会跟着滚动,因为背景图像总是要跟着元素本身。但会随元素的祖先元素或窗体一起滚动。...3)local: 背景图像相对于元素内容固定,也就是说当内容随元素滚动时背景图像也会跟着滚动,因为背景图像总是要跟着内容。

    2.4K60

    移动端吸顶fixbar解决方案

    需求背景 经常会有这样的需求,当页面滚动到某一个位置时,需要某个页面元素固定在屏幕顶部,并且有时需要连续滚动吸顶。...问题 position:fixed给移动端带来的问题: IOS8在页面滚动时,吸顶不连续;页面滑动时,不见吸顶,页面滚动停止后,吸顶缓慢出现 滚动到顶部之后,会出现两个一样的吸顶, 过一会才恢复正常。...在目标区域在屏幕中可见时,它的行为就像position:relative; 而当页面滚动超出目标区域时,它的表现就像position:fixed,它会固定在目标位置。...安卓 滚动距离超过某位置时,js动态设置样式;为了防止惯性滚动引起的fix不及时的情况,在 touchstart、 touchmove 、 touchend 事件都进行监听。...target.css('position', 'relative'); me.replaceEle.hide(); } }; // 安卓情况下,防止惯性滚动引起的

    3K30

    iScroll学习小结

    ,但是在某些版本ios的某些内核中,在惯性滚动过程中不执行任何js代码,亦即不会触发scroll事件,基本任何事情都做不了,为了解决这个问题不得不使用div内滚动,然后使用iscroll库实现滚动逻辑。...特别是有惯性滑动逻辑的时候就更甚了,所以这个细节是少不了的 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY <...this.scrollTo(newX, newY); // ensures that the last position is rounded //[3] //实现惯性滑动...('div').style; var _vendor = (function () { var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],...没有暴露停止滑动(惯性滑动)的接口 通过查看源代码找到了停止滑动的方法,如下: var iScroll = new IScroll({ /* ... */ }); //直接通过修改iScroll对象的状态来停止滑动

    92130

    Flutter 可以缩放拖拽的图片

    里面是有水平或者垂直的手势的,会跟onScaleStart/onScaleUpdate/onScaleEnd有冲突。...首先我看了下PageView关于滚动的源码,直接指向最终ScrollableState里面的代码,在setCanDrag方法里面根据是否可以Drag,准备了水平/垂直的手势。...把ScrollableState里面关于水平垂直滚动处理的代码拿出来,我创建了一个属于extended_image专门的extended_image_gesture_page_view,属性跟PageView...update(details); } } 拖拽惯性效果 在DragEnd的时候,我们需要注意下处理下惯性。...当图片是放大状态而且水平或者垂直能够滑动的时候,我们需要_drag停止下来,以防止直接滑动到上一个或者下一个图片 DragEndDetails(primaryVelocity: 0.0),并且根据惯性让图片在范围内继续惯性滑动

    4.9K00

    CSS 入门指南:轻松掌握网页布局与样式设计的艺术

    CSS基础知识点 选择器(重点) CSS选择器用于选择想要应用样式的HTML元素。常用的选择器有: 标签选择器:应用到所有指定标签的元素。...例:p { color: red; } (所有标签文字变红) 【重点】类选择器:应用到具有指定类名的元素。类选择器前加.。...例:.highlight { color: yellow; } (类名为highlight的元素文字变黄) ID选择器:应用到具有指定ID的元素,ID选择器前加#。...text-align:用于 文本或行内元素的水平方向对齐,一般适用于块级元素中的文本内容,而不是布局中的子元素。 示例对比: 的。scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。

    14610

    iScroll学习小结

    前言 最近项目需要实现一个fixed标题栏的功能,很普通的功能,实现核心也是在sroll事件中切换到fixed状态即可,但是在某些版本ios的某些内核中,在惯性滚动过程中不执行任何js代码,亦即不会触发...scroll事件,基本任何事情都做不了,为了解决这个问题不得不使用div内滚动,然后使用iscroll库实现滚动逻辑。...特别是有惯性滑动逻辑的时候就更甚了,所以这个细节是少不了的 if ( timestamp - this.endTime > 300 && (absDistX div').style; var _vendor = (function () { var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],...没有暴露停止滑动(惯性滑动)的接口 通过查看源代码找到了停止滑动的方法,如下: var iScroll = new IScroll({ /* ... */ }); //直接通过修改iScroll对象的状态来停止滑动

    980100

    深入常用CSS声明(一) —— Background

    因此得出的结论是:背景图片继承只能是继承自和自己最近的父容器设置的背景图,这点和字体继承(可看我在wrapper1中设置的字体颜色分别应用到了下层的子元素中)略有差别。...如果我将wrapper2的background-color: inherit;声明代码注释打开的话,那么在wrapper2和child中都会应用到wrapper1中所设置的背景颜色,这点和background-image...scroll 背景图片相对于图片容器滚动,不随内容滚动 local 如果容器内容有滚动情况,背景图片相对于内容滚动,而与包含它的容器无关 这其中要理解的可能就是scroll和local的区别。...具体像素,或者百分比) 两个值,都为数值(具体像素,或者百分比) 如果只有一个值的情况下:如果设置了left或者right,表示背景图片距离容器水平的距离,竖直方向为容器的50%。...x 28,那么在水平方向上刚好可以放下8个图片。

    1.8K50

    iphone与安卓的兼容性问题汇总

    格式时,iphone不认,安卓没问题 解决办法:new Date(res.data[i].inventoryDate.replace(/-/g, "/")); 2.title问题 如果title是动态加载的,...在dom加载完之后通过js改变title的值,在安卓上显示是正常的,在iphone上不能正常显示 解决办法:通过后台传入title值,在前端读取html时就读取了title的值,这样就不经过html加载完之后再执行了...,就解决了问题 3.滚动惯性问题 在安卓中设置为overflow:auto就可以了,在ios中没有惯性效果 解决办法,.div{ -webkit-overflow-scrolling: touch }...4、ipone6显示正常,iphone6s显示错位了 同样的css在不同的手机用同样的浏览器看结果却不一样 解决办法,调整浏览器的默认设置。...把字号大小设置为正常的大小 最好的解决办法,就是把宽度放足够大,做成自适应的页面

    1.5K70

    吸顶效果解决方案

    var stickyEl = document.querySelector('.sticky');// 守家占位符 var stickyHolder = document.createElement('div...-> 滚动 -> 手指抬起 -> 惯性滚动 -> 停止滚动 整个过程,直到停止滚动时才会触发1次scroll事件,也就是说,IOS8以下的scroll变成了scrollend。...,iscroll等等 有前辈做了详细测试,见参考资料1 定时器在手指没有离开屏幕时不会执行,touchmove触发频率足够,也能拿到scrollTop,但touchend后,惯性滚动期间,没有任何事件可用...,拿不到这段的scrollTop,很难预测这段惯性滚动距离(减速运动),甚至不确定各IOS版本这段距离的计算方式是否相同 iscroll这种假滚动,自然可以实时获取滚动位置,iscroll有一个专用版本来做这个事情...IOS 8+的Safari和WKWebView能够疯狂触发scroll,无论手指在不在屏幕上,无论是不是惯性滚动期间。

    3.6K10

    零基础入门 23: UGUI ScrollView

    之前在讲解ScrollBar这个滚动条的时候,这个图就曾经使用过,也讲解过,ScrollBar滚动条通常会配合滚动视图ScrollView进行使用。 滚动视图,顾名思义,实际就是可以滚动的UI视图。...因为这个父节点要装下我们滚动列表的内容,所以width宽度我选择和滚动视图一样的,而增加这个内容节点的高即Height值 ? 接下来是为我们的滚动视图增加要滚动显示的子项了。...因为我们要创建的是垂直的,所以在ScrollRect组件上把水平滚动去掉。 ? 此时我们运行项目,来查看一下效果。顺便在运行中,我又复制了几个图片,来穿插显示,这样更能体现出我们滚动视图的显示。 ?...Horizontal:水平滚动开关 Vertical:垂直滚动开关 Movement Type:滚动类型,默认是Elastic,即有弹性的滚动 Elasticty:弹性系数 Inertia:惯性开关 Deceleration...Rate:惯性减速系数 Scroll Sensitivity:滚动的灵敏度 Viewport:视口 Horizontal/Vertical ScrollBar:分别是水平和垂直的滚动条 好了,掌握了今天的内容

    3.1K20
    领券