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

Chrome dev代码片段: javascript平滑滚动缓动

平滑滚动缓动是一种在网页中实现平滑滚动效果的技术,通过逐渐改变元素的位置来创建流畅的滚动效果。以下是一个使用JavaScript实现平滑滚动缓动的代码片段:

代码语言:txt
复制
function smoothScroll(target, duration) {
  const targetElement = document.querySelector(target);
  const targetPosition = targetElement.getBoundingClientRect().top;
  const startPosition = window.pageYOffset;
  const distance = targetPosition - startPosition;
  let startTime = null;

  function animation(currentTime) {
    if (startTime === null) startTime = currentTime;
    const timeElapsed = currentTime - startTime;
    const run = ease(timeElapsed, startPosition, distance, duration);
    window.scrollTo(0, run);
    if (timeElapsed < duration) requestAnimationFrame(animation);
  }

  // 缓动函数
  function ease(t, b, c, d) {
    t /= d / 2;
    if (t < 1) return c / 2 * t * t + b;
    t--;
    return -c / 2 * (t * (t - 2) - 1) + b;
  }

  requestAnimationFrame(animation);
}

// 使用示例
const button = document.querySelector('.scroll-button');
button.addEventListener('click', () => {
  smoothScroll('.target-element', 1000);
});

这段代码实现了一个平滑滚动缓动效果。当点击具有 scroll-button 类的按钮时,页面将平滑滚动到具有 target-element 类的目标元素处,动画持续时间为1000毫秒。

这个代码片段中使用了requestAnimationFrame方法来实现动画效果,它会在浏览器下一次重绘之前调用指定的回调函数,从而创建流畅的动画效果。getBoundingClientRect()方法用于获取目标元素相对于视口的位置信息,window.pageYOffset用于获取当前滚动位置,计算出滚动距离和起始位置之间的差值。ease函数是一个缓动函数,用于控制滚动的速度曲线,这里使用的是缓入缓出效果。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云内容分发网络(CDN)。腾讯云云服务器提供可靠的计算能力,适用于托管网站、应用程序和服务。腾讯云内容分发网络可以加速网站和应用程序的内容传输,提供更快的访问速度和更好的用户体验。

腾讯云云服务器产品介绍链接:https://cloud.tencent.com/product/cvm 腾讯云内容分发网络产品介绍链接:https://cloud.tencent.com/product/cdn

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

相关·内容

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

通过滚轮事件中的 deltaY、deltaX 值获取到最终滚动距离,浏览器帧绘制函数 requestAnimationFrame 来逐帧设置页面的 scrollTop 达到模拟滚动的效果,并利用线性插值或函数等数学方法来计算变化过程中的值...,最终达到平滑滚动效果。...函数除了使用线性插值来实现平滑滚动,还可以使用常见的函数来计算。...(value); }}上面代码中 linearProgress 表示一个从 0 到 1 的线性进度值,通过代入函数计算得出 easedProgress 进度,最后将进度乘以起始值和目标值之间的差...不同的函数会有不同的效果,可以传入不同的 easing 函数来改变。

1.2K41

css+js实现左右滑动卡片组件

目标位移与帧位移 为了做出滑动后到停留位置的效果,所以当用户左右滑动屏幕时,会记录滑动距离,计算出卡片该到的目标位移位置,目标位移位置是有规则的,因为这里有10张卡片均分宽度,位置必须是(100%/...目标位移代码片段 onDocumentMouseUp : function(e){ //如果是点击事件 不设置移动 if (!...this.transNum) * 10; this.fingerTouch = false; } 记录了目标位移后,每一帧会以一定的帧位移不断靠近目标位移,使其在手指离开屏幕时仍有慢慢滑动到目标位置的效果...1)与2)代码片段: if( this.ani_move && this.fingerTouch == false) { // 判断是否不同向 if (((e.clientX - prex...使用css transform来做无限滚动的效果,可以避免改变dom结点带来的页面重新布局。 下图是chrome cpu6倍减速调试效果,没有触发layout,FPS基本维持在60左右。

30.1K102

《现代Javascript高级教程》优化动画和渲染的利器

现代JavaScript高级小册 深入浅出Dar 现代TypeScript高级小 requestAnimationFrame:优化动画和渲染的利器 引言 在Web开发中,实现平滑且高性能的动画和渲染是一个关键的需求...3.4 UI效 在网页开发中,为用户提供吸引人的UI效是一种常见的需求。使用requestAnimationFrame,可以实现各种各样的UI效,如平滑滚动效果、渐变动画、拖拽效果等。...4.1 实现平滑滚动效果 下面的示例代码演示了如何使用requestAnimationFrame实现平滑滚动效果: function smoothScrollTo(targetY, duration...在step函数中,我们根据时间的流逝计算出进度progress,并使用函数easingFunction来调整进度。...通过使用requestAnimationFrame,开发者可以实现平滑滚动效果、高性能的游戏渲染、复杂的数据可视化和吸引人的UI效等。

16020

06-移动端开发教程-fullpage框架

引入文件及文件依赖关系 fullpage.js插件依赖:fullpage的css文件,jQuery,如果设置了options中css3: false*,如果你用除了jQuery的默认linear 和swing的效果之外的效果的话...-- 如果是ie8浏览器或者设置了css3: false 那么需要引入jQuery的easing插件,默认可以省略就行了。...--引入jQuery的插件fullpage.js核心文件--> 2.4...afterRender 页面结构生成后的回调函数,或者说页面初始化完成后的回调函数 afterSlideLoad 滚动到某一水平滑块后的回调函数,与 afterLoad 类似,接收 anchorLink...、index、slideIndex、direction 4个参数 onSlideLeave 某一水平滑滚动前的回调函数,与 onLeave 类似,接收 anchorLink、index、slideIndex

5.1K90

06-移动端开发教程-fullpage框架

引入文件及文件依赖关系 fullpage.js插件依赖:fullpage的css文件,jQuery,如果设置了options中css3: false*,如果你用除了jQuery的默认linear 和swing的效果之外的效果的话...-- 如果是ie8浏览器或者设置了css3: false 那么需要引入jQuery的easing插件,默认可以省略就行了。...--引入jQuery的插件fullpage.js核心文件--> 2.4...afterRender 页面结构生成后的回调函数,或者说页面初始化完成后的回调函数 afterSlideLoad 滚动到某一水平滑块后的回调函数,与 afterLoad 类似,接收 anchorLink...、index、slideIndex、direction 4个参数 onSlideLeave 某一水平滑滚动前的回调函数,与 onLeave 类似,接收 anchorLink、index、slideIndex

5.1K50

导航栏滚动吸顶并自动高亮和点击跳转锚点

实现方法 正常情况下我们点击自动定位到其所在位置一般用id锚点的方式,但是这种方式有一个缺陷就是无法实现滚动效果,而且带url上还会通过hash的方式显示出ID,另外也无法实现滚动到内容所在位置自动高亮导航栏...代码实现 话不多说,我们直接来实现即可。 我这次采用的是react来写,具体思路都是相同的,无论你用的是vue还是angular 还是使用jq还是原生js,都是一样的。...导航栏也增加何时吸顶的标识以及导航栏高亮的标识,另外增加了一个class为zhanfIx的地址,因为当导航栏吸顶时,此处会因为空出位置,下面内容上移,而产生不和谐的效果,我们需要在其吸顶的同时增加一个div来占位,以增加平滑的效果...,此变量是为了防止底部高度不够时, 无法定位到最下方,结果导致程序无限循环的bug, 通过下面的代码应该可以明白此变量的意义*/ let prevScrollTop = null; let...,并超过导航栏位置自动吸顶效果,同时点击导航栏滚动至锚点位置,实现的最终效果可以看阿里云市场详情页中的效果,比他显示的效果多了滚动效果。

10.4K40

详解TWEEN.JS 补间动画

tweenJS是一个简单的javascript补间动画库,支持数字,对象属性,CSS样式等的动态效果过渡,允许平滑的修改元素的属性值。...效果函数: .easing(TWEEN.Easing.easing函数.easing类型) easing函数: Linear ==> 线性匀速运动效果 Quadratic ==> 二次方的...Cubic ==> 三次方的 Quartic ==> 四次方的 Quintic ==> 五次方的 Sinusoidal ==> 正弦曲线的 Exponential ==> 指数曲线的...Circular ==> 圆形曲线的 Elastic ==> 指数衰减的正弦曲线 Back ==> 超过范围的三次方的 Bounce ==> 指数衰减的反弹 easing...类型: In ==> easeIn,加速,先慢后快 Out ==> easeOut,减速,先快后慢 InOut ==> easeInOut,前半段加速,后半段减速 使用自定义的功能: 自定义函数

3.7K21

介绍一个页面平滑滚动小技巧

背景 今天写需求的时候发现一个小的优化点:用户选择了一些数据之后, 选择的条目需要高亮, 有时候列表很长, 为了提升用户体验,需要加个滚动, 自动滚动到目标位置。...1.scrollTop 第一想到的还是 scrollTop, 获取元素的位置, 然后直接设置: // 设置滚动的距离element.scrollTop = value; 不过这样子有点生硬, 可以加个效果...window.scrollTo(0, scrollTop); requestAnimationFrame(step); } }; step();}; // 平滑滚动到顶部...,也可以让容器(非鼠标手势触发)的滚动变得平滑。...1. behavior表示滚动方式。auto 表示使用当前元素的 scroll-behavior 样式。instant`和`smooth表示`直接滚到底`和`使用平滑滚动`。

1.3K20

Canvas系列(12):动画高级

当然有,那就是让动画更加平滑,更细滑。...的公式如下: 当前速度 = (最终位置 - 当前位置) * 系数。 新的位置 = 当前位置 + 当前速度。...我们的思维不能定势到只能做物体移动的动画,只要有从状态A平滑变化到状态B的场景都可以使用动动画,就比如宽高的变化,颜色的变化,透明度的变化等等。...说出来你可能会不相信,动动画是速度使用方程,而弹性动画是加速度使用方程。也就是说: 当前加速度 = (最终位置 - 当前位置) * 弹性系数。 新的速度 = 当前速度 + 当前加速度。...建议你自己写一写代码,或者自己把代码下载下来运行一下,代码地址:https://github.com/KaiOrange/canvas-demo。

1.1K51

transform、transition方法详解及scale、zoom差异性说明

50px, 50px); /*只在水平方向移动50px*/ transform: translate(50px); CSS3动画过渡 Transitions 将元素的某个属性从一个属性值在指定的时间内平滑过渡到另一个属性值来实现动画功能...transition-timing-function: timing-function; transition-delay: transition-delay; property:表示对哪个属性进行平滑过渡...duration:表示在多久时间内完成属性值的平滑过渡 timing-function:表示通过什么方法进行平滑过渡,函数 delay: 表示指定变换动画特效延迟多久后才开始执行(当触发特效后,经过...changeScale(); // 改变页面大小时,进行动态判断控制 window.onresize = changeScale; 如在分辨率下1920 * 1080会缩放0.5,截图效果如下(注意,竖向滚动条...Chrome浏览器下,可以通过设置html和body设置宽度、高度进行控制。

3.7K21

高中物理学运动公式实现js动画

不管是css还是javascript来创建动画,我们都会听到一个词“”。自然界中没有东西从一点呈线性的移动到另一点,一般可能需要加速或减速。...在经典动画中,经常会出现“入”,“出”,“出”效果。使动画不再那么尖锐或生硬。...如何用javascript来实现这些效果。 动画是关于时间的函数,本质就是利用浏览器和GPU的渲染过程定时改变元素的属性。...参数:duration-动画持续时间,progress每一帧执行的函数,easing-效果(可传可不传) function Animator(duration, progress, easing)...小球直径:d = 50px 圆周长: l = π * d; 周期: T = 2s 滚动时间: t = 4s 滚动距离:S = π * d * t / T = 314px circle3.addEventListener

1.2K10

现代浏览器探秘(part4):事件处理

图1:通过浏览器进程路由到渲染器进程的输入事件 合成器接收输入事件 在上一篇文章中,我们研究了合成器是如何通过合成栅格化图层来平滑地处理滚动的。...2:将鼠标悬停在页面图层上 了解非快速可滚动区域 由于JavaScript是运行在主线程上的,所以当合成页面时,合成器线程会标记页面的一个区域,该区域将事件处理程序附加为“非快速可滚动区域”。...因此合成器的平滑滚动能力被破坏了。 ? 图4:在覆盖整个页面的非快速可滚动区域进行输入 为了缓解这种情况,你可以在事件侦听器中传递passive:true选项。...在鼠标事件中使用 passive:true 选项意味着可以平滑滚动页面,但是在你想要用preventDefault 来限制滚动方向时,垂直滚动可能已经开始了。...启用 sync-script: 'none' 时,将禁止解析器阻止 JavaScript 执行。 这可以防止你的代码阻止解析器,并且浏览器也不需要担心暂停解析器。 总结 ?

1.3K20

学习 PixiJS — 补间动画

滑动结束时 x 坐标 finalYPosition 滑动结束时 y 坐标 durationInFrames 60 补间需要的帧数,也就是动画应该持续多长时间 easingType "smoothstep" 类型...设置类型 slide 方法的第四个参数是 easingType 。它是一个字符串,用于确定补间加速和减速的类型。...大多数 Charm 的补间效果的默认类型是 smoothstep。 Linear: linear,精灵从开始到停止保持匀速运动。...anySprite 需要移动的精灵 curve 贝塞尔曲线数组 durationInFrames 60 补间需要的帧数,也就是动画应该持续多长时间 easingType "smoothstep" 类型...数组作为第二个参数) c.followCurve( sprite, //需要移动的精灵 curve, //贝塞尔曲线数组 120, //持续时间,以帧为单位 "smoothstep", //类型

2.2K30

过渡与动画 - 逐帧动画&steps调速函数

写在前面 上一篇中我们熟悉五种内置的曲线和(三次)贝塞尔曲线,并且基于此完成了效果....但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过渡状态,就像上篇中所看到的,所有基于贝塞尔曲线的调速函数都会在关键帧之间进行插值运算,从而产生平滑的过渡效果...这个特性显然很棒,平滑的效果确实是我们使用css过渡和动画所追求的。 但是在逐帧动画的场景下,这种平滑的特性恰恰毁掉了我们想要实现的逐帧动画的效果....border-right:0.5em solid; animation:typing 6s steps(15),caret 1s steps(1) infinite; } 但是我们还是有些疑问: 这样的代码是不易维护的...,当更新标题的时候,我们总是需要根据字符的数量来指定不同的宽度样式和steps()函数,这时候正是JavaScript的用武之地 function $$(selector,context){ context

63810

Threejs进阶之十二:Threejs与Tween.js结合创建动画

tween.js为我们封装好了常用的动动画,如线性,二次,三次,四次,五次,正弦,指数,圆形,弹性,下落和弹跳等函数 以及对应的类型:In (先慢后快) ;Out (先快后慢) 和 InOut...(前半段加速,后半段减速) 常见的动动画如下 Linear:线性匀速运动效果; Quadratic:二次方的(t^2); Cubic:三次方的(t^3); Quartic:四次方的(t^...4); Quintic:五次方的(t^5); Sinusoidal:正弦曲线的(sin(t)); Exponential:指数曲线的(2^t); Circular:圆形曲线的(sqrt(...1-t^2)); Elastic:指数衰减的正弦曲线; Back:超过范围的三次方((s+1)t^3 – st^2); Bounce:指数衰减的反弹。...以上每个效果都分三个类型,分别是: easeIn:从0开始加速的,也就是先慢后快; easeOut:减速到0的,也就是先快后慢; easeInOut:前半段从0开始加速,后半段减速到0的

2.9K20

过渡与动画 - 逐帧动画&steps调速函数

写在前面 上一篇中我们熟悉五种内置的曲线和(三次)贝塞尔曲线,并且基于此完成了效果....但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过渡状态,就像上篇中所看到的,所有基于贝塞尔曲线的调速函数都会在关键帧之间进行插值运算,从而产生平滑的过渡效果...这个特性显然很棒,平滑的效果确实是我们使用css过渡和动画所追求的。 但是在逐帧动画的场景下,这种平滑的特性恰恰毁掉了我们想要实现的逐帧动画的效果....border-right:0.5em solid; animation:typing 6s steps(15),caret 1s steps(1) infinite; } 但是我们还是有些疑问: 这样的代码是不易维护的...,当更新标题的时候,我们总是需要根据字符的数量来指定不同的宽度样式和steps()函数,这时候正是JavaScript的用武之地 function $$(selector,context){ context

1.4K70

过渡与动画 - 逐帧动画&steps调速函数

写在前面 上一篇中我们熟悉五种内置的曲线和(三次)贝塞尔曲线,并且基于此完成了效果....但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过渡状态,就像上篇中所看到的,所有基于贝塞尔曲线的调速函数都会在关键帧之间进行插值运算,从而产生平滑的过渡效果...这个特性显然很棒,平滑的效果确实是我们使用css过渡和动画所追求的。 但是在逐帧动画的场景下,这种平滑的特性恰恰毁掉了我们想要实现的逐帧动画的效果....border-right:0.5em solid; animation:typing 6s steps(15),caret 1s steps(1) infinite; } 但是我们还是有些疑问: 这样的代码是不易维护的...,当更新标题的时候,我们总是需要根据字符的数量来指定不同的宽度样式和steps()函数,这时候正是JavaScript的用武之地 function $$(selector,context){ context

1.3K100

Jetpack Compose终于能稳定支持Wear OS,并带来了适用于手机和平板的1.2版本更新

例如可下载字体、Lazy grids、窗口插图、嵌套滚动互操作以及更多工具支持,还有针对平板电脑和 Chrome 操作系统的改进。...谷歌的安卓开发者关系工程师 Kseniia Shumelchyk 说:“在大多数情况下,基于 Compose 的 UI 可以减少代码量并加快开发过程。”...此外,动画支持中添加了曲线,用于实现快速加速和逐渐减速等效果。还有嵌套滚动支持和新的鼠标事件,以及各种错误修复。...不过,Jetpack Compose 是最接近原生解决方案的那个,它为安卓功能提供了很好的支持,而无需尝试跨平台(尽管用 Kotlin 编写的非可视代码也可以在其他地方使用)。...这家低代码平台火了后:不能让老员工凭股权成百万富翁、新员工失望 Firefox 的衰落为什么是必然的?

1.4K20
领券