欢迎来到天天文库
浏览记录
ID:30504881
大小:16.69 KB
页数:5页
时间:2018-12-30
《javascript动画的实现原理浅析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解Javascript动画的实现原理浅析 这篇文章主要介绍了Javascript动画的实现原理浅析,本文用两个实例来解释Javascript动画的实现原理,需要的朋友可以参考下 假设有这样一个动画功能需求:把一个div的宽度从100px变化到200px。写出来的代码可能是这样的: 代码如下: functionanimate1(element,endValue,duration){ varstart
2、Time=newDate(), startValue=parseInt(element.style.width), step=1; vartimerId=setInterval(function(){ varnextValue=parseInt(element.style.width)+step; element.style.width=nextValue+'px'; if(nextValue>=endValue){ clearInterval(timerId); //显示动画耗时 element.innerHTML=newDa
3、te-startTime; } },duration/(endValue-startValue)*step);对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解 } animate1(document.getElementById('test1'),200,1000); 原理是每隔一定时间增加1px,一直到200px为止。然
4、而,动画结束后显示的耗时却不止1s(一般是1.5s左右)。究其原因,是因为setInterval并不能严格保证执行间隔。 有没有更好的做法呢?下面先来看一道小学数学题: 代码如下: A楼和B楼相距100米,一个人匀速从A楼走到B楼,走了5分钟到达目的地,问第3分钟时他距离A楼多远? 匀速运动中计算某个时刻路程的计算公式为:路程*当前时间/时间。所以答案应为100*3/5=60。 这道题带来的启发是,某个时刻的路程是可以通过特定公式计算出来的。同理,动画过程中某个时刻的值也可以通过公式计算出来,而不是累加得出: 代码如下: fun
5、ctionanimate2(element,endValue,duration){ varstartTime=newDate(), startValue=parseInt(element.style.width); vartimerId=setInterval(function(){ varpercentage=(newDate-startTime)/duration;对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级
6、党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解 varstepValue=startValue+(endValue-startValue)*percentage; element.style.width=stepValue+'px'; if(percentage>=1){ clearInterval(timerId); element.innerHTML=newDate-startTime; } },13); } animate2(document.getElementById('
7、test2'),200,1000); 这样改良之后,可以看到动画执行耗时最多只会有10几ms的误差。但是问题还没完全解决,在浏览器开发工具中检查test2元素可以发现,test2的最终宽度可能不止200px。仔细检查animate2函数的代码可以发现: 1.percentage的值可能大于1,可以通过Math.min限制最大值解决。 2.即使保证了percentage的值不大于1,只要endValue或startValue为小数,(endValue-startValue)*percentage的值也可能产生误差,因为Javascript小数
8、运算的精度不够。其实我们要保证的只是最终值的准确性,所以在percentage为1的时候,直接使用endValue即可。对党的认识也有了
此文档下载收益归作者所有