javascript - 无法清除其他函数中调用的 inverval

标签 javascript jquery web

我不明白为什么这个变量对函数来说是私有(private)的,即使我尝试从控制台清除间隔,它也找不到该变量,我一定是在做一些愚蠢的事情。请帮忙,代码如下:我将其缩减为相关部分。

function attack() {
  $("#container").append("<div id='attacker' style='position:absolute; width: 128px; bottom:125px'>       <img src='attacker.gif' ></div>");
  $("#attacker").css("left", $( window ).width());
  attackerCheck = setInterval( function() { moveNclear("#attacker", "attackerCheck"); }, 33 );
}

function moveNclear(objectName, intervalname) {
  objectP = $(objectName).position();
  $(objectName).css("left", (objectP.left - 10) + "px");
  if(objectP.left < 0) {
    console.log("done");
    clearInterval(intervalname);
  }
}

最佳答案

您可以通过从 moveNclear() 进行适当的返回并在调用函数中测试它来避免传递间隔引用。

此外,$("#attacker")(很多次)效率非常低……而且是可以避免的。

最后,不要忘记使用 var 本地化变量。不要使用全局变量。

尝试:

function attack() {
    var $attacker = $("<div id='attacker' style='position:absolute; width:128px; bottom:125px'>       <img src='attacker.gif' /></div>").appendTo("#container").css('left', $(window).width());
    var attackerCheck = setInterval(function() {
        if(moveNclear($attacker)) {
            clearInterval(attackerCheck);
            console.log("done");
        }
    }, 33);
}

function moveNclear($el) {
    var pos = $el.position();
    pos.left -= 10;
    $el.css("left", pos.left + 'px');
    return (pos.left <= 0);//true:animation complete; false:animation in progress
}

关于javascript - 无法清除其他函数中调用的 inverval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612994/

相关文章:

javascript - 使用 node.js 从 Spring Boot 2 响应中读取传入的 HTTPS header

JavaScript : Printing Dynamic value/data

jquery - 视频流显示在 Microsoft Edge 中不起作用

jquery - 无法显示更新的图像

javascript - 无法使用canvg将svg转换为png

java - 如何将 HTML 文件显示为网页?

css - 谷歌页面加速模块 combine_css

javascript - 如何将 Firebase 与 Ionic 集成?

Android CSS 问题 : fantom white overlay (zoomable and touchable) in every browser very strange

javascript - 从 rhino 中的 orientDB 选择