No puedo entender por qué esta variable se está volviendo privada para la función, incluso si intento borrar el intervalo de la consola, no puedo encontrar la variable, debo estar haciendo algo estúpido. ayuda por favor, el código está abajo: lo corto a las partes relevantes.

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);
  }
}
0
dprogramz 2 sep. 2014 a las 01:15

2 respuestas

La mejor respuesta

Puede evitar tener que pasar la referencia de intervalo haciendo un retorno adecuado desde moveNclear() y volviéndolo a probar en la función de llamada.

Además, $("#attacker") (muchas veces) es terriblemente ineficiente ... y evitable.

Finalmente, no olvide localizar sus variables con var. No uses globals.

Tratar:

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
}
2
Roamer-1888 1 sep. 2014 a las 21:59
var attackerCheck = null;
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"); }, 33 );

}

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

}
0
Javier 1 sep. 2014 a las 21:23