2011-01-31 10 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

何をすればいいですか?それがstop()でない場合は? – Ryan

1

あなたの関数が長時間実行されているjavascriptプロセスの場合は、実行プロセスを停止し、必要なときに続行するために何らかの外部フックを置く必要があります。 whileループがある場合は、実行を停止するために外部条件をチェックする必要があります。通常の意味でのループがない場合は、関数の実行状態調整をチェックする他の方法を見つける必要があります。

Javascriptで実行中の機能を中断することは一般に不可能です。追加コードなしではありません。

長時間実行される関数は、スクリプトの実行を継続するか停止するか(ブラウザは無限ループのように実行がハングアップしているとみなすかどうか)をユーザーに確認することによって中断されます。

あなたはJavascriptで長時間実行される機能を持っていない場合は、いくつかの部分にfnctionality分割し、それが一定にヒットした場合window.setTimeout(function, delay);

4

によって短い関数の実行を次々に遅延技術をスレッドJavaScriptを使用する必要がありますあなたのスライド機能の条件は、機能の外に出るために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に設定されている場合にのみ停止します。だから、単に "mouseleave"のときにwindow.slide_itをfalseに設定してください。

問題を抱えている人に役立つことを願っています!

関連する問題