У меня есть скрипт, который вызывает всплывающее окно, предлагающее бесплатную загрузку. Он срабатывает, когда мышь пользователя покидает страницу (очевидно, не для мобильных устройств — для этого у меня уже есть рабочее решение). В моем скрипте я установил куки для деактивации скрипта на 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="https://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. Ваша помощь, как всегда, приветствуется.
element.addEventListener('click', function(){})
28.10.2014