不知道为什么没有链式运动,只运动了第一部分,要鼠标移动第二下才显示

window.onload = function () {
    var donghua = document.getElementById('donghua');
    donghua.onmouseover = function () {
      startMove(donghua,{width: '400'},function () {
        startMove(donghua,{height:'20'})
      })
    }
  }
  function getStyle(obj, attr) {
    if (obj.currentStyle) {
      return obj.currentStyle[attr];
    }
    else {
      return getComputedStyle(obj, false)[attr];
    }
  }

  function startMove(obj, json, fn) {
    var flag = true;//假设标杆
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
      for (var attr in json) {
//    1.取当前的值
        var iCur = 0;
        if (attr == 'opacity') {
          iCur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
        } else {
          iCur = parseInt(getStyle(obj, attr));
        }

//    2.算速度
        var iSpeed = (json[attr] - iCur) / 8;
        iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);

//    3.检测停止
        if (iCur != json[attr]) {
          flag = false;
        }
        if (attr == 'opacity') {
          obj.style.filter = 'alpha(opacity:' + (iCur + iSpeed) + ')';
          obj.style.opacity = (iCur + iSpeed) / 100;
        }
        else {
          obj.style[attr] = iCur + iSpeed + "px";
        }
      }
      if (flag) {
        clearInterval(obj.timer);
        if (fn)
        {
          fn();
        }
      }
    }, 30)
  }
qq__3360
浏览 1237回答 1
1回答

萧雁翎

楼主,你好。问题可能是你的标杆没有放在定时器内导致的。19-22行代码可以调整顺序如下:    clearInterval(obj.timer);     obj.timer = setInterval(function () {       var flag = true;//假设标杆       for (var attr in json) {如果解决了您的问题,请采纳,谢谢!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript