2013-04-14 6 views
1

Я создаю скроллер изображений, который автоматически продвигает изображение каждые несколько секунд (10 секунд для отладки) или когда пользователь щелкает изображение. Мой код (показано ниже) работает, хотя я хотел бы «сбросить» счетчик 10 секунд, если будет сделано ручное (щелчок) продвижение изображения. Как я могу это сделать? Кажется, мне не повезло с clearInterval.clearInterval(); не работает

... 
setInterval('gallery()',10000); 
$("#gallery").click(function() { 
clearInverval();// <--- not working 
gallery(); 
}); 
… 

Я вижу, другие определения переменной как (в моем случае) setInterval('gallery()',10000);, но я не мог получить, чтобы работать либо =/

PS Я ограничил знание языков, кроме C

ответ

4

метод setInterval возвращает дескриптор интервала, который вы используете, чтобы остановить его:

var handle = window.setInterval(gallery,10000); 
$("#gallery").click(function() { 
    window.clearInterval(handle); 
    gallery(); 
}); 
+0

Это предотвращено мой обработчик щелчка, чтобы перестать работать полностью =/ – 2013-04-14 02:44:03

+0

@XAleXOwnZX : Я просто заметил орфографическую ошибку в имени метода 'clearInterval'. Я исправил его в коде выше. – Guffa

+0

haha ​​сложно найти этот материал несколько раз: P – 2013-04-14 02:57:28

1

вы должны установить setInterval в качестве переменной для это работать ..

var interval = setInterval(gallery, 10000); 
$('#gallery').click(function() { 
    clearInterval(interval); 
}); 
+0

Это сломало мой обработчик клика целиком = / – 2013-04-14 02:51:01

3

Может быть, вы можете сделать что-то вроде этого:

var handle = setInterval(gallery,10000); 
$("#gallery").click(function() { 
    clearInterval(handle); 

    /* 
    * your #gallery.click event-handler code here 
    */ 

    //finally, set automatic scrolling again 
    handle = setInterval(gallery,10000); 
}); 
0

Я изо всех сил, чтобы сделать простую паузу/продолжить обработчик при выполнении кодирования на основе прототипа и не хотел использовать какие-либо внешний плагин из-за этого.

Код ниже довольно понятен и, мы надеемся, сохранит время других кодеров.

Нефункциональный пример:

/** THIS DID NOT WORK 
    function Agent(name) 
    { 
     this.name = name; 
     this.intervalID = undefined; // THIS DID NOT WORK!!! 
    } // constructor 

    Agent.prototype.start = function(speed) 
    { 
     var self = this; 
     this.intervalID = setInterval(function(){ self.act(); }, speed); 
    }; // start 

    Agent.prototype.pause = function() 
    { 
     clearInterval(this.intervalID); 
     console.log("pause"); 
    }; // pause 
    **/ 

Вместо этого вы должны сделать это следующим образом:

var intervalID = undefined; 
function Agent(name) 
{ 
    this.name = name; 
} // constructor 

Agent.prototype.start = function(speed) 
{ 
    var self = this; 
    intervalID = setInterval(function(){ self.act(); }, speed); 
}; // start 

Agent.prototype.pause = function() 
{ 
    clearInterval(intervalID); 
    console.log("pause"); 
}; // pause 
Смежные вопросы