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

在Vanilla JS中平滑水平滚动

在Vanilla JS中实现平滑水平滚动可以通过以下步骤:

  1. 首先,我们需要获取要滚动的元素和滚动的目标位置。可以使用document.querySelector()方法获取元素,并使用element.scrollLeft属性获取元素的当前滚动位置。
  2. 接下来,我们需要计算滚动的起始位置和目标位置之间的距离。可以使用目标位置减去起始位置来得到距离。
  3. 然后,我们需要确定滚动的持续时间和每一帧的滚动距离。可以根据需要自定义这些值。
  4. 接着,我们可以使用requestAnimationFrame()方法创建一个动画循环来实现平滑滚动。在每一帧中,我们更新滚动位置,并检查是否达到目标位置。
  5. 最后,我们可以在滚动结束后执行任何需要的回调函数。

下面是一个示例代码:

代码语言:txt
复制
function smoothScroll(element, targetPosition, duration) {
  const startPosition = element.scrollLeft;
  const distance = targetPosition - startPosition;
  const startTime = performance.now();

  function scrollAnimation(currentTime) {
    const elapsedTime = currentTime - startTime;
    const scrollProgress = Math.min(elapsedTime / duration, 1);
    const scrollDistance = distance * scrollProgress;
    element.scrollLeft = startPosition + scrollDistance;

    if (scrollProgress < 1) {
      requestAnimationFrame(scrollAnimation);
    } else {
      // 滚动结束后执行回调函数
      // do something...
    }
  }

  requestAnimationFrame(scrollAnimation);
}

const container = document.querySelector('.container');
const targetPosition = 500; // 目标滚动位置
const duration = 1000; // 持续时间

smoothScroll(container, targetPosition, duration);

这段代码实现了在Vanilla JS中平滑水平滚动。你可以将.container替换为你想要滚动的元素的选择器,targetPosition替换为你想要滚动到的目标位置,duration替换为你想要滚动的持续时间(以毫秒为单位)。

推荐的腾讯云相关产品:腾讯云对象存储(COS),它是一种高可用、高可靠、低成本的云端存储服务,适用于存储和处理大规模非结构化数据。你可以通过以下链接了解更多信息:腾讯云对象存储(COS)

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

相关·内容

原生 JS 实现惯性滚动,给鼠标滚轮增加阻尼感,纵享丝

前言当我们移动终端上滑动页面,手指离开屏幕后,页面的滚动并不会马上停止,而是一段时间内继续保持惯性滚动,并且滑动阻尼感和持续时间与滑动手势的幅度成正比。...然而鼠标滚轮的传感器通常采用光电或机械的方式运作,由一个旋转轴和一个传感器组成,旋转轴通常无法做出细微的距离控制,使得距离检测更像是段落式的,这些信号传输到计算机后,并不能实现丝滚动。...,同时讲解其中技术原理与细节,用最少量的代码实现 JS 鼠标惯性滚动。...实现原理首先需要利用 DOM 事件禁止鼠标滚动,转为 JS 控制。...通过 JS 模拟页面滚动实际可以看做是执行一个连续的动画,这时候肯定就离不开与浏览器动画息息相关的 requestAnimationFrame 函数了,我们需要知道它的回调函数会传入一个 DOMHighResTimeStamp

1.1K41

使用 fartscroll.js 让你的网页滚动时放屁

放屁绝对不是一个很高雅的行为,但是如果你比较喜欢恶搞,或者愚人节,或者是一些比较特殊的网页设计中,可以通过 fartscroll.js 这个插件让你的网页滚动的过程中 放屁。...直接打开 fatscroll.js 的官方页面(http://theonion.github.io/fartscroll.js/),滚动一下,你就可以听到了放屁声音了,你滚动的距离和速度不同,放屁的声音也不同...使用方法也很简单,先下载插件包,解压出来之后,在网页中引入 fartscroll.min.js 这个文件,然后配置下面的参数等,启用这个插件: // 文档中滚动 400 像素就放屁 $(document...).fartscroll(); // 文档中每滚动 800 像素就放屁 $(document).fartscroll(800); // 网页中没滚动 100 像素就放屁 $("body").fartscroll...(100); // 很多很多的屁 $("body").fartscroll(5); 仅供娱乐和恶搞哈,相信应该没有太多人喜欢访问你网页的时候,听到你网页放屁哈哈。

89920

H5C3第四节

CSS3布局方面做了非常大的改进,使得我们对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,响应式开中可以发挥极大的作用。...可选值 row:主轴方向为水平向右 column:主轴方向为竖直向下 row-reverse:主轴方向为水平向左 column-reverse:主轴方向是竖直向上。...align-items(重点) align-items用于调整侧轴的对其方式 ,可选的值有: flex-start:元素侧轴的起始位置对其。 flex-end:元素侧轴的结束位置对其。...space-between:各行在侧轴中平均分布。 space-around:第一行贴上边,最后一个行贴下边,其他行在弹性盒容器中平均分布。 stretch:拉伸,不设置高度的情况下。...fullpage是jquery插件 引入fullpage的js文件 页面结构 编写js代码 <!

5.3K30

滚动穿透的6种解决方案【已自测】

需要我们能确保用户不发生上页面滚动屏幕的情况下就能触发弹层出现,就不会出现我上边说的问题。...就能阻止滚动穿透。 关键代码: js控制弹窗的交互、弹窗的禁止滚动 ?...4、如果手势是向上,且页面现在滚动的位置刚好是整个可滚动高度——弹窗内容可视区域高度的值,说明上滑到底,阻止默认事件。...这时,我们可以通过记录用户打开弹窗前所滚动页面的位置,弹层展开的时候赋给bodycss中的top值,等关闭弹层的时候,再把这个值赋值给bodyjs中的scrollTop值,还原body的滚动位置。...最后总结: 接着最后一个方案的问题,我返回去测试了所有方案真机上打开弹窗时的上或下拉问题。

13.5K31

嵌套滑动通用解决方案--NestedScrollingParent2

按分析的view结构直接实现 可见,tabLayout是吸顶状态,无法继续滑动内层RecyclerView(抬起手指继续也不行)。(点击查看相关代码) 那么该咋办呢?...那么是否可以tabLayout吸顶时,外层不要拦截事件,从而内层RecyclerView获取事件进而滑动呢?...RecyclerView,距离为lastItemTop,刚好到顶;剩下的就内层了。...[1] = dy; }else { //内层已滚动的距离,小于想要滚动的距离,那么内层消费一部分,到顶后,剩的还给外层自行滑动...,大于想要滚动的距离,内层自行处理 }else { //内层已滚动的距离,小于想要滚动的距离,那么内层消费一部分,到顶后,剩的外层滑动

3.6K31

仿腾讯课堂固定滚动列表ReactNative组件

一开始想两种大的思路:一种是完全靠JS层面,通过ScrollView暴露的API去实现,第二种是原生+JS,这里涉及到几个关键的东西,如何寻找Tab导航控件中的ScrollView或者ListView和控制手势实现的效果...发现第一种方法解决如何寻找子控件并判断滚动状态上没有方法(可能是我没发现)以及性能上的考量,那就采用第二种方法。 分析 为了解决上面的问题,我们需要了解几个关键点。...另外,判断手势是往上还是往下滑的问题放到后面说明。...属性发现其屏幕上的LocationOnScreenX坐标不同,如果当前滚动容器显示则等于0。...剩下最后一个如何通知内层容器滚动呢?先卖个关子,解决这个问题之前,我们先来了解下Android中的View事件是如何传递的。 正所谓知己知彼,百战不殆,看看Android触摸事件类型有哪些?

4.8K70

Flutter 3.13 组件更新 | 欢迎 Slivers 体系 5 位新成员

有些场景下,我们期望交叉轴方向可以排若干个 Sliver 滑块,共同响应滚动,特别是像宽度充裕的桌面端。 如下所示,左中右三块 SliverList 水平排布,共同滑动。...这种场景之前是很难实现的,现在有了 SliverCrossAxisGroup 组件,就可以竖直滑动视口中,将若干个 Sliver 水平排列,作为一个片组。...比如竖直方向滑动中,他就类似于 Row 组件,将 Sliver 孩子们水平排列。其中: SliverConstrainedCrossAxis:指定片的交叉轴尺寸。...其中通过 SliverConstrainedCrossAxis 可以指定某个滑块水平方向的固定尺寸;也可以通过 SliverCrossAxisExpanded 指定在水平方向尺寸的占份,下面 tag1...解决的场景是: 交叉轴方向,需要摆放若干个滑块时,这些滑块可以共同滚动。 ---- 4.

71720

屏 H5 开发实践九问 - 腾讯ISUX

屏的交互形式自从 H5 中流行起来,便广泛应用在产品宣传、广告、招聘和活动运营等场景中,作为微信朋友圈广告惯用的形式,其影响力更是得到了强化与放大。如今屏H5可谓玲琅满目,数不尽数。...内部滚动即某屏内部还有滚动(但实际上系统的滚动屏的滚动是冲突对立的),如果这一屏不涉及复杂的 DOM,我还是觉得可以使用 iScroll,虽然它在安卓上的性能一直被诟病,但经过非常多安卓机的检验,效果还是可接收范围内的...,而 iOS 和 Android 的大部分浏览器中,页面滚动时是会阻止页面重绘的(JS 的执行也无法立刻生效页面中),所以Demo 里看到的效果就是回弹后才翻屏。...适配的核心就是确保内容不同的屏幕分辨率下显示正常,经常采用的方式有 REM、Media Query 和 JS+CSS,没有一套永恒不变的适配方案,往往需要多种结合。...不过 iPhone4/4s 这种小屏幕下,也可以尝试取消分屏滑动,直接用浏览器原生的滚动

3.7K81

屏 H5 开发实践九问 - 腾讯ISUX

屏的交互形式自从 H5 中流行起来,便广泛应用在产品宣传、广告、招聘和活动运营等场景中,作为微信朋友圈广告惯用的形式,其影响力更是得到了强化与放大。如今屏H5可谓玲琅满目,数不尽数。...内部滚动即某屏内部还有滚动(但实际上系统的滚动屏的滚动是冲突对立的),如果这一屏不涉及复杂的 DOM,我还是觉得可以使用 iScroll,虽然它在安卓上的性能一直被诟病,但经过非常多安卓机的检验,效果还是可接收范围内的...,而 iOS 和 Android 的大部分浏览器中,页面滚动时是会阻止页面重绘的(JS 的执行也无法立刻生效页面中),所以Demo 里看到的效果就是回弹后才翻屏。...适配的核心就是确保内容不同的屏幕分辨率下显示正常,经常采用的方式有 REM、Media Query 和 JS+CSS,没有一套永恒不变的适配方案,往往需要多种结合。...不过 iPhone4/4s 这种小屏幕下,也可以尝试取消分屏滑动,直接用浏览器原生的滚动

4.1K40

Github项目推荐 | 股市预测的机器学习深度学习模型资源集锦

Recurrent Neural Network - 简单循环神经网络 Encoder-Decoder Feed-forward + Vanilla Recurrent Neural Network...- 编码器 - 解码器前馈+简单循环神经网络 Vanilla Bidirectional Neural Network - 简单双向神经网络 2-Path Vanilla Recurrent Neural...使用蒙特卡罗进行股市模拟,stock-forecasting-monte-carlo.ipynb 利用蒙特卡罗-马尔可夫链模拟股票市场,mcmc-stock-market.ipynb Tensorflow-js...我Tensorflow JS中编写了LSTM递归神经网络和简单的信号滚动代理,你可以 huseinhouse.com/stock-forecasting-js 中试试。...由于篇幅过长,剩余的结果图请移步本项目查看>>>https://github.com/huseinzol05/Stock-Prediction-Models Results free agent 这个代理可以每笔交易中买卖

6.7K42

移动端事件详解

touchstart事件 touchmove事件 touchend事件 移动端事件对象 touches 屏幕上有几个触点 targetTouches 绑定事件的元素上有几个触点 changedTouches 屏幕上...)(用的最多) pageX/Y获取的是 , 触点相对于HTML文档左边沿的的X/Y坐标(包含滚动) screenX/Y获取的是返回触点相对于屏幕左边沿的的X/Y坐标.不包含页面滚动的(screenX/...Y有兼容性) 细节: 如果想要clientX/YpageX/Y正确的结果,要写全viewport设置,如果写不全,那么不会得到正确的结果 300ms延迟 形成原因:曾经移动端萌芽阶段的时候,我们把PC...大于竖直 就是水平滑动 如果 终止点坐标减去起始点坐标大于0 那么是向 右 否则是向左 如果 竖直坐标的差值的绝对值 大于水平 就是竖直滑动 如果 终止点坐标减去起始点坐标大于0...那么是向 下 否则是向上 代码如下: <!

95720

「JavaScript 」动画基础 - 03

该属性用于元素中添加,移除及切换 CSS 类。...滑动也分为左滑动和右滑动判断的标准是 移动距离正负 如果是负值就是左 反之右 如果是左就播放下一张 (index++) 如果是右就播放上一张 (index--) // 4....案例:返回顶部 当页面滚动某个地方,就显示,否则隐藏 点击可以返回顶部 1.3.2.案例分析 滚动某个地方显示 事件:scroll页面滚动事件 如果被卷去的头部(window.pageYOffset )...移动端视频插件 zy.media.js 框架,顾名思义就是一套架构,它会基于自身的特点向用户提供一套较为完整的解决方案。框架的控制权框架本身,使用者要按照框架所规定的某种规范进行开发。...它能开发PC端,也能开发移动端 Bootstrap JS插件使用步骤: 1.引入相关js 文件 2.复制HTML 结构 3.修改对应样式 4.修改相应JS 参数 1.7.

1.1K20

移动端浏览器和微信浏览器上禁止body的滚动

; position: fixed; } 这个就是完全的禁止上下滑动,没有滚动条,且iOS的safari浏览器上完全不能上下滚,但是确发现微信浏览器上可以上下缩动(下面再解决)。...我最后发现,上面这种解决是普遍的浏览器做法,如果要更彻底一点,就直接使用js代码去控制touchmove的事件,直接精致,这个微信和手机浏览器上完成可行。...参考:http://www.cnblogs.com/lbcheng/p/6044303.html 经过上面的设置,如果用户微信浏览器上不能滚动,但是跳出到了iOS的safari浏览器之后,会有很多变数...,比如高度不够,这时滚动也会好一些,那么我这样设置:1、如果在微信上,默认禁止滚动,并且连默认的上下缩都不能。...具体实现:微信上,禁止上下缩: /*去掉手机滑动默认行为*/ $('body').on('touchmove', function (event) { event.preventDefault

2.8K10
领券