JS运动特效之同时运动实现方法分析
本文实例讲述了JS运动特效之运动实现方法。分享给大家供大家参考,具体如下
接着上一篇 《》继续折腾
上一篇中我们的运动框架,可以完美的实现让一个物体先变宽,在变高,在变透明度.....,看似很完美了!
貌似可以喝喝茶看看美女了。老板突然说,让你改变一个物体的宽高和透明度,心碎了一地!!!
拿过之前的运动框架发现,无法实现让div又变宽,又变高,有变透明度!!无能为力,只好有请JSON大神出场了,不认识json的小伙伴们就找度娘问一下吧!
function startMove(obj,attr,iTarget,fn)
之前的startMove()函数里都是传入一个attr属性,在传入一个iTarget目标值,我们有个JSON这个神器之后,我们可以把属性和目标值,一对对放在JSON里,然后再startMove里只传入json来代替之前的attr和iTarget,
比如我们想要改变宽,高,透明度,那么就把他们放入JSON : {width:300,height:300,opacity:30}
然后用for..in遍历这个json就可以得到相应的属性和值了,那么在运动框架程序中该怎么修改那??
先简单的测试说明一下json
<script> var json = {width:200,height:300,opacity:30}; for(attr in json){ alert("属性是" + attr+ "--目标值"+json[attr]); } </script>
有上面的弹出结果可以看出,json里的widht,height,opacity就是对应的属性名字,200,300,30对于的就是目标值,遍历这个json对象,可以看出attr就对应的是各个属性名,而json[attr]就对应各个目标值,看到这里应该就大概明白怎么修改了吧!
1. function startMove(obj,attr,iTarget,fn)
中attr,iTarget干掉,传入一个json对象
function startMove(obj,json,fn)
2.接着在定时器里遍历这个json看看都哪些属性需要变化
function startMove(obj,json,fn) {//fn执行下一个运动的函数 clearInterval(obj.timer); obj.timer = setInterval(function () { for(key in json){ //... 用key代替之前传入的属性,json[atrr]代替之前的目标值 // 也就是把之前startMove函数里的attr改写成key,iTarget改写成json[atrr] // 为了方便虽好把for in里的key的名字直接改写成attr就好了,for(attr in json)这样就不要一个个去改写startMove里的attr,省事 } },30); }
完整测试代码如下
HTML部分
<div id="div1"></div>
css部分
<style> #div1{ width: 200px;height: 200px; background: green; } </style>
js部分
<script> window.onload = function(){ var oDiv = document.getElementById('div1'); oDiv.onmouseover = function () { startMove(oDiv,{width:300,height:300,opacity:30}); } oDiv.onmouseout = function () { startMove(oDiv,{width:200,height:200,opacity:100}); } } function getStyle(obj,attr){ return getComputedStyle ? getComputedStyle(obj,false)[attr] : obj.currentStyle[attr]; } function startMove(obj,json,fn) {//json代替了原来的attr和iTarger参数 clearInterval(obj.timer); obj.timer = setInterval(function () { for(attr in json){ var objAttr = 0; if(attr == "opacity"){ // 由于for in里的key名字是attr所以这里不用替换 objAttr = Math.round(parseFloat(getStyle(obj,attr))100); }else{ objAttr = parseInt(getStyle(obj,attr)); } var iSpeed = (json[attr] -objAttr)/10;// 由之前的iTarget替换成了json[attr] iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed); if(objAttr == json[attr]){ clearInterval(obj.timer); if(fn){// 如果传了 “下一个运动的函数” 就执行 fn(); } }else{ if(attr == "opacity"){ obj.style.filter = 'alpha(opacity:'+(objAttr+iSpeed)+')'; obj.style.opacity = (objAttr+iSpeed)/100; }else{ obj.style[attr] = objAttr+iSpeed+'px'; } } } },30); } </script>
到这里我们的运动框架几乎接近完美了,还有一个小问题,什么问题那?下回继续
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程