主机格调

之前做移动端页面的时候遇到一个需求:页面有很多表单,点下面提交按钮,如果有表单为空或者填写错误,网页就滚动到错误的表单处,让用户继续填写正确。也就是表单验证。

因为页面用了Zepto,自然想到用animate,设置300ms然后scrollTop为当前表单距离网页顶部高度即可。结果发现根本不生效。问同事后一起看源码,才发现Zepto里的animate只能改变CSS,而scrollTop属于js范围,恰巧jQuery又优化过这个,所以jQuery可以这样写,Zepto不行。

想到之前移动端里写返回顶部也是没办法做页面滚动效果,所以放弃滚动效果,直接改变scrollTop算了,简单粗暴。

上周末趁着有空,用了HTML5的requestAnimationFrame来做这个动画,顺便也研究下requestAnimationFrame的工作原理。

以前我们用setInterval或setTimeout,第二个参数都会写执行时间,例如setInterval(function(){},1000),这里的1000就是每1000ms执行一次方法。而到了requestAnimationFrame就变了,requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。

通俗的讲,使用requestAnimationFrame后,无法自己设置执行时间,浏览器默认(1/60)秒执行一次方法。

而我们已经习惯了写一个时间参数,就代表方法执行一次的时间,综合返回顶部也需要这个效果,所以就写了scrolling这样一个小插件。

示例:

二维码DEMO链接GitHub项目地址

最新版都会在GitHub上更新,欢迎Star。

使用起来也很简单,看下DEMO就明白了。不需要js库依赖,引用后可以直接使用,js源码只有不到2kb。

如果大家有什么疑问,可以在GitHub里提Issues,也可以在本文里提问,我看到都会第一时间回复的。

引用文章:《性能更好的js动画实现方式——requestAnimationFrame

>>原创文章,欢迎转载。转载请注明:转载自西门的后花园,谢谢!
>>原文链接地址:http://ons.me/554.html