Моделирование jQuery / JS

#javascript #jquery

#javascript #jquery

Вопрос:

Я не эксперт в jQuery или Javascript (я только начал с ним недавно), поэтому это может показаться глупым вопросом: у меня есть 4 вкладки, все из которых доступны для просмотра. Итак, я создал 2 функции, 1 для фактического выполнения по щелчку и одну только для «имитации» щелчка, чтобы я мог менять вкладки каждые 5 секунд. Что я сделал, так это установил для переменной bool «click» значение false, для которого устанавливается значение «true», если выполняется фактическая функция щелчка, поэтому автоматическое переключение вкладок прекращается. И ниже обеих этих функций я добавил цикл while, подобный этому:

 var nr = 0;
while(!klik){
    tabss.eq(st % 4).click().delay(5000); //this is the "simulation"
    st  ;
}
  

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

Комментарии:

1. Должно st быть nr вместо этого? Кроме того, этот цикл while приведет к снижению производительности: вы задерживаете функцию щелчка на 5 секунд, но ваш вызов click() выполняется так быстро, как позволяет ваш процессор.

2. Если вы используете вкладки пользовательского интерфейса jQuery, есть встроенное действие поворота, которое очень легко настроить.

Ответ №1:

.delay используется только с анимацией jQuery. Что вам нужно использовать, так это setTimeout или setInterval :

 var timer = setInterval(function() {
    if (!klik) {
        clearInterval(timer);
    } else {
        st %= 4;
        clickontab($tabs.eq(st  ));
    }
}, 5000); // milliseconds

$('div.tab').click(function(e) {
    e.preventDefault();
    klik = false;
    clickontab(this);
});

function clickontab(tab) {
    // code to bring a particular tab to the front
}
  

http://jsfiddle.net/mblase75/CDNXv/2/

Комментарии:

1. Я просто набирал почти идентичный ответ :-(. Я хотел бы добавить, что у Бена Алмана есть свой плагин jQuery doTimeout ( benalman.com/projects/jquery-dotimeout-plugin ), который может предложить больше возможностей и еще много чего.

2. Отлично, это работает с вращением, но оно не остановится. Когда я нажимаю вкладку, она все равно будет вращаться вперед. Но не беспокойтесь, возможно, что-то с моей стороны связано с установкой переменной ‘klik’

3. @GregaMenih В моем оригинальном jsfiddle setInterval запускает тот же обработчик кликов, который запускается при нажатии пользователем. Я обновил свой ответ модифицированным решением, чтобы учесть это.

Ответ №2:

я предлагаю этот метод :

 var i = 0;

setInterval(openTab,4000);

function openTab(){
   if(i>4) i=0;
   tabss.eq(i).click();
   i  ;

}