Javascript 可同时变大变宽等一系列效果运动框架——逐行分析代码,让你轻松了解运动的原理
来源:互联网 发布:龙年瞎子皮肤淘宝多钱 编辑:程序博客网 时间:2024/05/16 10:41
等待已久的可变大,变宽 等一系列效果运动框架出炉了,现在还是个初级版本,能满足需求。我们看看是如何实现的。
我们知道在Javascript 中 ‘.’等同于 ‘[]’ 例如: oDiv.style.height=oDiv.style[‘height’]
那么,我们把要运动的属性作为一个参数,传入到之前函数中即可。
透明度呢,需要单独处理,判断下即可。
直接上代码。
<style type="text/css"> div { width: 200px; height: 200px; margin: 20px; float: left; background: yellow; border: 1px solid #CCCCFF; filter: alpha(opacity=30); opacity: 0.3; } </style>
<body> <div id="div1"></div> </body>
以下是Javascript代码:
<script type="text/javascript"> window.onload = function() { var oDiv1 = document.getElementById("div1"); oDiv1.onmouseover = function() { startMove(this, 'opacity', 100); }; oDiv1.onmouseout = function() { startMove(this, 'opacity', 30); }; } function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } function startMove(obj, attr, iTarget) { clearInterval(obj.time); obj.time = setInterval(function() { var cur = 0; if (attr == 'opacity') { cur=parseFloat(getStyle(obj, attr)) * 100; } else { cur = parseInt(getStyle(obj, attr)); } var speed = (iTarget - cur) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (cur == iTarget) { clearInterval(this.time); } else { if (attr == 'opacity') { obj.style.filter = 'alpha(opacity=' + cur + speed + ')'; obj.style.opacity = (cur + speed) / 100; } else { obj.style[attr] = cur + speed + 'px'; } } }, 30); } </script>
结合之前的博文中的知识,相信里面的一些计算原理大家都了如指掌,无需多说了吧。不懂可以回顾下之前的文章。
那么 这个运动框架到目前为止就没问题了吗?
不要急 这个还是有问题的 在IE7 下就会出现bug 。。 怎么会事呢 。
其实Javascript 中的运算是有误差的,alert(0.07*100); // 7.000000000….1
那么我们的代码中 parseFloat(getStyle(obj, attr)) * 100这句就会有误差。
这个问题怎么解决呢??
其实很简单,用 Math.round() ; 改掉相应的代码
cur=parseFloat(getStyle(obj, attr)) * 100;
改成 cur = Math.round(parseFloat(getStyle(obj, attr)) * 100); 即可
原理就是把小数干掉,留下整数的部分就可以了。
0 0
- Javascript 可同时变大变宽等一系列效果运动框架——逐行分析代码,让你轻松了解运动的原理
- Javascript 链式运动框架——逐行分析代码,让你轻松了解运动的原理
- Javascript 完美运动框架——逐行分析代码,让你轻松了解运动的原理
- Javascript 完美运动框架——逐行分析代码,让你轻松了解运动的原理
- Javascript 缓冲运动——逐行分析代码,让你轻松了解缓冲运动的原理
- Javascript 多物体运动——逐行分析代码,让你轻松了解运动的原理
- Javascript 链式运动框架——逐行分析代码,让你轻松了运动的原理
- Javascript 匀速运动停止条件——逐行分析代码,让你轻松了解运动的原理
- Javascript 运动中Offset的bug——逐行分析代码,让你轻松了解运动的原理
- Javascript 拖拽雏形——逐行分析代码,让你轻松了解拖拽的原理
- Javascript 拖拽雏形中的一些问题——逐行分析代码,让你轻松了解拖拽的原理
- Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了拖拽的原理
- 一个div 缓冲运动—变宽
- 多个div 缓冲运动—变宽
- 《js动画效果》之同时运动兼完美运动框架
- 《js动画效果》之同时运动兼完美运动框架
- 我们对只能手机的10个误区
- MyEclipse使用教程:MyEclipse Libraries
- Eclipse快捷键大全,导包快捷键:ctrl+Shift+/
- 利用nginx的upstream做反向代理解决内网域名转发的问题
- jPA自动创建数据库表的一些配置
- Javascript 可同时变大变宽等一系列效果运动框架——逐行分析代码,让你轻松了解运动的原理
- PAT(MOOC-数据结构) 06-4. How long does it take (25)
- vc里面warning LNK4099: 未找到 PDB“sqlite3.pdb
- Android如何实现开机自启动Service
- xcode 上 version和build
- 鼠标指中图片切换 hover
- ADO、DAO、ODBC、OLE DB 区别
- 自己实现printf函数
- iOS block技巧妙用及工作原理