1

jCarouselLiteカルーセルの自動スクロール間隔を何らかのイベントの後にリセットして、次または前をクリックしたときのタイマーの長さに関係なく、完全な間隔でコンテンツを表示できるようにするにはどうすればよいですか? 現在、9 秒後に次または前をクリックすると、1 秒後に再びスクロールします。

jCarouselLite ソース コードの274行目から 277 行目は、 を使用して自動スクロールが実装されている場所setIntervalです。setInterval によって ID が返された場合に使用できることはわかっていますがclearInterval、ソース コードを変更する以外に取得できる ID はありません。

何か案は?ありがとう!

4

4 に答える 4

4

jCarouselLite 自体は、自動スクロールを停止する簡単な方法を提供していません。これは簡単な問題であり、必要に応じて実行します (?私はこの権利を理解しましたか: 自動スクロールをクリックすると一時的に停止してから続行したいだけです)。

自動スクロールを完全に停止するためのハッキーで潜在的にバグのある方法

var x; //hold interval id
$(function() {
    var y = window.setInterval; //backup original setInterval function
    //overwrite with new function which stores the id for us
    window.setInterval = function() {
        x = y(arguments[0], arguments[1]);
        return x; 
    };
    //now construct carousel
    $(".anyClass").jCarouselLite({
        btnNext: ".next",
        btnPrev: ".prev",
        auto: 500 
    });
    //now restore original setInterval function
    //as we only needed the custom one for the carousel to capture the hidden
    //internal call to setInterval
    window.setInterval = y;
});
$("#stopAutoScrollButton").click(function() {
    clearInterval(x);
});

本当の解決策

jCarouselLite だけでこれを行うことはできないため、自分でauto動作をシミュレートします。

$(function() {
    var autoTime = 5000; //5s
    $(".anyClass").jCarouselLite({
        btnNext: ".next",
        btnPrev: ".prev"
    });
    //simulate autoscroll by simulating "click" on next link
    var x = setInterval("$('.next').trigger('click');", autoTime);
    //if stopAuto is clicked the autoscroll is suspended for autoTime
    //no matter how far along the timer already was
    $("#stopAuto").click(function() {
        clearInterval(x);
        x = setInterval("$('.next').trigger('click');", autoTime);
    });
});
于 2009-12-08T00:56:33.820 に答える
3

これは、マウスオーバーが組み込まれているバージョンです。うまく動作します。 http://github.com/cheald/jcarousel-lite

于 2010-07-09T04:34:16.250 に答える
0

プラグインコードを変更できる/許可されている場合:

プラグインのデフォルトに間隔IDを保存する変数を追加します

interval: null

検索する:

if(o.auto)

ここで実行されるコードを取得し、次のように内部関数を作成します。

function runAuto() {
    setInterval(function() {
        go(curr+o.scroll);
    }, o.auto+o.speed);
}

次に、定義した変数に間隔を保存しますが、最初にクリアします。

function runAuto() {
    clearInterval(o.interval);
    o.interval = setInterval(function() {
        go(curr+o.scroll);
    }, o.auto+o.speed);
}

go()プラグインで関数を検索し、を追加runAuto()します。これにより、関数goが呼び出されるたびに、間隔がリセットされます。

もちろん、間隔が最初に始まるように、runAuto()への呼び出しも追加する必要があります。if(o.auto)

于 2011-10-20T09:34:12.183 に答える