移动swiper中动画卡顿,通过requestAnimationFrame写向下的动画

news/2024/7/11 1:11:24 标签: h5, 前端, jquery, requestAnimationFrame, 网页设计

当手机网页使用swiper的时候,在css中写入动画的时候有些时候浏览页面会进行卡顿,这个时候你就需要手写动画了,以下为参考的一些的案例,大家可以用来参考

setT();
    var dataSet = 0, dataStop = 0.35, dataSetT = 7;

    function setT(){
        $(".jiantou").css({"margin-bottom" : dataSet+"px" });
        dataStop =  dataSet >= dataSetT ? -dataStop : dataSet <= -dataSetT ? -dataStop : dataStop;
        dataSet += dataStop;
        requestAnimationFrame(setT);
    }

requestAnimationFrame

与setTimeout相比,requestAnimationFrame最大的优势是由系统来决定回调函数的执行时机。具体一点讲,如果屏幕刷新率是60Hz,那么回调函数就每16.7ms被执行一次,如果刷新率是75Hz,那么这个时间间隔就变成了1000/75=13.3ms,换句话说就是,requestAnimationFrame的步伐跟着系统的刷新步伐走。它能保证回调函数在屏幕每一次的刷新间隔中只被执行一次,这样就不会引起丢帧现象,也不会导致动画出现卡顿的问题。

这个API的调用很简单,如下所示:

var progress = 0;
//回调函数
function render() {
    progress += 1; //修改图像的位置
 
    if (progress < 100) {
           //在动画没有结束前,递归渲染
           window.requestAnimationFrame(render);
    }
}
 
//第一帧渲染
window.requestAnimationFrame(render);

除此之外,requestAnimationFrame还有以下两个优势:

  • CPU节能:使用setTimeout实现的动画,当页面被隐藏或最小化时,setTimeout 仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态,刷新动画是没有意义的,完全是浪费CPU资源。而requestAnimationFrame则完全不同,当页面处理未激活的状态下,该页面的屏幕刷新任务也会被系统暂停,因此跟着系统步伐走的requestAnimationFrame也会停止渲染,当页面被激活时,动画就从上次停留的地方继续执行,有效节省了CPU开销。
  • 函数节流:在高频率事件(resize,scroll等)中,为了防止在一个刷新间隔内发生多次函数执行,使用requestAnimationFrame可保证每个刷新间隔内,函数只被执行一次,这样既能保证流畅性,也能更好的节省函数执行的开销。一个刷新间隔内函数执行多次时没有意义的,因为显示器每16.7ms刷新一次,多次绘制并不会在屏幕上体现出来。

 


http://www.niftyadmin.cn/n/1466673.html

相关文章

解决Firefox中select选中时的虚线框问题

在前端页面需要下拉框的时候&#xff0c;不部分人还是会选择select情况的&#xff0c;不过还是可以自己手写一份&#xff0c;但是在select的时候要考虑到各种兼容问题&#xff0c;下面就是解决火狐浏览器select选中虚线的问题。 select:focus{outline: 0;border: 0; } 这种方…

jQuery上拉加载更多

注&#xff1a;请在移动端查看上拉&#xff0c; 下拉加载更多效果 前言&#xff1a; 由于&#xff0c;不管是在PC端&#xff0c;还是在移动端&#xff0c;上拉加载更多这个功能可以说是少不了的&#xff0c;尤其是在移动端。 在写这个上拉加载更多这个功能之前&#xff0c;我也…

移动端使用zepto.js想要滑动动画时写的jqurry方法

移动端使用 zepto.js需要页面移动动画的时候可以使用下面的方法&#xff1a; var timer;var $body $( body,html );var top $(.btn_toTop).offset().top;function animated(id){if($body.scrollTop() < 0){top $(.btn_toTop).offset().top;clearTimeout(timer)}else{top…

页面解除复制选中 脚本

由于js执行顺序从上至下&#xff0c;页面加载完后&#xff0c;js已经执行完毕&#xff0c;所以不能在页面中编辑js脚本。选择谷歌浏览器console中运行如下脚本 谷歌的console在当前页面下按住F12调出即可。 <script language"javascript" type"text/javasc…

JS中闭包的介绍

闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包&#xff0c;首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种&#xff1a;全局变量和局部变量。 Javascript语言的特殊之处&#xff0c;就在于函数内部可以直接读取…

一个例子让你牢记JSON

1、JSON基本上是现在最常用的数据交换格式&#xff0c;非常易于人阅读和编写。&#xff0c;同时也易于机器解析和生成。 2、几句话说明JSON的所有规定&#xff1a; 并列的数据之间用逗号“&#xff0c;”分割&#xff1b; 映射用冒号“&#xff1a;”表示&#xff1b; 映射…

前端开发注意事项个人参考

一、html页面结构 1、标签尽量使用语义化标签&#xff0c;使人一目了然&#xff0c;下面是一些常见的语义化标签 <header></header>&#xff1a;通常包括网站标志、主导航、全站链接以及搜索框。 <nav></nav>&#xff1a;标记导航&#xff0c;一般用…

去除input输入框默认在ie或者edge下出现删除按钮

当使用input输入框的时候&#xff0c;默认情况下在后面会出现删除按钮&#xff0c;这个时候需要代码去去除&#xff0c;去除ie下的删除按钮代码如下&#xff1a; ::-ms-clear{display: none;} ::-ms-reveal{display: none;} 去除edge下的删除按钮代码如下 ::-o-clear{displa…