2011-01-31 4 views
5

У меня есть функция, но она продолжает работать, даже если я звоню stop(). Название Функция function slide() { //codes here }Как остановить работу функции?

slide().stop(); 

Как остановить его запуск?
И как запустить его снова после его остановки?
Так что я буду иметь полный контроль над ним.

+1

'.slide' не является известным методом в jQuery Core или jQuery UI.Вы используете настраиваемый плагин, который реализует этот метод, или вы, возможно, ссылаетесь на '.slideUp' или' .slideDown'? – mekwall

+0

slide() - мое имя функции, у него много кодов внутри. – Ryan

+2

jQuery 'stop' работает только в jQuery анимации – sje397

ответ

9

.stop - это метод остановки анимации, выполняющейся асинхронно (в фоновом режиме) текущего элемента. Он не прерывает/останавливает любой другой код, который не использует библиотеку эффектов.

Вместо этого вы должны взглянуть на .queue, который позволяет настраивать пользовательские очереди, которые вы можете очистить или удалить из очереди.

Есть уже очень хорошие ответы на вопрос о том, как использовать .queue, поэтому я укажу вам на этот вопрос: Can somebody explain jQuery queue to me? - Посмотрите на ответ gnarf.

+0

Что делать? если он не остановлен()? – Ryan

1

Если ваша функция - длительный процесс javascript, вы должны положить в нее какие-то внешние крючки, чтобы остановить ее выполнение и продолжить, когда это необходимо. Если в нем есть цикл while, вы должны проверять внешнее условие, чтобы остановить его выполнение. Если у вас нет цикла в правильном смысле этого слова, вам придется найти другой способ проверки состояния функционирования функции.

Обычно невозможно прервать работу в Javascript. Не без какого-либо дополнительного кода.

Длительные функции будут прерываться браузерами, попросив пользователя, чтобы сценарий продолжал выполнение или, скорее, остановил его (браузер предполагает, что исполнение было повешено, как в бесконечном цикле).

Если у вас есть длительные функции в JavaScript, вы должны разделить fnctionality на несколько частей и использовать JavaScript продевал технику, которая задерживает выполнение коротких функций одного за другим с помощью window.setTimeout(function, delay);

4

Если она попадает определенное условие в вашей функции слайда просто используйте инструкцию return; для выхода из функции. Затем, чтобы запустить его снова, просто вспомните функцию slide(). Вы не можете использовать код из-за пределов функции, чтобы заставить его выйти, он должен находиться внутри функции.

2

была такая же проблема и после прочтения последнего ответа на amurra это то, что я сделал ...

Заявленный глобальную переменную, прикрепив ее к объекту «окна». Это будет действовать как флаг и решить, следует ли продолжать называть 'slide_it() функции или остановить его (возвращение)

window.slide_it = true; 

$(element).on({ 

    mouseenter: 
     function() { 
      window.slide_it = true; 
      slide_it(); 
     } 

    mouseleave: 
     function() { 
      window.slide_it = false; 
     } 

}); 

function slide_it() { 

    if(!window.slide_it) 
     return false; 

    $(element).stop().animate( 
     { 
      'left':'-=5px' 
     }, 
     100, 
     function() { slide_it() } 
    ); 

} 

функция После ввода курсор на $ (элемент) в slide_it() будет итерации. И он остановится, только если для параметра window.slide_it установлено значение false. Таким образом, вы просто устанавливаете window.slide_it в значение false, когда «mouseleave»

Надеюсь, что это поможет кому-то еще решить эту проблему!