Обнаружение jQuery .stop () - PullRequest
       17

Обнаружение jQuery .stop ()

1 голос
/ 03 декабря 2010

Я создаю плагин jQuery, который добавляет некоторые пользовательские анимации к элементу, и я хочу определить, когда для этого элемента вызывается метод .stop (). Вот пример:

(function( $ ){
    $.fn.myAnimation = function() {
        var myInterval = setInterval(function() {
            // Do animation stuff
            if (.stop() == true) {
                clearInterval(myInterval);
            {
        });
    });
});

$(".element").myAnimation();
$(".element").stop();

Итак, мой вопрос, как мне это сделать:

if (.stop() == true)

Или есть способ сделать это с помощью обработчика событий, например так:

this.bind("stop", function() {});

Или я поступаю совершенно неправильно?

Большое спасибо
Стивен

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

Полагаю, вы хотите проверить, является ли элемент анимированным. Если это так, вы можете использовать jQuery's :animated селектор .

if( this.is(':animated') ) {...

Если вы хотите отменить интервал, вам может понадобиться встроить его в API в качестве пользовательского метода, который пользователь вызывает для остановки анимации, и вызывают clearInterval.

0 голосов
/ 24 января 2016

два возможных решения для этого:

А) создать флаг (2 способа сделать это)
Б) создать пользовательское событие

A-создать флаг
1-вы можете использовать .attr(), чтобы добавить флаг

$('.element').stop().attr('stopped','')
//to check use :
if($('.element').is('[stopped]'))

2 - если вы не хотите задействовать какой-либо атрибут или изменяющуюся структуру DOM
Вы можете прикрепить молчаливый флаг.
используя .data() для хранения произвольных данных:

$(".element").stop().data('stopped',true);

затем извлеките его для проверки

if($(".element").data('stopped')) /** (1) **/

что касается плагина (как вы упомянули здесь )
да, мы можем создать один из них:

// Stop() with a capital S, don't have to remind you jQuery is case sensitive
$.fn.Stop = function() {
  this.stop().data('stopped', true)
  return this
} // check the same way as i mentioned in (1)

B-создать пользовательское событие
если вы не хотите флаг какого-либо типа или чего-либо еще
Вы можете создать пользовательское событие, так как «стоп» не один
Документация по созданию пользовательских событий

$('*').on('stop', function() {
  $(this).stop()
  //any other Statements you want
  //in this case you may need to change the selector
  //to match only '.element'
})

событие затем запускается с помощью .trigger():

$('.element').trigger('stop')
0 голосов
/ 03 декабря 2010

Пока я не найду способ добавить селектор jQuery : анимированный , я придумал следующую работу:

(function( $ ){
    $.fn.myAnimation = function() {
        this.addClass("isanimated");
        var myInterval = setInterval(function() {
            // do animation
            if (this.hasClass("isanimated") == false) {
                clearInterval(myInterval);
            }
        }, 1000);
    });
});

$(".element").myAnimation();
$(".element").removeClass("isanimated");

Код выше не проверен.

Если кто-нибудь может предложить способы добавления селектора : анимированный , я был бы очень признателен.

...