Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象引用调用setinterval_Javascript_Object_Reference_Mootools_Setinterval - Fatal编程技术网

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); 
});