4

簡単なグラブデモページを作成しました。イージング/アクセラレーションはありません。JavaScriptを使用して、 kulesh.info(Flash Webサイト)と同じイージング/アクセラレーションを実行したいと思います。どうやってやるの?

JavaScriptでのスムーズなグラブ(スクロール、ドラッグ)の例は、言語に依存しないアルゴリズムと同様に役立ちます。

4

4 に答える 4

8

これはjQueryで得られる最高のものだと思います:[デモ]

jQuery.fx.interval = 1; // since v1.4.3
var photos = $(".photos");
var scrollLeft = photos[0].scrollLeft;
var $el = $(photos[0]);
var lastTime = +new Date();


$(window).mousemove(function(event){
    var now = +new Date();
    var elapsed = now - lastTime;
    if (dragging && elapsed > 10) {
        scrollLeft += x - event.clientX;
        $el.stop().animate({scrollLeft:  scrollLeft}, 300, "easeOutCubic");
        x = event.clientX;
        lastTime = +new Date();
    }
});

$(window).mouseup(function(event){
    dragging = false;
    $el.stop().animate({scrollLeft:  scrollLeft}, 500, "easeOutCubic");
});

最新のブラウザの画像レンダリングパフォーマンスに関連しているため、現時点では、考えられるすべての(わずかな)遅延を修正することはできません。テスト-単純な線形アニメーション、イベントなし、jQueryなし

于 2010-11-25T23:33:34.893 に答える
3

ゼノンのパラドックスと呼ばれることもあるイージング方程式を使用すると、フラッシュの外観を得ることができます。

position += (destination - position) / damping

私はそれを利用するためにあなたのjsFiddleを変更しました:見てください

ゼノンのパラドックスについてもっと詳しく説明してほしい場合は、お知らせください。ここに画像を1つか2つ投稿します。

于 2010-11-30T16:11:08.330 に答える
1

この行を置き換えてみてください:

photos[0].scrollLeft += x - event.clientX;

これで(更新されたデモ):

photos.animate({ scrollLeft : '+=' + (x - event.clientX) }, 12, 'easeOutCirc');

イージングオプションを含めるためにjQueryUIをクリックしたことに注意してください。また、jFiddle(Firefoxを使用)のデモでは非常にびくびくしていますが、デスクトップでテストしたり、Chromeでそのデモを見たりしても、まったく効果がありません。理想的には、jQueryanimateを使用せずにイージング関数を使用するのが最適です。しかし、これはあなたにアイデアを与えるはずです。

于 2010-11-20T21:12:45.533 に答える
0
var dragging = false;
var x, startX, startTime, stopTime;
var photos = $(".photos");

photos.mousedown(function(event){
    dragging = true;
    startX = x = event.clientX;
    startTime = new Date();
    event.preventDefault();
});

$(window).mousemove(function(event){
    if (dragging) {
        photos[0].scrollLeft += x - event.clientX;
        stopTime = new Date();
        x = event.clientX;
    }
});

$(window).mouseup(function(event){
    dragging = false;
    var left = photos[0].scrollLeft;
    var dx = (startX - event.clientX);
    var time = stopTime - startTime;
    var speed =time/dx;
    photos.animate({ scrollLeft : (left + dx*time/500), easing :'swing' }, 100/time*1000);  
});
于 2010-11-25T16:16:16.710 に答える