Javascript 使用对象引用调用setinterval
我有一个横幅旋转器,我想使用对象而不是函数,这样我可以使代码更高效。不管怎样,我似乎不能去上班。我想这和对象引用有关。有人能解释一下吗?以下是到目前为止我得到的信息:Javascript 使用对象引用调用setinterval,javascript,object,reference,mootools,setinterval,Javascript,Object,Reference,Mootools,Setinterval,我有一个横幅旋转器,我想使用对象而不是函数,这样我可以使代码更高效。不管怎样,我似乎不能去上班。我想这和对象引用有关。有人能解释一下吗?以下是到目前为止我得到的信息: window.addEvent('domready', function() { function set_banner(divid, array) { var banner = $(divid); banner.set('html', '<a href=""><img src="" alt=""
window.addEvent('domready', function() {
function set_banner(divid, array)
{
var banner = $(divid);
banner.set('html', '<a href=""><img src="" alt=""/></a>');
var banner_link = $(divid).getElement('a');
var banner_image = $(divid).getElement('img');
var delay = 0;
for (var keys in banner1array) {
var callback = (function(key) { return function() {
banner.setStyle('opacity', 0);
var object = array[key];
for (var property in object) {
if (property == 'href') {
var href = object[property];
}
if (property == 'src') {
var src = object[property];
}
}
if (!banner.getStyle('opacity')) {
banner.set('tween', {duration:1000});
banner_link.setProperty('href', href);
banner_image.setProperty('src', src);
banner.tween('opacity', 1);
}
}; })(keys);
setTimeout(callback, delay);
delay += 21000;
}
}
var banner1 = set_banner('banner1', banner1array);
setInterval(function() {set_banner('banner1', banner1array);}, 84000);
var banner2 = set_banner('banner2', banner2array);
setInterval(function() {set_banner('banner2', banner2array);}, 84000);
window.addEvent('domready',function(){
函数集\u横幅(divid,数组)
{
var banner=$(divid);
banner.set('html','');
var banner_link=$(divid).getElement('a');
var banner_image=$(divid).getElement('img');
var延迟=0;
for(Banner1数组中的变量键){
var callback=(函数(键){return function(){
banner.setStyle('opacity',0);
var对象=数组[键];
for(对象中的var属性){
如果(属性=='href'){
var href=对象[属性];
}
如果(属性='src'){
var src=对象[属性];
}
}
如果(!banner.getStyle('opacity')){
banner.set('tween',{duration:1000});
banner_link.setProperty('href',href);
banner_image.setProperty('src',src);
横幅。吐温('不透明',1);
}
})(钥匙);;
设置超时(回调、延迟);
延迟+=21000;
}
}
var banner1=设置横幅('banner1',banner1阵列);
setInterval(函数(){set_banner('banner1',banner1array);},84000);
var banner2=设置横幅('banner2',banner2数组);
setInterval(函数(){set_banner('banner2',banner2array);},84000);
})) 几个简单的错误:
var banner1 = new set_banner('banner1');
^ ---------- creates a new object and uses set_banner as the constructor
your code already gets called here
and you get a new object back, which in this case has NO use
....
setInterval(banner1(), 42000);
^----------------- The parenthesis EXECUTE the function
the RETURN VALUE is then passed to setInterval
BUT... banner1() is NOT a function, so this fails
如果您想在42秒后调用set_banner
并传递参数,您要做的是使用一个匿名函数,然后调用set_banner
setInterval(function() { // pass an anonymous function, this gets executed after 42 seconds...
set_banner('banner1'); // ...and then calls set_banner from within itself
}, 42000);
还有一些需要考虑的问题:。 (tl:dr而不是setInterval,使用setTimeout。)虽然我不确定他的论点是否适用于这里,但养成避免的习惯似乎是件好事
function defer_banner(div, bannerArray, delay) {
setTimeout(function() {
setBanner(div, bannerArray);
defer_banner(div, bannerArray, delay);
}, delay);
});