1

http://jsfiddle.net/jdTL9/1/

これを正しく機能させるのに問題があります。間違ったタイミングでテキストを変更します (デモでわかるように)。私はこれを間違った方法で行っていると思います(主setTimeoutに不必要です)。誰か見てもらえますか?

var testimonials = ['This', 'is', 'kind', 'of', 'working']

$.each(testimonials, function (i, val) {
  setTimeout(function () {
   //Slide In
    $('#testimonials blockquote').show("slide", {
      direction: "right"
    }, 1500, function () {
     //Slide Out
      $(this).text(val).hide("slide", {
          direction: "left"
      },
         1500);
    });
  }, i * 3000);
});

**また、永遠にループさせたいです。

4

1 に答える 1

3

アイテムを表示する前にテキストを変更する必要があり.hide()ますshow()。また、代わりにコールバックを使用するようにロジックを少しリファクタリングしましたsetTimeout

var testimonials = ['This', 'is', 'kind', 'of', 'working'],
    i = 0,
    l = testimonials.length,
    $el = $('#testimonials blockquote');
(function loopTestimonials() {
    $el.text(testimonials[i++ % l]).show("slide", {
        direction: "right"
    }, 500, function () {
        $(this).delay(2000) //milliseconds to stay in screen
        .hide("slide", {
            direction: "left"
        }, 500, loopTestimonials); //restart show/hide loop when hide completes
    });
}());

フィドル

于 2013-03-10T02:20:40.047 に答える