12

我正在尝试让 div 的 left 属性自行更改 - 当您将鼠标悬停时每秒更改一次,所以我做了这个:

$("div.scroll_left").hover(function(){
    var left_num = $('div.license_video').css("left")
    var left_num1 = parseInt(left_num, 10) - 1;
    var timerID = setInterval(alert(left_num1), 1000);
    //var timerID = setInterval(slideleft(left_num1), 1000);
},function(){
    clearInterval(timerID);
});
//function slideleft(left_num){
    //$('.license_video').css('left', left_num + "%");
//}

从理论上讲,您会认为它会重复,直到您将光标移开以清除间隔。当我将鼠标悬停在它上面时,它会执行一次并且永远不会重复(没有错误)。然后,当我将鼠标悬停时,它会给出错误“未捕获的 ReferenceError:timerID 未定义”

4

4 回答 4

19

setInterval根本不工作。您没有将函数作为第一个参数传递给它。

您正在alert 立即调用并尝试使用它的返回值作为重复的函数。

var timerID = setInterval(function () { alert(left_num1) }, 1000);
于 2012-04-06T19:57:34.837 回答
17

所以你在这里有两个不同的问题:

// (1) timerID needs to be defined in a scope accessible to both hover callbacks
var timerID = null;

$("div.scroll_left").hover(function(){
    var left_num = $('div.license_video').css("left")
    var left_num1 = parseInt(left_num, 10) - 1;

    // (2) Pass a *function* to setInterval
    timerID = setInterval(function () {
        alert(left_num1)
    }, 1000);
}, function(){
    clearInterval(timerID);
    timerID = null;
});

当你写

setInterval(alert(left_num1), 1000);
// or
setInterval(slideleft(left_num1), 1000);

您正在将调用alert()slideleft()(分别)返回的值传递给setInterval. 您没有传递函数本身。

于 2012-04-06T19:57:42.793 回答
7

您正在分配null要调用的功能。为什么?因为您调用alert并将其返回值分配给 setInterval 参数。

相反,使用匿名函数:

setInterval(function() {doStuff();},1000);
于 2012-04-06T19:58:32.957 回答
0

非常简单;-) ...我喜欢 jquery,无论是哪个版本...你需要纯 JavaScript 发送 pm 我可以提供帮助。

umavez = 0;
setInterval(function() {
	if (umavez == 0) {
      for (x=0;x<10;x++) { 
        $('div.test').append('<div>'+x+'</div>');
      }
    }
  umavez = 1;
}, 500);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="test">Linha:</div>

于 2015-10-23T17:27:14.660 回答