我有一个脚本触发弹出框提供免费下载。它会在用户的鼠标离开页面时触发(显然不适用于移动设备 - 我已经有了一个可行的解决方案)。在我的脚本中,我设置了一个cookie来停用脚本30分钟,那部分有效;如果我刷新页面,弹出窗口不再显示。
问题是,如果某人关闭了弹出框,并且没有刷新页面(或导航到网站上的另一个页面),则每次鼠标移出页面时都会发生弹出窗口。
我正在使用一个设置事件的函数,但我不能只激活一次。 (我正在研究的Wordpress网站使用的是jquery ver = 1.10.2。)
我的Javascript:
if (document.cookie.indexOf('somecookiename') != -1) {
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
} else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
};
jQuery(document).ready(function($) {
if (document.cookie.indexOf('somecookiename') == -1) {
//var thirtyminutes = 1000*60*30;
var thirtyminutes = 1000 * 60;
var expires = new Date((new Date()).valueOf() + thirtyminutes);
document.cookie = "somecookiename;expires=" + expires.toUTCString();
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
document.getElementById("preview-download").style.display = "block";
document.getElementById("back-shader").style.display = "block";
}
});
}
});
function showhide(id) {
if (document.getElementById) {
obj = document.getElementById(id);
if (obj.style.display == "none") {
obj.style.display = "";
} else {
obj.style.display = "none";
}
}
}
HTML:
<div id="back-shader" class="popover2">
<div id="preview-download" class="popover2">
<h4>BEFORE YOU GO:</h4>
<h5>Download A Free Preview....</h5>
<a href="http://website.com/document.pdf" id="preview-pdf">Download Now</a>
<a href="#" id="closer" onclick="showhide('back-shader'); return(false);"></a>
</div>
</div>
CSS:
#back-shader,
#preview-download {
display: none;
}
这可能很简单,但我不是一个JavaScript专家。一如既往,感谢您的帮助。
答案 0 :(得分:10)
最简单的方法是使用removeEventListener
删除事件监听器:
document.addEventListener("mouseout", function handler(e) {
e.currentTarget.removeEventListener(e.type, handler);
/* whatever */
});
document.addEventListener("click", function handler(e) {
e.currentTarget.removeEventListener(e.type, handler);
alert('Only once');
});
&#13;
Click somewhere
&#13;
答案 1 :(得分:3)
如果使用jQuery,最简单的解决方案 - 使用.one()
代替.on()
这相当于触发.off()
http://api.jquery.com/one/
答案 2 :(得分:2)
在一次调用后关闭监听器的 javascript 版本是这样的:
canvas.addEventListener("mousedown",callback,{
// This will invoke the event once and de-register it afterward
once: true
});
答案 3 :(得分:1)
如果你正在使用jQuery,也可以使用Off()
.off()
方法删除附加了.on()
的事件处理程序。这是文档:
http://api.jquery.com/off/