2016-04-18 11 views
1

以下のスライドアニメーションには慣性があります。スライドアニメーションは継続していて、時間の経過とともに速度が徐々に低下します。 interval100に達すると、アニメーションが停止します。次のスライドアニメーションのスピードを上げる方法は?

let interval = 1 // initial speed 
const timer = function() { 
    ++interval // decrease the speed 
    slideThumbs(thumbs, direction) // do the sliding animation 
    const timeOut = setTimeout(timer, interval) 
    // stop animation when the speed reaches 100 
    if (interval === 100) { 
    clearTimeout(timeOut) 
    } 
} 
timer() 

これは機能します。しかし、それは非常に遅いです。どうすれば全体のスピードを上げることができますか?

EDIT(初期アニメーションが停止したときにスライドから?):

これはslideThumbsの内側に何である:

const totalThumbs = newChildrenArr.length 
const thumbWidth = 144 // thumb width plus margin 
const slideLimit = (totalThumbs - 1) * thumbWidth 
if (arrow === 'left') { 
    store.state.translateX += 1 // add one pixel to the `transform: translateX` attribute 
} 
+0

で言った何をしたいかのJSFiddleの一例です2、3、などのように、数値値を超えるすべてのミリ秒が発生するためです。 2回目の発射には2ミリ秒、3回目は5ミリ秒、4回目は8ミリ秒などとなります。あなたが0.5秒に達するまでに、あなたはそれを30回発射しました。これは大丈夫です、それは60FPSに近いです。今、次の半分の間、あなたはそれを13回しか発射しません。これは初期カウントの半分以下である。これは続く。 – Dellirium

+0

代わりに、 'setInterval(function、interval)'を使って同じ間隔で関数を飛行させ、代わりに関数の実行ごとにオブジェクトの「移動距離」を減らすことをお勧めします。 – Dellirium

+1

通常、Tweeningと 'easing'-functionについてはGoogleにお勧めしますが、今朝あなたの投稿に点滅がありました。私は別のアプローチが良くないとは思わない。この質問の文脈をより詳しく説明してください。 – Thomas

答えて

1

++間隔は間隔の値が増加します。インターバルが増え、アニメーションが遅くなります。私がお勧めしたい

だけのものは100

から小さい値への各呼び出しの間のデルタを減少させ、間隔を短くすることである。またslideThumbs方法のいくつかのパフォーマンスの分析を行うに見て - それはこのことかもしれませんオーバーヘッドを引き起こしていますが、コードを見ずにテストすることは困難です。

(編集 - 質問にはコードが表示されています)トランスフォームにはどれくらいの時間がかかりますか?私はそれがこの場合に多く実行されるので、パフォーマンスの低下を引き起こしているかもしれないことを示唆したいと思います。

1

Hereは私が最初に `のsetTimeout(タイマー、インターバル)`あなたは1ミリ秒後に発射されない場合は、これが迅速になり、コメント

function ClosureWrapper(callback) { 
    var distance = 50; 
    var timer = Trigger; 

    function Trigger() { 
    if (distance <= 0) { 
     callback(); 
    } else { 
     distance--; 
     //do something 
     console.log("distance moved this interval is: " + distance); 
    } 
    } 
    return timer; 
} 

var someTimer = setInterval(ClosureWrapper(function() { 
    console.log("Movement Finished") 
    clearInterval(someTimer); 
}), 100); 
+0

コードをありがとう。しかし、私はそれを試して、スライダは常に同じ速度(1px)で移動し、その後停止します。 – alexchenco

+0

'//do something'部分にスライドを記述します。あなたが見ることができるように、そこでは "距離パラメータ"が減少するので、スライダをコード化すると、それはより遅く移動しなければならないか、スライダの移動コードが間違っています。 'ctrl + shift + i'を実行してコンソールログを確認すると、実行ごとに距離が減少することがわかります。 – Dellirium

関連する問題