2015-06-28 2 views
0

У меня есть элемент, который я хочу «щелкнуть» каждые 5 секунд, делает что-то, а затем через 5 секунд его снова нажимают, что-то делает, ect '.Запускать событие jQuery .click на элементе каждые 5 секунд повторно

Так что я использовал SetTimeout, который делает работу за 5 секунд вещи: (нашел пример здесь: How to hide a div after some time period?)

И есть событие .trigger JQuery, который я нашел здесь: JQuery automatic click after 4 sec

I попробовал цикл с использованием «для», и я получил событие .click, которое происходит после первых 5 секунд, а затем снова и снова использует событие .click без паузы в 5 секунд: http://jsfiddle.net/WTJgt/417/

В общем, я построил свой первый jQuery rotator :)!

с правой и левой кнопками - и я хочу, чтобы он сдвигал слайд через х секунд, щелкнув его «без щелчка».

Это мой .click код события для "следующей" кнопки элемента:

// variables  
var rotCounter = 0; 
var moveInPixles = 0; 
var nunSlides = 4; // Enter the number of slides 

$(".r-arrow").click(function(){ 

    moveInPixles = (rotCounter + 1) * 746 * -1; 
    moveInPixles += 'px'; 

    $(".rotator-container").css('margin-left', moveInPixles); 

    rotCounter++; 

    $(".dot").css('background-color', 'white'); 
    $(".dot:eq("+rotCounter+")").css('background-color', 'yellow'); 

    if (rotCounter == nunSlides) { 
     rotCounter = 0; 
     $(".rotator-container").css('margin-left', 0); 
     $(".dot").css('background-color', 'white'); 
     $(".dot:eq("+rotCounter+")").css('background-color', 'yellow'); 
    } 

}); 

ответ

1
setInterval(function() { 
    $(".r-arrow").click(); 
}, 5000); 

Edit:

Использование setInterval и clearInterval, так что вы можете сбросить интервал на нажмите кнопку. Ваш код нуждается в рефакторинге, потому что вы не можете его использовать, как есть.

var intervalId; 
var rotCounter = 0; 
var moveInPixles = 0; 
var nunSlides = 4; // Enter the number of slides 

autoRotate(); 

function autoRotate() { 

    intervalId = window.setInterval(function() { 
     rotateStuff(); 
    }, 5000); 
} 

function rotateStuff() { 

    moveInPixles = (rotCounter + 1) * 746 * -1; 
    moveInPixles += 'px'; 

    $(".rotator-container").css('margin-left', moveInPixles); 

    rotCounter++; 

    $(".dot").css('background-color', 'white'); 
    $(".dot:eq(" + rotCounter + ")").css('background-color', 'yellow'); 

    if (rotCounter == nunSlides) { 
     rotCounter = 0; 
     $(".rotator-container").css('margin-left', 0); 
     $(".dot").css('background-color', 'white'); 
     $(".dot:eq(" + rotCounter + ")").css('background-color', 'yellow'); 
    } 
} 

$('.r-arrow').on('click', function() { 

    window.clearInterval(intervalId); 
    rotateStuff(); 
    autoRotate(); 
}); 
+0

. Это одно работает - проблема только в том, что если я нажму справа стрелка от выбора, и она занимает у меня 4 секунды, на пятой секунде она слайд слайд сразу (и случайно слайд 2 вместо одного). любая идея, как это исправить? –

+0

См. Мое редактирование выше. – MrUpsidown

+0

слайдов слайд каждые 5 секунд работает, но кнопки перестали отвечать при нажатии на них. –

0

Использование setInterval функция вместо setimeout

 $(function() { 
    $('#login').click(function() { 
     alert('login button clicked'); 
    }); 
     setInterval(function() { 
      $('#login').trigger('click'); 
     }, 500); 

}); 

проверка обновляется JSFIDDLE

2

не делают щелчок, но просто запускайте функцию javascript каждые пять секунд. путем запуска щелчка вы также активируете все другие функции, которые прослушивают событие, а некоторые могут противоречить вашему коду или использоваться другими библиотеками.

Для этого вы можете использовать setInterval().

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

// variables  
var rotCounter = 0; 
var moveInPixles = 0; 
var nunSlides = 4; // Enter the number of slides 

var myFunction = function(){ 

    moveInPixles = (rotCounter + 1) * 746 * -1; 
    moveInPixles += 'px'; 

    $(".rotator-container").css('margin-left', moveInPixles); 

    rotCounter++; 

    $(".dot").css('background-color', 'white'); 
    $(".dot:eq("+rotCounter+")").css('background-color', 'yellow'); 

    if (rotCounter == nunSlides) { 
     rotCounter = 0; 
     $(".rotator-container").css('margin-left', 0); 
     $(".dot").css('background-color', 'white'); 
     $(".dot:eq("+rotCounter+")").css('background-color', 'yellow'); 
    } 

}); 

$(".r-arrow").click(myFunction); 

setInterval(myFunction, 5000); 

Важно назначить setInterval переменной, то вы будете в состоянии остановить его с помощью clearInterval()

var intervalID = window.setInterval(code, delay); 

Тогда, когда вам нужно остановить это:

window.clearInterval(intervalID) 
+0

Я вообще не останавливаю слайд .. так что, я думаю, мне не нужен 'intervalID'. Я изменил свой код на тот, который вы написали, и он не работает. что может быть проблемой? : S –

+0

Я сделал [JSFiddle] (http://jsfiddle.net/WTJgt/419/), и он работает так, чтобы синтаксис выглядел хорошо. Наверное, вы забыли закрыть заявление или что-то еще. – sebastienbarbier

+0

И вы можете использовать 'cleanInterval()', чтобы остановить текущий, когда вы нажмете на выбор, а затем перезапустите его на 5 секунд, чтобы не получить эффект щелчка 4s, который вы принимаете;) – sebastienbarbier

0

Я не совсем понимаю вопрос, но если вы хотите вызывать функцию каждые 5 секунд, а не только один раз, используйте setInterval().

1

будет делать трюк

var rightArrowIntervalId = setInterval(function(){ 
    $(".r-arrow").trigger('click'); 
}, 5000); 

В вашем click случае добавить в

$(".r-arrow").click(function(){ 
    window.clearInterval(rightArrowIntervalId); 
    // will destroy existing interval 

    moveInPixles = (rotCounter + 1) * 746 * -1; 
    ..... 

    // will create new interval in 5 seconds 
    rightArrowIntervalId = setInterval(function(){ 
     $(".r-arrow").trigger('click'); 
    }, 5000); 
}); 
+0

Эта работа - единственная проблема заключается в том, что если я нажму на стрелку вправо по выбору, и мне потребуется 4 секунды, на пятой секунде она сразу сдвигает слайд (и случайно сдвигает 2 вместо одного). любая идея, как это исправить? –

+0

Попробуйте этот новый способ. Если я понял, что вы хотите, вы можете щелкнуть по стрелке, но не хотите, чтобы 2 интервала, всего 1, а затем e после 5 секунд с помощью щелчка – Nermin

Смежные вопросы