0

注目のコンテンツ スライダー要素をまとめています。技術的にはすべて正常に動作していますが、ナビゲーション ボタンをすばやくクリックするとアニメーションが発生します。これが私のコードです:

this.LRSliderScrollVert = function(j) {
    var viewOutside = GetObject(this.sliderObjectId);
    if (parseInt(viewOutside.style.top) == 1 && j == 1){
        //do nothing
    } else if (parseInt(viewOutside.style.top) == this.sliderBottomLimit && j == -1) {

    } else {
        //viewOutside.style.top = parseInt(viewOutside.style.top) + j +'px';
        var total = parseInt(viewOutside.style.top) + j + 'px';
        $(viewOutside).stop().animate({
            top: total
        }, 700, 'swing');
    }
}

ご覧のとおり、私はすでに stop() を使用していますが、1 回のクリックでアニメーションが呼び出され、最初のアニメーションが完了するまでアニメーション関数への他の呼び出しは処理されないという、望ましい結果が得られていないようです。完了しました。

stop(true,true) も結果に違いはありませんでした。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

.stop(true, true)現在実行中のアニメーションを停止し、最後まで進め、アニメーション キューから削除します。それはあなたが求めていることのようには聞こえません。

進行中のアニメーションが完了した後に後続のアニメーションを実行する場合は.stop()、現在のアニメーションの後に新しいアニメーションがキューに追加されるため、を削除するだけです。

オブジェクトが現在アニメーション化されている場合に後続のアニメーションがまったく開始されないようにするには、オブジェクトが現在アニメーション化されているかどうかを確認し、そうであれば別のアニメーションを開始しないようにします。

最後のクリックからまだアニメーション化されている間、将来のアニメーションを無視するには、次のようにします。

this.LRSliderScrollVert = function(j) {
    var viewOutside = GetObject(this.sliderObjectId);
    if (parseInt(viewOutside.style.top) == 1 && j == 1){
        //do nothing
    } else if (parseInt(viewOutside.style.top) == this.sliderBottomLimit && j == -1) {

    } else {
        var total = parseInt(viewOutside.style.top) + j + 'px';
        // remove any objects from the selector that are currently animating
        // if there are none left, then it will do nothing
        $(viewOutside).not(":animated").animate({
            top: total
        }, 700, 'swing');
    }
}

.stop()それはあなたが望んでいるものではないので、私は削除しました。それは現在のアニメーションを停止しますが、あなたはそれを続けたいと言います。スキップしたいのは、現在のアニメーションが実行されている間に将来のアニメーションです。

.not(":animated")現在アニメーション化されているオブジェクトをセレクターから削除するために追加しました。1 つのオブジェクトがアニメーション化されている場合、これは空の jQuery オブジェクトを残し、メソッドを呼び出しても何もしません.animate()。これにより、テストとその結果に対するステートメント.is(":animated")の使用にかかるコードを少し節約できます。if

于 2012-10-05T00:42:08.640 に答える