博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片淡入淡出
阅读量:5151 次
发布时间:2019-06-13

本文共 1469 字,大约阅读时间需要 4 分钟。

1 window.onload = function(){ 2     var oImg = document.getElementById("img1"); 3     oImg.onmouseover = function(){ 4         startMove(100); 5         } 6     oImg.onmouseout = function(){ 7         startMove(30); 8         } 9     10     }11     var timer = null;12     var alpha = 30;13 function startMove(iTarget){
15 var oImg = document.getElementById("img1");16 clearInterval(timer);17 timer = setInterval(function(){18 var iSpeed = 0;19 if(alpha < iTarget){20 iSpeed = 10;21 }else{iSpeed = -10;}22 23 if(alpha == iTarget){24 clearInterval(timer);25 }else{26 alpha += iSpeed;27 oImg.style.filter = 'alpha(opacity:'+alpha+')';28 oImg.style.opacity = alpha/100;29 }30 },30)31 32 }

 

发现一个问题:

  当把

var timer = null;var alpha = 30; 这两行放在 function startMove中的时候,运行程序时,会发生一闪一闪的情况,主要是opacity变成100后,鼠标移开,opacity 不能回到原来设定的 30 ,原因还在进一步查找中 当需要元素进行缓冲的时候,即需要元素离终点越近,速度越慢的时候,只需要将速度改为以下即可:
1  var iSpeed = (iTarget - offsetLeft) / 8;

 当然这样的时候有可能最后的位置不是终点设置的位置,原因是iSpeed,iTarget 到最后会变成小数

既然是小数的问题,那就对小数进行改进,改进的方法如下:

1 iSpeed = Math.ceil(iSpeed)

这样就可以到目标终点(从左往右运动)

但是当从右往左的时候,又会出现这样的问题 ,是负数引起的问题(-0.5向上取整是0),因此要向下取整:

1 iSpeed = Math.floor(iSpeed)

整理如下:

1 iSpeed = iSpeed >0 ?Math.ceil(iSpeed):Math.floor(iSpeed);

 

 
posted on
2016-11-24 11:14 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/2390624885a/p/5999368.html

你可能感兴趣的文章