2012-03-12 13 views
0

div(#sliderBox)上にマウスを置いたときに表示と非表示を切り替えるdiv(#thumbnails)が必要です。そのために、hoverIntentプラグインを使用して、魅力的に働きました。clearTimeout()の使用に関するヘルプが必要です。およびsetTimeout);解決策が見つからない

5秒間アイドル状態にするとdiv(#thumbnails)がfadeOutになります。私はそれをsetTimeout()を使って動作させることができました。

私の問題は、次のとおりです。私は#sliderBoxの上にアイドル滞在する場合、私は再びマウスを動かすと#thumbnailsのdiv要素がフェードインしませんDIV。マウスカーソルを#sliderBox divから外し、#thumbnails div fadeInを再び作成するには、もう一度マウスカーソルを移動しなければなりません。

これを修正する方法はありますか?

これは私のコードです:

$(document).ready(function() { 

$("#thumbnails").hide(); 

$("#sliderBox").hoverIntent(showThumbs, hideThumbs); 

    var timer; 

    $(document).mousemove(function() { 

     if (timer) { 
      clearTimeout(timer); 
      timer = 0; 
     } 

     timer = setTimeout(function() { 
      $('#thumbnails').fadeOut(1000) 
      }, 5000) 
    }); 


}); 

    function showThumbs(){ $("#thumbnails").fadeIn(1000);} 
    function hideThumbs(){ $("#thumbnails").fadeOut(800);} 

答えて

1

問題がmouseenterに発射するプラグインを、であるので、あなたは再び出て、入力するまで発生しません。唯一の解決策は、プラグイン自体を変更して、mouseenterまたはmousemove(遅延後)にトリガーすることです。プラグインはかなりシンプルに見え、よくコメントされています。私はそれを変更するのが難しいとは思わない。

幸運とゴッドスピード!

+0

あなたのアイデアは私には分かりやすいものです。しかし、私はそれが動作するように問題を抱えています。私はJqueryにとってちょっと新鮮です。あなたは私にいくつかのアドバイスをくれますか? –

+0

プラグインのコードを見て、それがどのように機能しているかを理解してください。それは短く、よく書かれ、コメントされている。次に、達成しようとしていることを計画する必要があります。具体的には、変更されたロジックの周りにあるので、変数を使って現在の状態を把握する必要があります(ボックスがアクティブ、フェードアウト、フェードイン、フェードアウトなど)。この状態の変化をどこで追跡し、イベントにどのように異なる対応をとるかというアイデアを設計してみてください。それを広く考えてみて、プログラミングの詳細に惑わされないようにしてください。彼らが出てくると、ここで具体的な質問をしてください。 –

+0

私は状態を使用して終了しました。私は単純な解決策を作り、別の変数を追加して新しい状態を追加しました。その状態は、サムネイルがタイマにDUEされるかどうかを定義します。したがって、基本的にマウスを動かしてそのような状態にすると、onMouseEnter関数が呼び出され、サムネイルが再びフェードインします。プラグインは今見て、うまく動作方法 これは次のとおりです。http://jsfiddle.net/Eblan85/tTjZv/は おかげで再び助け:) –

0

プラグインを編集することなくこれを行うことができます。

ドキュメントの 'mousemove'を処理するだけでなく、プラグインとは独立してsliderBoxの 'mousemove'を処理しますが、同じshowThumbs()関数を呼び出します。

$(function(){ 
    var timer, $thumbnails = $("#thumbnails").hide(); 
    function showThumbs(){ 
     if($thumbnails.is(":hidden")){ 
      $thumbnails.fadeIn(1000); 
     } 
    } 
    function hideThumbs(){ $thumbnails.fadeOut(800); } 
    $("#sliderBox").on('mousemove', showThumbs).hoverIntent(showThumbs, hideThumbs); 
    $(document).on('mousemove', function(){ 
     clearTimeout(timer); 
     timer = setTimeout(hideThumbs, 5000); 
    }); 
}); 

showThumbs()ではあなたは私が$thumbnails.fadeIn(1000)条件なされていることがわかります。

コードは、この(未テスト)のようなものになります。これは厳密には不要ですが、showThumbs()の作業は少なくなります。これは重要な考慮事項であり、これは 'onmousemove'ハンドラとして添付されています。

+0

考え直しために、私の提案のアプローチは、おそらくそうhoverIntentの使用を否定しますプルージングをジミーにするほうがおそらく良いでしょう。 –

+0

そして、それを言って、私はあなたが同じ問題に遭遇しているのかどうかはわかりません。テストが必要です。 –

関連する問題