Функция не определена в 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);
});
Кажется, это довольно легко, но в любом случае это возвращает: cloudScroll не определен.
Зачем?
4 ответа
Попробуйте передать функцию напрямую, используя строку, которая устарела:
var init = setInterval(cloudScroll, 270);
setInterval выполняется в глобальном пространстве имен, но ваша функция облачной прокрутки определена в анонимной функции document.ready.
Это должно решить вашу проблему, а также лучше передавать ссылки на функции в setInterval, а не на строки (которые в конечном итоге выявляются, что ухудшает производительность):
setInterval(function (){ cloudsScroll() }, 270);
Вы также можете поместить определение cloudScroll в функцию интервала.
Попробуйте это:
var init = setInterval(cloudScroll, 270);
... и если вы хотите передать аргументы:
setInterval(scrollCloud, 250, clouds2);
EDIT Партрик упомянул, что IE не поддерживает передачу аргументов описанным выше способом. Удивлен, я не сделал этого сейчас. В любом случае, это делает использование mqsoh анонимной функции релевантным. Потому что вы можете запустить данную функцию с такими аргументами:
setInterval(function(){
scrollCloud(clouds2);
}, 250);
Если вы передадите ссылку на функцию, а не на строку, она будет работать:
var init = setInterval(cloudScroll, 270);
Просто чтобы показать, как это работает: http://jsfiddle.net/jonathon/T45Nx/