2010-02-15 4 views
1

Вопрос был опубликован несколько раз и заключается в том, как задержать addClass.jquery addClass - wait, delay, speed, timeout или other

Я получил это:

$("#menu ul li").hover(function(){ 
    $(this).addClass("hover"); 
},function(){ 
    $(this).removeClass("hover"); 
}) 

И хочу что-то подобное, но когда класс добавляется после 500msek или около того. Лучший ответ до сих пор заключается в том, что он использует setimeout. Возможно, мне нужен только рабочий пример: How to wait 5 seconds with jQuery?

HooverIntent не будет работать, поскольку он должен быть addClass.

Br. Anders

ОБНОВЛЕНИЕ: Четыре замечательных ответа! Благодарю. Я не знаю, почему я не думал, что hoverIntent будет работать, его можно использовать, как видно из ответов. На самом деле все ответы могут использоваться каждый с плюсами и минусами. Я поеду с помощью hoverIntent, хотя должен быть включен другой плагин. Pro for the hoverIntent - это то, что может быть установлена ​​чувствительность, поэтому можно установить не только задержку для addClass, но она начнет отсчет сначала, когда мышь позиционируется, все еще перемещаясь по области (или не все так же, если чувствительность чувствительна)

+0

Почему бы не зависнуть? Похоже, он просто хочет, чтобы вы хотели сделать – PetersenDidIt

+0

В ответ на ваш предыдущий пост есть потрясающие ответы. Включая примеры того, как это сделать с помощью jQuery. Взгляните на пост Дуга Найнера. –

+0

Сообщение было найдено только во время поиска, и я действительно попытался включить setTimeout, как в примере. Я сначала сделал это сообщение после сдачи. Я не знаю, что такое «акула», когда дело доходит до javascript. Это становится лучше, хотя, slooowly ... – Tillebeck

ответ

2

Я не понимаю, почему hoverIntent не будет работать:

$("#menu ul li").hoverIntent({  
    sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)  
    interval: 200, // number = milliseconds for onMouseOver polling interval  
    timeout: 500, // number = milliseconds delay before onMouseOut  
    over:function(){ 
     $(this).addClass("hover"); 
    }, 
    out: function(){ 
     $(this).removeClass("hover"); 
    } 
}); 
+0

Вы правы. HoverIntent будет работать. Я использую его сейчас. Комбинация og-чувствительности и интервала является совершенной и делает более вероятным, что вы делаете только addClass, если хотите. – Tillebeck

4
$("#menu ul li").hover(function(){ 
    var $this = $(this); 
    var ovt = setTimeout(function(){$this.addClass('hover'); clearTimeout(ovt);}, 500); 
},function(){ 
    var $this = $(this); 
    var out = setTimeout(function(){$this.removeClass('hover'); clearTimeout(out);}, 500); 
}); 

Это то, что вы ищете?

+1

yep, точно. И это тоже сработает. Пойдет с hoverIntent, так как есть бонус чувствительности для движений мыши. Но спасибо за правильный ответ. – Tillebeck

+0

Я полностью согласен с вашим выбором для HoverIntent .. его гораздо более универсальный. – prodigitalson

1

Что-то вроде этого

$(function(){ 
    $("#menu ul li").hover(function(){ 
     var elem = $(this); 
     setTimeout (function(){ 
      elem.addClass("hover"); 
     }, 1000) ; 
     },function(){ 
     var elem = $(this); 
     setTimeout (function(){ 
      elem.removeClass("hover"); 
     }, 1000) ; 
    }) 
}); 
1

Оставляя SetTimeout и hoverintent в сторону (хотя они являются наиболее очевидными способами пойти), Не могли бы мы использовать для этого обратный вызов нулевой анимации?

$("#menu ul li").hover(function(){ 
    $(this).animate("",500,"",function(){$(this).addClass("hover")}; 
},function(){ 
    $(this).animate("",500,"",function(){$(this).removeClass("hover"); 
}) 
+0

Интересный способ решить проблему. Я не тестировал его, но думаю, что он должен работать. Я сохраню его как фрагмент кода, чтобы решить эту проблему в другой раз. Я прочитал, что в jQuery 1.4 будет функция задержки, которая должна иметь возможность заменить вашу функцию анимации – Tillebeck

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

  • Нет связанных вопросов^_^