一道js动画题目
2013-11-02 14:28
309 查看
昨日TX上机+面试,无奈又输在时间和平时的细节积累上了,废话不多说,直接上这道让我悲剧了的题目:
实现一个DIV动画效果,DIV移动从快到慢,最后停止,时间为5s。
咋来审题,其实需要实现这个效果是相当简单的,但是毕竟是亲身上机,无奈上机使用的编辑器也没有js的智能提示(平时习惯太坏),所以各方面因素 ,这道题终究迫于时间问题而未完成,这里做个笔记,来了却自己当时的做题思路,代码奉上:
代码中构建了两个对象,一个timer为时间定时器,一个demo对象控制动画,核心思想是让DIV移动时,他的speed逐步衰减(与剩余时间有关,按剩余时间除以总时间来算百分比),效果大家自己COPY代码演示即可。
不管怎样,半个多月了,经历大大小小的各种面试,学到了许多东西。睡觉了,今天又要继续找工作咯 ; )
实现一个DIV动画效果,DIV移动从快到慢,最后停止,时间为5s。
咋来审题,其实需要实现这个效果是相当简单的,但是毕竟是亲身上机,无奈上机使用的编辑器也没有js的智能提示(平时习惯太坏),所以各方面因素 ,这道题终究迫于时间问题而未完成,这里做个笔记,来了却自己当时的做题思路,代码奉上:
<!DOCTYPE HTML> <html> <head> <title>Animation Test</title> <style type="text/css"> * { margin: 0; padding: 0; } #demo { position: absolute; left: 0px; top: 0px; width: 100px; height: 100px; background-color: #aaf; } </style> </head> <body> <div id="demo"></div> <script type="text/javascript"> (function(window){ "use strict"; var timer, demo; timer = { id: null, fns: [], delay: 1000 / 60, loop: function(){ var i, l, fns; fns = timer.fns; for(i = 0, l = fns.length; i < l; i++){ if(fns[i]() === false){ fns.splice(i, 1); i--; l--; } } if(fns.length <= 0){ timer.stop(); } }, start:function(){ if(this.id !== null){ return; } this.id = window.setInterval(this.loop, this.delay); }, stop:function(){ if(this.id === null){ return; } window.clearInterval(this.id); }, add:function(func){ if(typeof func !== "function"){ return; } this.fns.push(func); this.start(); } }; demo = { o: document.getElementById("demo"), speed: 5, startTime: null, duration: 5000, now: function(){ return (new Date()).getTime(); }, setOffsetX:function(x){ this.o.style.left = x + "px"; }, getOffsetX: function(){ return parseFloat(this.o.style.left) || 0; }, step:function(){ var x; if(demo.now() > demo.startTime + demo.duration){ return false; } x = demo.getOffsetX(); demo.speed = 5 * (1 - (demo.now() - demo.startTime) / demo.duration); demo.setOffsetX(x + demo.speed); }, doTest:function(){ if(this.startTime !== null){ return; } this.startTime = this.now(); timer.add(this.step); } }; demo.doTest(); })(window); </script> </body> </html>
代码中构建了两个对象,一个timer为时间定时器,一个demo对象控制动画,核心思想是让DIV移动时,他的speed逐步衰减(与剩余时间有关,按剩余时间除以总时间来算百分比),效果大家自己COPY代码演示即可。
不管怎样,半个多月了,经历大大小小的各种面试,学到了许多东西。睡觉了,今天又要继续找工作咯 ; )
相关文章推荐
- HTML与JSP页面的区别
- HTML与JSP页面的区别
- JS图片加载时获取图片宽高信息
- javascript 一维数组转换为二维数组
- Jsp:useBean使用详解
- javascript函数参数及arguments
- 不错的js代码
- javascript函数调用上下文this
- 找不到类型或命名空间名称“LitJson” 解决
- js区域打印
- js框架开发之旅--事件
- 谈谈JSON数据格式
- JSON序列化与反序列化
- HTML5里面的知识:Canvas的KineticJS多边形教程
- 纯Jsp式的登陆注册
- HTML5那些故事:Canvas的KineticJS图片教程!
- <button>按钮默认的类型是submit
- 如何引用 System.Runtime.Serialization.Json(VS 2008)
- js 实现瀑布流式布局
- jsoncpp使用