質問

基本的に、指定されたメソッド/jquery アニメーションの実行が終了するまで実行を続行できないように、任意のコマンドを $.holdTillFinished() メソッドでラップできるようにしたいと考えています。

これは JavaScript では難しいか不可能であると思われますが、誰かが知ってくれることを願っています。

アニメーションにコールバックを渡してアニメーションを完了時に実行する方法などについては聞きたくありません。

そのようなことが可能かどうか、そしてどのようにすればよいのかを知りたいです。

ユーザー定義メソッドとアニメーションの両方をキューに入れることができる優れたキュー プラグインを誰かが知っていれば、そのようなことが起こらないのであれば、それも素晴らしいでしょう。ただし、私が本当に望んでいるのは、実行を遅らせる方法です。(アニメーションを機能させながら)

役に立ちましたか?

解決

これはJavaScriptでは難しいか不可能であると思われます

あなたの疑念は正しい。アニメーション、ユーザー入力ループ、「async=true」XMLHttpRequests などのメソッド しなければならない 続行するには制御をブラウザに返します。ブラウザは、関数呼び出しのすべてのネスト レベルが返されるまで制御を取り戻すことはできません。つまり、「holdTillFinished()」を呼び出した関数を含むすべてのコードをアンワインドする必要があります。したがって、「holdTillFinished()」は不可能です。

他の言語にはフロー制御機能があり、非同期プロセスを呼び出し元には同期しているように見せかけ、非同期プロセスを効果的に実行したり、その逆を実行したりすることができます。最もよく知られているのは、 スレッド そして 続き. 。JavaScript にはこれらの機能がないため、できるのはタイムアウトとコールバックだけです。

(コールバックをインライン関数として定義して、クロージャ内で囲んでいる関数の変数にアクセスすると、少なくとも一部の手間は軽減されます。他の一部の言語では、これを実現するために、オブジェクトのプロパティで囲んでいる状態のすべてのビットをラップし始める必要があります。)

他のヒント

これは、状況に守るが、通常、AJAXが呼び出され、または任意のループはJavaScriptで実行されたときに表示される処理画像を表示することが必要です。私は、処理画像が表示されている表示するユーザーのために、ループ内でAJAXを呼び出しています状況があります。私はトリックを行って終了するには。この機能は、私は、これは実行がfalseを返すtrueで、スクリプトが停止します場合は、グローバル変数をtrueにして、私はこの世界的なチェックをしていますループ内で「cancelJob」を言う設定が呼び出されたときに、私は仕事をキャンセルするボタンを配置しています。

var cancelJob = false;
foreach(){
   if(cancelJob == true)
       return false;
}

function cancelButtonPress(){
   cancelJob = true;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top