1

私は問題があります。クリックするとドロップダウンするこのメニューがあり、何も起こらなかった場合は5秒後に元に戻したいです。ここまで来ました。しかし、クリックして戻ると、5秒後に何も言わずに出てくるというグリッチがあります。それがまだ表示されているかどうかを確認してから戻って、そうでない場合は落ち着いて続行することは可能ですか?

コードは次のとおりです。

$(document).ready(function () {
  $('#aktivs-share').click(function() {     
  $('#share').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#share').slideToggle('slow', function() {  });
}, 5000);
});
 $('#aktivs').click(function() {
  $('#valodas').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#valodas').slideToggle('slow', function() {  });     
 }, 5000); 
});
});
4

2 に答える 2

1

メニューの状態を追跡し、clearTimeout()を使用して、メニューの状態が閉じている場合のタイムアウトをクリアする必要があります。

(コードはテストされていませんが、うまくいけばあなたはアイデアを得るでしょう)

    var shareOpen = false;
    var shareTimeoutHandle = undefined;
    $('#aktivs-share')。click(function(){
        $('#share')。slideToggle('slow'、function(){});

        //現在の状態を確認します。すでに開いている場合は、閉じてリセットします
        if(shareOpen)clearTimeout(shareTimeoutHandle);
        そうしないと {
            shareTimeoutHandle = setTimeout(function(){
                $('#share')。slideToggle('slow'、function(){});
            }、5000);
        }
        //新しい状態を反対に設定します
        shareOpen =!shareOpen;
    });

于 2012-11-14T16:28:42.570 に答える
0

の戻り値を覚えておいてください。setTimeoutこれは、を介してキャンセルするために使用できるハンドルですclearTimeout

あなたの場合、複数のことでそれをやりたいので、おそらく、を介して、タイマーハンドルを実際要素に格納するのが最善dataです。

ロジックの重複を避けるために、これを行うためのプラグインメソッドを自分で作成することを検討してください。slideToggleAutoCloseか何か。:-)

于 2012-11-14T16:15:16.560 に答える