2012-04-20 15 views
1

私はjQueryのダイアログを、ユーザーがイメージの上に置いた直後に正確に3秒間表示するようにしたいと思います。現在、私は:jQueryダイアログを表示する前に待機するには?

$(".imgLi").live('hover', function() { 
    showDialog(); 
}); 

function showDialog() 
{ 
    $('#imageDialogDiv').dialog({ 
     modal:true 
    }); 
} 

<div id="imageDialogDiv" title="Blah">...</div> 

ここにタイムコードを置くか、またはjQueryのタイマオブジェクトをどのように実装するかはわかりません。その3秒の時間枠のどの時点でも、マウスを画像から離して移動すると、は表示されません。ここに助けてくれてありがとう。あなたは3秒後にダイアログを表示することができますhttp://jsfiddle.net/weCpE/

答えて

4

申し訳ありませんが、私は、マウスアウトでてclearTimeoutを追加しました3秒前にユーザーがマウスを離すと、このタイプのコードを使用して表示されません。

.on()を使用するようにコードを移行しました。.live()はすべてのバージョンのjQueryで非推奨になっているためです。このコードのdocumentは、より良いパフォーマンスのために、".imgLi"オブジェクトに近い静的な親要素で置き換える必要があります。

var dialogTimer = null; 
$(document).on('mouseenter', ".imgLi", function() { 
    if (!dialogTimer) { 
     dialogTimer = setTimeout(function() { 
      dialogTimer = null; 
      showDialog(); 
     }, 3000); 
    } 
}).on('mouseleave', ".imgLi", function() { 
    if (dialogTimer) { 
     clearTimeout(dialogTimer); 
     dialogTimer = null; 
    } 
}); 

function showDialog() 
{ 
    $('#imageDialogDiv').dialog({ 
     modal:true 
    }); 
} 

<div id="imageDialogDiv" title="Blah">...</div> 
+0

これは、ユーザーがマウスを離しても、OPが望んでいないものであっても3秒でダイアログを表示します。また、 'setTimeout(showDialog、3000)'を行う方が良い –

+0

私はそれを逃してしまったので、私はclearTimeoutを追加しました。 – user1289347

+0

't'は' timedCount() 'スコープで宣言されているので、' mouseout'ハンドラではアクセスできません。 '.live()'のパラメータも間違っています。構文エラーが発生します。 – Strelok

1
$(".imgLi").live({ 
     mouseenter: 
      function() 
      { 
       window.myTimeout = setTimeout(showDialog,3000); 
      }, 
     mouseleave: 
      function() 
      { 
       clearTimeout(window.myTimeout); 
      } 
     } 
    ); 

function showDialog() 
{ 
    $('#imageDialogDiv').dialog({ 
     modal:true 
    }); 
} 

シンプルjsfiddleを離れてマウスを置いた場合、それが実行されない必要がありますので、

1

:ユーザーが

$(document).on('mouseenter', ".imgLi", function() { 
    var t=setTimeout("showDialog()",3000); 
}).on('mouseleave', ".imgLi", function() { 
    clearTimeout(t); 
}); 

function showDialog() 
{ 
    $('#imageDialogDiv').dialog({ 
     modal:true 
    }); 
} 

<div id="imageDialogDiv" title="Blah">...</div> 
0

私は優秀な成績でブライアンCherneからHoverIntentプラグインを使用してきました - あなたは簡単にあなたが望む正確な遅延にそれを設定することができます。私はそれが.livethis question参照)で動作するとは思わない。

関連する問題