5

まず、jQuery Transit が素晴らしいです。まだ見ていない場合は、http://ricostacruz.com/jquery.transit/をチェックして、驚かせてください!

ただし、1 つの問題は、jQuery のエフェクト キューを使用すると主張しており、ほとんどの場合そのように思われますが、jQuery の.stop()メソッドを使用して動作させることができないことです。

ここにフィドルを投稿しました:http://jsfiddle.net/nicholasstephan/sTpa7/

アニメーション ボタンをクリックすると、標準の jQuery.animate()を使用してボックスがゆっくりと右に移動します。停止を押すと、予想どおり、アニメーションが停止します。リセットを押すと、アニメーションも停止し、ボックスが開始した場所に戻ります。

トランジションをクリックすると、まったく同じことが行われるはずですが、そうではありません...

何が起きてる?誰でもこれの回避策を知っていますか?

ありがとう。

4

2 に答える 2

4

これがうまくいくかもしれない解決策です。

追加のコールバックをキューに入れる新しい遷移関数を作成してみてください。このコールバックは、停止によってアニメーションがデキューされた後にクリーンアップできます。クリアとスキップの指示 ただし、古い停止機能から受信されません。しかし、そのための新しい停止機能を作成できます。これはブラウザに入力しただけで、完全にテストされていません

(function($){
    $.fn.stopableTransition = function (...){
        var skip = false
        var clear = false
        this.handle("stopTransition", function(doclear, doskip){
            skip = doskip; clear = doclear;
        })
        this.transition(...)
        this.queue(function(){
            if(skip){
               //todo: ensure animation is removed from css
               //todo: move object to where the animation would have finished
            } 
            else
            {
               //todo: ensure animation is removed from css
               //todo: make sure object stays at its current position
            }

            if(clear){
                skip = false
                clear = false
                $(this).clearQueue()
            }  
            else 
            { 
                skip = false
                clear = false
                $(this).dequeue()
            }

        })
    }
    $.fn.stopTransition = function (clear, skip){
        clear = (typeof(clear) === 'undefined') ? false : clear;
        skip = (typeof(skip) === 'undefined') ? false : skip;
        this.triggerHandler("stopTransition", [clear, skip])
        this.dequeue();
    }
})(jQuery)
于 2012-11-09T08:42:54.917 に答える
0

@Jason Moreが言ったように、そのスレッドを調べたところ、フォークが存在し、という名前の関数があることがわかりましたtransitionStop()(そして、残りのすべてのアニメーションをクリアするためにも呼び出す必要がありますclearQueue())が、このフォークが最後であるという事実を考慮すると約 1 年前にコミットし、元の TransitJS の最後のコミットは約 3 か月前です。そのフォークを使用すると、一部の機能が失われる可能性があります。
しかし、私が必要としているのは、それが最速の方法です。

于 2014-10-14T19:20:43.820 に答える