3

素晴らしいサイクルプラグインでスライドショーを実行しています。ショーのボタンをクリックすると、ページに非表示のレイヤーが表示され、「一時停止」コマンドを送信してサイクルします。私は2つの問題を抱えています:

  1. 一時停止コマンドを受信すると、cycleはすぐにシーケンスの最初のスライドに戻り(なぜ??)、コールバックの前後にヒットしません。

  2. レイヤーを閉じた後、「resume」コマンドを送信してサイクルします。スライドショーは再開されますが(一時停止が残った最初のスライドから)、スライドショーが進行しても、サイクルはコールバックの前後をまったく呼び出しません。

だから私の質問は、スライドショーを適切に一時停止/再開して、これらの奇妙な動作が発生しないようにするにはどうすればよいかということだと思います。(そして、完全に明確にして混乱を避けるために、これは「ホバーで一時停止」機能に関するものではありません。これは実際にはうまく機能しています。:-)

これが私のcycle()initと私のコールバック関数です。(nextSlideを手動で追跡するのはなぜですか?現在のスライドの組み込み値は、コールバックの前後で適切に更新されないためです。)

  $(document).ready(function() {
    $('#slideshow').cycle({
      fx: 'fade',        // choose your transition type, ex: fade, scrollUp, shuffle, etc...
        timeout:       4000,  // milliseconds between slide transitions (0 to disable auto advance)
        speed:         1000,  // speed of the transition (any valid fx speed value)
        pause:         1,     // true to enable "pause on hover"
        delay:         0,     // additional delay (in ms) for first transition (hint: can be negative)
        slideExpr:     'img',  // expression for selecting slides (if something other than all children is required)
        before:       moveArrow, // function to call when moving to next slide
        after:       upd, // function to call when moving to next slide
        fastOnEvent:   'fast',
    });
  });

  var nextSlide = 0;

  function upd(a, b, c) {
    nextSlide = nextSlide + 1;        // track which slide we're on
    c = $('#slideshow img').length;
    if(nextSlide > (c - 1)) nextSlide = 0;   // wrap back to 1st
  }

  // move indicator showing which slide we're on
  function moveArrow(a, b, c) {
    $('#slide-indicator').attr('class', 'c'+nextSlide);

    $(".clickmap").hide();          // hide other clickmaps
    $(".clickmap.c"+nextSlide).show();    // show map for this slide

    return true;
  }

これについての考えをありがとう-

最高、エリック

4

4 に答える 4

3

同じ問題があり、一時停止と再開が機能しませんでした。ライトバージョンをインストールしたようで、フル/完全バージョンが機能しています。

于 2011-05-13T11:10:30.677 に答える
0

一時停止コマンドを送信するためのコードを示していません。一時停止してもスライドショーが最初のスライドにリセットされないため、何かが間違いなく間違っています。

また、スライド インデックスを自分で追跡する必要はありません。before/after コールバックの 3 番目の引数は、スライドショーの内部状態を持つオプション オブジェクトです。そのオブジェクトには、'currSlide' および 'slideCount' プロパティなどがあります。

于 2010-07-21T13:33:39.517 に答える
0

これは古い質問であることは知っていますが、同じ問題がありました。私がそれを回避した方法は、JQuery のホバー イベントでスライドショーを一時停止および再開する独自の関数を作成することでした。

Eric がいくつかのコメントで指摘したように、関連する問題として、プラグインの一時停止オプションでは、IMG 要素の上にカーソルを置いてスライドショーを一時停止することしかできないため、ページャーや装飾要素など、画像の上に何かがある場合は、あなたは骨が折れています。

そこで、装飾要素、バナー (「#banner」と呼びます)、およびページャーをすべて「#banner-container」と呼ばれる div に配置し、このコードを適用して問題を解決しました。

$('div#banner-container').hover(function(){
   if(!$(this).hasClass('paused')){
       $(this).addClass("paused");
       $('div#banner').cycle("pause")
   }
},function(){
   if($(this).hasClass('paused')){
       $(this).removeClass("paused");
       $('div#banner').cycle("resume")
   }
});
于 2012-02-20T20:47:42.453 に答える
0

問題は JQuery Cycle Plugin バージョンにあります。「ライト」バージョンは一時停止/再開コマンドを無視します。フルバージョンを使用すると、問題が解決する場合があります。

編集:申し訳ありませんが、私は間違っていました:私は両方のバージョンを試しましたが、フルバージョンを使用して同じ問題がありました.

于 2013-09-08T22:46:00.503 に答える