-
获取样式查看全部
-
filter:alpha(opacity:30) opacity:0.3 这两个都是设置透明度,其中一个适合IE另一个适合非IE浏览器查看全部
-
多物体运动时可以给每一个物体加一个编号再添加定时器。查看全部
-
速度要记得取整!查看全部
-
改变透明度时是没有直接的属性,应该用一个变量来代替再赋值给那个透明度属性。查看全部
-
防止鼠标事件多次触发,采用onmouseenter代替onmouseover查看全部
-
在这里会出现两个BUG。我都完美的解决了。不要像别人说的那么繁琐。第一个肯定是不能执行回调涵数。只要把flag=true放到定时器下面。 第个就是当鼠标移动的时候会出现多次执行涵数,只要鼠标小小的动一下就会执行动画。只要把onmouseover 改成onmouseenter就可以了。这样两个BUG就都解决了查看全部
-
//最终封装的'完美移动框架' function startMove(obj,json,fn){ clearInterval(obj.timer); var flag;//标志所有运动是否到达目标值 obj.timer=setInterval(function(){ flag=true; //进入定时器时,现将flag设置为所有的属性都已达到目标值 for(var attr in json){ //取属性值 var curr=0; //判断是否为透明度 if(attr=='opacity'){ curr=Math.round(parseFloat(getStyle(obj,attr))*100); }else{ curr=parseInt(getStyle(obj,attr)); } //移动速度处理 var speed=0; speed=(json[attr]-curr)/10; speed=speed>0?Math.ceil(speed):Math.floor(speed); if(curr!=json[attr]){ flag=false; //假设有三个json的key/value值,这三个值中只要有一个没有达到目标值,flag就等于false. } if (attr=='opacity') { obj.style.filter='alpha(opacity:'+(curr+speed)+")"; obj.style.opacity=(curr+speed)/100; }else{ obj.style[attr]=curr+speed+'px'; } } if(flag){ clearInterval(obj.timer); if(fn){ fn(); } } },30); }查看全部
-
function startMove(obj,attr,iTarget,fn){clearInterval(obj.timer);obj.timer=setInterval(function(){var icur=0;if(attr=="opacity"){icur=Math.round(parseFloat(getStyle(obj,attr))*100)}else{icur=parseInt(getStyle(obj,attr))}var speed=(iTarget-icur)/8;speed=speed>0?Math.ceil(speed):Math.floor(speed);if(icur==iTarget){clearInterval(obj.timer);if(fn){fn()}}else{if(attr=="opacity"){obj.style.filter="alpha(opacity:"+(icur+speed)+")";obj.style.opacity=(icur+speed)/100}else{obj.style[attr]=icur+speed+"px"}}},30)}function getStyle(obj,attr){if(obj.currentStyle){return obj.currentStyle[attr]}else{return getComputedStyle(obj,false)[attr]}};查看全部
-
就是flag没有定义在定时器内。因为flag如果定义在定期器外,flag只执行了一遍,当循环了一次后,flag变成了false就不会再改变了。flag一直都是false,就无法关闭定时器和执行下一个函数了。 结论:flag要定义在定期器内(旗子要立好!查看全部
-
补充flag 3查看全部
-
补充flag 2查看全部
-
补充flag解决一个运动停止其他运动也跟着停止问题查看全部
-
多运动一起 3—1查看全部
-
多个运动一起 3查看全部
举报
0/150
提交
取消