资讯专栏INFORMATION COLUMN

JS动画之定时器详解

vvpvvp / 1595人阅读

摘要:广义说一切通过改变的视觉呈现都叫动画例如,按钮,链接等元素交互反馈。狭义说通过定时器连续调用函数进行元素属性改变产生的视觉动画效果。

广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。
狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。

定时器

定时器是JavaScript动画的核心技术;
setTimeout(),setInterval()是大家熟知的,以前经常使用的;
一般都是做些辅助性,锦上添花的事;
细心的人可能会发现一个现象,从其他标签页切换到有循环动画页面会有卡顿和急速帧切换现象;
问题就在于他们的内在运行机制;

认识setTimeout

第一个参数推荐用函数形式,字符串形式会两次解析,还有eval一样的问题;
不止两个参数,可以更多,见示例1;
this指向问题,见示例2;
返回值是个整数;
clearTimeout(timer)取消定时器;
setInterval,clearInterval同上;

示例1:

setTimeout(function(a,b){ 
    console.log(a+b); 
},1000,1,1);

示例2:

var a = 0;
function foo(){
    console.log(this.a);
};
var obj = {
    a : 2,
    foo:foo
}
setTimeout(obj.foo,100);
运行机制

示例:

setTimeout(function(){ 
    console.log(1); 
}); 
console.log(0);

原因:加入队列,阻塞执行。

setTimeout图例:

setInterval图例:

存在即合理

父子元素事件冒泡,需要先执行父元素,见示例3;
用户自定义的回调函数,通常在浏览器的默认动作之前触发,见示例4;

示例3:

示例4:



认识requestAnimationFrame

用法与setTimeout类似,只是不需要时间参数;
机制完全不同:
1, setTimeout是异步操作,加入任务队列( event loop ),当js引擎线程中同步代码执行完才会从任务队列中取出执行;
2,raf是用户代理(浏览器)专门针对动画开发的接口,用户代理会以合适的频率进行动画帧更新(一般同显示器刷新频率,1000/60ms),在隐藏或者非活动页面会停止帧更新,节省CPU资源;
3,raf示例

raf简单兼容
window.requestAnimFrame = (function(){ 
    return  window.requestAnimationFrame || 
            window.webkitRequestAnimationFrame ||         
            window.mozRequestAnimationFrame || 
            function( callback ){     
                window.setTimeout(callback, 1000 / 60);
             };
     })();

参考:
setTimeout详细介绍

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/52076.html

相关文章

  • JS动画时器详解

    摘要:广义说一切通过改变的视觉呈现都叫动画例如,按钮,链接等元素交互反馈。狭义说通过定时器连续调用函数进行元素属性改变产生的视觉动画效果。 广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。 定时器 定时器是JavaScript动画的核心技术;setTimeout(),setInterval()是...

    justjavac 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    Labradors 评论0 收藏0
  • IOS学习笔记——iOS组件UIScrollView详解

    摘要:做出此决定,它暂时拦截触摸按下事件通过启动一个定时器,并在定时器触发之前,看是否触摸手指做任何运动。如果定时器触发无位置显著的变化,滚动视图将跟踪事件的内容视图的感动子视图。 引言 UIScrollView的是几个UIKit类包括的UITableView和UITextView中的超类。 一个UIScrollView对象(或者,简单地说,一个滚动视图)的核心概念是,它是一个视图,其起...

    pubdreamcc 评论0 收藏0
  • 小菊花课堂JS的防抖与节流

    摘要:文章来源详谈防抖和节流轻松理解函数节流和函数防抖函数防抖和节流好啦,今天的小菊花课堂之的防抖与节流的内容就告一段落啦,感各位能耐心看到这里。 前言 陆游有一首《冬夜读书示子聿》——古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。,其中的意思想必大家都能明白,在学习或工作中,不断的印证着这首诗的内涵。所以,又有了此篇小菊花文章。 详解 在前端开发中,我们经常会碰到一些会持...

    leoperfect 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<