js コードの一部で奇妙な動作が発生しています。
ページ上部のバーに表示され、一定時間後に消える通知がいくつかあります。これを達成するために単純なものを使用しましたsetTimeout()
。
ページの読み込み時に特定の URL クエリ文字列の結果として通知が表示されることがありますが、ユーザーがボタンをクリックしたときに新しいものを表示する必要があります。古いものが消えて、新しいものが現れてほしい。setTimeout()
キャンセルするために変数を使用して参照を保持しています。ただし、これを実行しようとすると、最終的にクロム タブがクラッシュするループが作成されます。
私の問題を説明するjsfiddleをまとめました - http://jsfiddle.net/5Nm4c/
別のものが表示されているときにクリックするとshow notification
、ブラウザー タブがクラッシュします。何も表示されていない状態でクリックすればOKです。
これが私のjsです:
var Notification = {
// close main notification bar
close: function (callback) {
$('#notification-bar').fadeOut(250, function () {
// reset its position and fade it back in so it is ready to go again
$(this).css('top', -100).fadeIn(1);
// check if a callback function has been passed in
if (typeof callback === 'function') {
callback();
}
});
},
// open notification bar with the appropriate css class and message
open: function (message) {
// if the notification bar is already visisble
if (verge.inViewport($('#notification-bar'))) {
// hide and then show it with the new message
window.clearTimeout(Notification.timeout);
Notification.close(Notification.open(message));
return false;
}
$('#notification-bar').html(message);
$('#notification-bar').animate({
'top': 0
}, 250, function () {
Notification.timeout = window.setTimeout(function () { Notification.close() }, 1500);
});
},
timeout: null
}
Notification.open('hello');
$('#button').click(function(e){
e.preventDefault();
Notification.open('link clicked');
});
ビューポートに要素が表示されているかどうかを確認するためのいくつかの優れた方法があるため、https://github.com/ryanve/verge/を使用しています。
誰かが私のエラーがどこにあるのか教えてもらえますか?