0

私はこのビットのコードを持っています:

$({ speed: 0 }).animate({ speed: 500 }, {
    duration: duration,
    easing: 'easeInSine', // can be anything
    step: function (now, fx) { // called on every step
        var $current = $(self.settings.itemClass).first();
        var left = parseInt($current.css("left"));

        //console.log(now);

        if (left <= distance) {
            $current.hide(now, "linear", function () {
                $(this).appendTo(self.settings.itemContainerClass).show(now, "linear");
            });
        }
    },
    complete: function () {
        var $container = $(self.settings.itemContainerClass);
        var $current = $(self.settings.itemClass).first();
        var id = parseInt($current.attr("id"));

        $.post("/Draw/SelectWinner/" + id, function (data) {
            $container.delay(1000).hide("fast", function () {
                var $name = $current.find("h3");
                var $img = $current.find(".carousel-photo").find("img");
                var $profileImage = ($img.attr("src") == "/img/transparent.png") ? "" : $img;
                var twitter = ($current.find(".twitter").length > 0) ? $current.find(".twitter").text() : "";

                var $winner = $('<div class="winner" />')
                    .css({
                        width: "100%",
                        height: "100%",
                        display: "none"
                    })
                    .addClass("red")
                    .appendTo(self.element)
                    .append("<div><h2>We have a winner!</h2></div>")
                    .append($name)
                    .append("<h4>" + twitter + "</h4>")
                    .append($profileImage)
                    .show("slow");
            });
        });
    }
});

ご覧のとおり、 easeInSineイージング関数を使用して、速度を 0 から 500 までアニメーション化しています。これは機能しますが、私が望むものを正確に提供しません。このアニメーションを一定速度で 10 秒間実行し、5 秒間停止するまで徐々に速度を落としたいのですが、イージング関数の書き方がわかりません。

これを行うことで、独自のイージング関数を作成できることを知っています。

$.easing.crazy = function(t, millisecondsSince, startValue, endValue, totalDuration) {
    if(t<0.5) {
        return t*4;
    } else {
        return -2*t + 3;  
    }
};

私が必要とする部分は、次のようなことをすることです

$.easing.crazy = function(t, millisecondsSince, startValue, endValue, totalDuration) {
    if(t < 10) {
        return 500;
    } else {
        // return a speed that gradually slows down
    }
};

誰かが私がこれを解決するのを手伝ってくれるなら、私は本当に素晴らしいでしょう.

アップデート

sparky のおかげで、私は今これを得ることができました:

$.easing.wheel = function (x, t, b, c, d) {
    return (t == d) ? b + c : c * (-Math.pow(2, -25 * t / d) + 1) + b;
}

しかし、私にはまだ問題があります。これは 15 秒間実行されますが、最初の数秒間は素晴らしく速く (3 秒間と言います)、残りはゆっくりと停止します。10 秒間高速で実行し、最後の 5 秒間は減速する必要があります。

例をより良くする方法を知っている人はいますか?

乾杯

4

0 に答える 0