1

私が書いたこの (素敵な) 小さなスクリプトは、 list 内の各要素をゆっくりとフェードアウトするはず<li></li>です。しかし、何も起こりません。どうしたの。

<div id="twitnews" style="padding-left:20px; line-height:20px; float:left;">
        <?php getFeed("http://search.twitter.com/search.rss?q=golf+berkshire"); ?>
    </div>

<script type="text/javascript">
function fader() {

$(element).fadeIn(300, function(){
    $(element).delay(3000).fadeOut(300) });

        var element = $(element).next();

        fader();

}
$('#twitnews').children().hide();

var element = $('#twitnews').children().first();
fader();
        </script>

何か案は、

素晴らしい

4

4 に答える 4

0

元のコードには多くのエラーがあり、セレクターが正しくなく、グローバル変数が正しく使用されていません。これはプラグインのデモに最適です。

(function($){
// Make it a plugin
$.fn.twicker = function(settings) {
  // Default Variables
  var c = {time: 1300};
  // Override the variables with the settings if available.
  $.extend(c, settings);
  var $t = $(this);
  // If we find a ul, means we passed the container (a div that contains a ul)
  if($('ul', $t).length == 1) {
      $tw = $t;
      $t = $('li', $t).first();
  }

  // Do the animation.
  $t.delay(c.time).fadeIn(c.time, function() {
    // If there's a next sibling, do next.
    if($t.next().length != 0) {
        $t.next().twicker();
        $t.next().fadeOut();

    // If there's no sibling, it means we're at the end. Go back to first.
    } else {
        $tw.first().twicker();
        $t.first().fadeOut();
    }
    $t.fadeOut(c.time);
  });

};

})(jQuery);

$('#twitnews').twicker({time:2000});

これはJSFiddleでライブで見ることができます

于 2011-05-14T15:00:42.487 に答える
-1

スクリプトが機能しない理由はわかりませんが、少し異なるアプローチを取ることをお勧めします。すべての JS コードを次のものに置き換えます。

$('#twitnews').children().each(function(){
  $(this).fadeIn(300, function() {
    $(this).delay(3000).fadeOut(300);
  });
});

注: グローバル変数、奇妙な要素のトラバース、および再帰呼び出しを取り除くために、コードを再配置しただけです。アニメーションには触れていませんが、新しいコードでバグを簡単に見つけることができるはずです。

于 2011-05-14T13:49:42.530 に答える
-1

に渡しelementてみてくださいfader()

fader(element);

スクリプトの最後に。

element定義するときにも含めるfader()

function fader(element){
    //the rest of your function code here
}
于 2011-05-14T13:40:42.197 に答える
-1

これは非常にシンプルな解決策だと思います。唯一の問題は、これが最後の li であるかどうかを判断するために if 関数を使用することです。おそらく誰かがそれの何が悪いのか知っています。

 $('#twitnews li').hide();
    $('#twitnews li').first().fadeIn(300, function fade(){

        var visel = $('#twitnews li:visible');

        if((visel).is($('#twitnews li:last'))) {
            var nextel =  $('#twitnews li').first();
        }
        else {
        var nextel = $(visel).next();
        }


        $(visel).delay(3000).fadeOut(300, function(){

            $(nextel).fadeIn(300, function(){fade()});

            });

        });
于 2011-05-14T15:06:16.587 に答える