0

私は学校のプロジェクトに取り組んでおり、あなたの助けが必要です。私が作ったのは、一連の div を通る無限ループです。3 つの div と 3 つのリンクがあります。これらのリンクをクリックすると、すぐに適切な div が表示されます (その後、すべての div が表示され、再びループします)。問題は、クリックしたときに遅延が発生することです。これは望ましくありません...リンクをクリックしたときにdivがすぐに雪が降る可能性はありますか? 他の簡単で複雑でない方法はありますか? 必要なコードを変更/追加していただけますか? 前もって感謝します。

<ul id="cyclelist">
  <li><div>Div 1</div></li>
  <li><div>Div 2</div></li>
  <li><div>Div 3</div></li>
</ul>
</br></br>
<a href="#" class="className1">link1</a><br/>
<a href="#" class="className2">link2</a><br/>
<a href="#" class="className3">link3</a><br/>


var j=0;
function changeOnClick()
{

$("a").click(function(e) {
    e.preventDefault();
    if ($(this).hasClass('className1')) {
        j=-1;
    }
    else if ($(this).hasClass('className2')) {
        j=0;
    }
    else if ($(this).hasClass('className3')) {
        j=1;
    }
});
}

 var delay = 2000;
 function cycle(){
        var jmax = $("ul#cyclelist li").length -1;
        changeOnClick();
         $("ul#cyclelist li:eq(" + j + ")")
                 .animate({"opacity" : "1"} ,400)
                 .animate({"opacity" : "1"}, delay)
                 .animate({"opacity" : "0"}, 400, function(){
                         (j == jmax) ? j=0 : j++;
                         cycle();
                 });
         };
 cycle();
4

2 に答える 2

0

イベント ハンドラからサイクル関数を呼び出してみてください。このようなもの

if ($(this).hasClass('className1')) {
    j=-1;
    cycle();
}

これで問題が解決するはずです。

于 2013-02-24T11:38:14.807 に答える
0
.animate({"opacity" : "1"} ,400)

アニメーションの 2 番目のパラメーターは速度を表します。そのため、遅延を削除しています。

これは .animate の構文です

$(selector).animate({params},speed,callback);

一度それを通過.. http://www.w3schools.com/jquery/jquery_animate.asp

編集 -あなたのコメントのために..天気が正しい方法かどうかわかりません..setTimeout()を使用してcycle()を呼び出す方が良いです。

setTimeout(cycle,2000);
于 2013-02-24T11:33:50.380 に答える