函数未在setInterval中定义

Dri*_*k86 7 jquery setinterval

你好,我有这样的事情:

$(document).ready(function(){

 $("#all").height($(window).height()-60);

$('a').bind({
  mouseover:function(){
   $(this).stop().animate({opacity:0.8},500);
 },
 mouseout:function(){
   $(this).stop().animate({opacity:1},500);
 },
   click:function(){
 }
});


// CLOUDS SCROLL 

 function cloudScroll(){
     var current=parseFloat($('#clouds').css('left'));
     current += 1;
     $('#clouds').css("left",current);
 }

var init = setInterval('cloudScroll()', 270);

});
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但无论如何它返回:cloudScroll没有定义.
为什么?

Kob*_*obi 23

尝试直接传递函数,使用字符串是相当过时的:

var init = setInterval(cloudScroll, 270);
Run Code Online (Sandbox Code Playgroud)


mqs*_*soh 9

setInterval在全局命名空间中执行,但您的云滚动功能在匿名document.ready函数中定义.

它应该解决你的问题,并且将函数引用传递给setInterval而不是字符串(最终会被唤醒,这对性能更糟)也是更好的形式:

setInterval(function (){ cloudsScroll() }, 270);
Run Code Online (Sandbox Code Playgroud)

您还可以将cloudScroll定义放在区间函数中.