У меня есть две функции, чтобы четко объяснить, что я имею в виду.Автоматические циклы функций JavaScript
Функция 1
В этой функции, если вы наведите указатель мыши на квадрат, он начнет переход для переключения класса. Однако, если вы перемещаете мышь с элемента, а затем снова включаете, пока функция все еще идет, она будет ждать завершения функции, тогда она автоматически повторит функцию. Пока это повторение происходит, объект не является неразрешимым. Например, пока он повторяется, если вы наводите на него курсор, он не останется в стороне, он будет ждать, пока функция не закончится, а затем повторите еще раз, потому что вы зависали над ним. Затем он позволит вам навешивать элемент и взаимодействовать с ним.
$(function() {
$('square').hover(function() {
$(this).addClass("makebig", 1000, "easeInBack");
}, function(){
$(this).removeClass("makebig", 1000, "easeInBack");
});
});
Функция 2
В этой функции при нажатии на площади начнет переход либо добавления или удаления класса, однако, если вы должны были нажать на площади перед переходом закончился, то функция будет ждать завершения перехода, тогда он автоматически начнет снова переключать класс. Если вы нажмете на него пять раз подряд, то он будет переключать класс 5 раз подряд один за другим.
$("square").click(function() {
$(this).toggleClass("big-blue", 1000, "easeOutSine");
});
Вопрос
Есть ли способ, чтобы сделать эти функции прерываемой?
Так что для Function 1
, если бы вы перестали нависнуть над элементом на полпути через переход, он начнет автоматически удалять класс, или если вы должны нависнуть над ним, в то время как переход для удаления класса продолжался, тогда он начните добавлять класс еще до завершения удаления класса. И для Function 2
, если бы вы нажмете элемент на полпути через переход к переключению класса, тогда он начнет снова переключать класс, а не заканчивать исходный переход.
Редактировать
Как уже упоминалось в комментариях ниже А. Вольфа есть jQuery
функция называется stop
однако, как вы можете видеть в этой одной из JSFiddle это не очень эффективно, как stop(true)
не работает и stop(true, true)
/stop(true, true, false)
практически работать, однако они оба подпрыгивают до конца анимации, и они оба смуты.
Любой способ это исправить или улучшить эффективность stop()
будет оценена
Вы должны попробовать [стоп (правда)] (https://api.jquery.com/stop/) –
@ A.Wolff Это действительно выглядит идеально, но местонахождение я бы поставил функцию 'stop()'? – Dan
В коде после каждого '$ (this)': '$ (this) .stop (true) .addClass (...);' '$ (this) .stop (true) .removeClass (...); '' $ (this) .stop (true) .toggleClass (...); '. Или вы можете попробовать '$ ('square'). On ('click mouseenter mouseleave', function() {$ (this) .stop (true);});' EDIT: я просто вижу анимацию с щелчком при запуске события mouseleave. Я не уверен, каково ваше ожидаемое поведение в этом случае. Остановитесь только анимацию мыши или обоих, мышь и щелкните мышью! –