在javascript中停止事件的功能

时间:2011-03-01 04:42:17

标签: javascript timer

我想在一个页面上包含三个图片库。一个正在运行两个暂停。
如果正在运行的画廊停止并且所单击的画廊正在运行。

如何使“return(function()..”停止?

欢呼声 伴侣

var delay = 2500;
var start_frame = 0;
var container = "willkommen";

function fokus(container) {0.5
    new Effect.Appear('willkommen', { duration:, to: 0.3 });
    new Effect.Appear('eintreten', { duration:0.5, to: 0.3 });
    new Effect.Appear('reservieren', { duration:0.5, to: 0.3 });

    new Effect.Appear( container, { duration:1, to: 1 });

    var lis = $(container).getElementsByTagName('li');
    for( i=0; i < lis.length; i++){
        if(i!=0){
            lis[i].style.display = 'none';
        }
    }
    end_frame = lis.length -1;
    setTimeout(fadeInOut(container, start_frame, start_frame,end_frame, delay, lis), delay);
}


function fadeInOut(container, frame, start_frame, end_frame, delay, lis) {
        return (function() {
        lis = $(container).getElementsByTagName('li');
        Effect.Fade(lis[frame]);
        if (frame == end_frame) { frame = start_frame; } else { frame++; }
        lisAppear = lis[frame];
        setTimeout("Effect.Appear(lisAppear);", { duration:0.5, from:0.5, to:1 } );
        setTimeout(fadeInOut(container, frame, start_frame, end_frame, delay), delay + 3500);
    })  
}

1 个答案:

答案 0 :(得分:0)

您需要存储从setTimeout返回的超时ID,并将其传递到clearTimeout函数。

我不确定你是如何调用fokus函数的,但如果你想让它在一个页面上的多个位置封装逻辑,你应该将它用作constructor function

function Fokus (container) {
  ...
  this.timeout_id = setTimeout(fadeInOut(container, start_frame, start_frame,end_frame, delay, lis), delay);
  this.cancel = function () {
    clearTimeout(this.timeout_id);
  }
}

var gallery = new fokus("willkommen");
gallery.cancel();

您的代码没有提供很多上下文,但看起来您正在使用全局变量;我敦促你研究anonymous, self-executing closures以防止全局命名空间污染。