夜雨&(* 2022-02-08 14:36 采纳率: 88.9%
浏览 76

我的回调函数怎么先触发了

不应该是定时器停了后,回调函数才触发吗?为什么我这里是先触发回调函数,然后定时器才停?

img

img


window.onload = function () {
        let div1 = document.querySelector("#div1");
        let btn1 = document.querySelector("#btn1");
        let btn2 = document.querySelector("#btn2");
function animation(obj, speed, style, target, callback) {
  if (parseInt(getComputedStyle(obj, null)[style]) >= target) {
    speed = -speed;
  }
  obj.name = setInterval(function () {
    let oldValue = parseInt(getComputedStyle(obj, null)[style]);
    let newValue = oldValue + speed;
    if ((newValue > target && speed > 0) || (newValue < target && speed < 0)) {
      newValue = target;
    }
    obj.style[style] = newValue + "px";
    if (newValue === target) {
      clearInterval(obj.name);
      callback();
    }
  }, 30);
}
        btn2.addEventListener("click", function () {
          animation(div1, 13, "left", 800, function () {
            alert("guolaile");
          });
        });
        btn1.addEventListener("click", function () {
          animation(div1, 15, "left", 0, function () {
            alert("huilaile");
          });
        });
      };
  • 写回答

3条回答 默认 最新

  • 归来巨星 前端领域新星创作者 2022-02-08 15:06
    关注

    简单地说 你最后一次执行计时器,这个计时器已经开始了,虽然你在执行的过程中停止了这个计时器,但是最后一次执行定时器不会立即终止不执行,依旧会向下执行走完

    评论

报告相同问题?

问题事件

  • 创建了问题 2月8日

悬赏问题

  • ¥20 ARKts悬浮窗和快捷方式问题
  • ¥15 comparecluster没有办法kegg
  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES