0

ページ上で jquery サイクルのオプションを動的に変更したいと考えています。具体的には速度を落としてほしい。その作成者の 1 人によると、「cycle.opts」を使用してこれを行うことができます。私の例では、具体的に

$('.cycle-streams').cycle({
    fx: 'scrollVert',
    continuous: 1,
    speed: 1000,
    delay: 0,
    easing: 'linear'
});

var changedOpts = $('.cycle-streams').data('cycle.opts');

$('.cycle-streams').mouseover(function() {
    var changedOpts = $('.cycle-streams').data('cycle.opts');
    changedOpts.speed = 1000000000000;
    $('.cycle-streams').data('cycle.opts', changedOpts);
});

私はこれにしばらく取り組んできましたが、何が間違っているのかわかりません。どんな助けでも大歓迎です。jsfiddle はこちらです... http://jsfiddle.net/bmXgj/

4

1 に答える 1

2

あなたのフィドルをこれに変更しました:

var changedOpts = $('.cycle-streams').data('cycle.opts');

$('.cycle-streams').mouseover(function() {
    //hover in
    $('.cycle-streams').cycle('pause');
    changedOpts.speedIn = 500;
    changedOpts.speedOut = 500;
    $('.cycle-streams').cycle('next');
    $('.cycle-streams').cycle('resume');   
});

$('.cycle-streams').mouseout(function() {
    //hover out
    $('.cycle-streams').cycle('pause');
    changedOpts.speedIn = 3000;
    changedOpts.speedOut = 3000;
    //$('.cycle-streams').cycle('next');
    $('.cycle-streams').cycle('resume');
});​

何らかの理由で「changedOpts」を再宣言していることに気付きました。コンソールでこの変数を見たとき、未定義として出てきました。あなたはすでにそれを定義しているので、私はそれを使い続けました。

また、サイクルの状態をリセットすることはありませんでした。一時停止と再開を追加しました。現在は機能しているように見えますが、完全ではありません。新しい速度が使用される前に、最後の面をクリアする必要があるため、大幅なジャンプ (たとえば 3000 から 500) では、速度を上げようとするとかなりの遅延が発生します。また、次のステートメントを追加しました。

プラグインが次に処理しているときに、タイムアウトがクリアされていることに気付きました。そこで、残り時間を保存して(Pause)、次のスライドに移動して(next)、ショーを再開(resume)すると、時間が元に戻ると考えました。これは機能しているようです。

高速から低速に移行する場合、「次の」アクションは必要ありません。これは、コンテナが急速に循環しているため、通常、コンテナを離れるときに「孤立した」スライドに気付かないためです。速度がそれほど離れていない場合に備えて、適切な測定のためにそこに入れました。

また、速度を 1 つだけ変更していることにも気付きました。プラグインの内部を見ずに、「速度」オプションは初期化時にのみ使用されると想定しています。他の 2 つの速度を追加した後、正しいアクションが得られました。プラグインの「根性」を確認した後、速度オプションが他の 2 つの速度を同期するために使用されていることを確信しています。それらがすべて一致しない場合、同期が取れなくなる可能性があります。初期化コードは「速度」を使用して「speedIn」と「speedOut」を設定するため、「実行」速度に影響を与えるためにこれら 2 つを変更する必要があります。

http://jsfiddle.net/bmXgj/6/

編集:一時停止して再開する必要はありませんでした。

EDIT2:一時停止と再開が必要でしたが、次も必要でした。また、「速度」オプションは、サイクルを開始する最初の時間に設定されると無視できます。speedIn = speedOut = X の省略形のようです

于 2012-12-13T21:54:22.870 に答える