Mouseenter продолжает работать из-за плагина Wiggle

Наверное, кому-то это легко. Я бы хотел, чтобы этот код плагина срабатывал, когда мышь проходит над элементом, покачивая элемент 3 или 4 раза (или как указано), затем останавливается.. однако он просто продолжает срабатывать

вот скрипка: http://jsfiddle.net/ZKVMk/7/

Я использую этот небольшой плагин для покачивания: http://labs.wondergroup.com/demos/mini-ui/index.html

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

идеи:

  • как-то переместить вызов функции покачивания за пределы mouseenter, чтобы он срабатывал только один раз?

  • использовать функцию обратного вызова плагина, чтобы сообщить mouseenter, что он должен остановиться?

  • как-то включить bind() или unbind()?

огромное спасибо!


person lyndonr    schedule 07.03.2012    source источник
comment
В Chrome ваша скрипка, кажется, работает правильно для меня, но FF и IE8 немного сходят с ума.   -  person Surreal Dreams    schedule 07.03.2012
comment
Это не событие, которое запускается. Это эффект плагина покачивания.   -  person Starx    schedule 07.03.2012


Ответы (2)


Проблема в том, что когда элемент перемещается, он повторно запускает событие MouseEnter в Firefox и IE, поэтому самый простой способ исправить это (конечно, ИМХО) — просто поместить переменную, которая может быть сброшена, что предотвращает метод покачивания. звонили несколько раз.

$(function() {
    var wiggled = false;

    $('#tata').mouseover(function() { 
        if(!wiggled) {
            $(this).wiggle({
                speed: 60,
                wiggles: 3,
                travel: 5,
            });
            //output
            var el = $('#output');
            var n = + el.text();
            el.text(++n);

            wiggled = true;
        }
    }).mouseout(function(e) {        
        wiggled = false;
    });
});

Обновление: я должен добавить, что мне удалось протестировать это только в FF, IE и Chrome могут вести себя по-разному, но я не ожидал, что они будут.

person Steve    schedule 07.03.2012
comment
это прекрасная вещь. прекрасно работает. проверено на сафари, а также. немного логики имеет большое значение. вот последняя скрипка jsfiddle.net/ZKVMk/17 - person lyndonr; 07.03.2012

попробуйте ввести и это

$('#tata').mouseout(function() {        
    $(this).stop();
});

Это остановит все анимации, позволяя завершить текущую анимацию.

person Henesnarfel    schedule 07.03.2012