Необходима помощь чтоб разобраться с куками
Доброго времени суток форумчане! Необходима помощь чтоб разобраться с куками. Мне необходимо чтоб баннер показывался пользователю раз в 2 часа. Код сейчас у меня такой
<div id="open" class="modalDialog">
<div>
<a href="#close" onclick="showHideMenu();" title="Закрыть" class="close">X</a>
<div class="hello" style="display:none" id="welcome-window">
<a class="hello-openModal" href="#open" onclick="showHideMenu();" ></a>
<!--banner-->
<!--banner end-->
</div>
</div></div>
<div class="clr"></div>
<script>
(function(){
const timestamp=new Date().getTime(); //miliseconds
const maxInactivePeriod=2; //hours
const cookieName='welcome_window';
/*const cookieName='open';*/
let lastVisit;
try{
lastVisit=+(localStorage.getItem('lastVisit')||timestamp);
localStorage.setItem('lastVisit',timestamp);
}catch(e){
lastVisit=timestamp;
console.error(e);
};
if(
lastVisit+maxInactivePeriod*3600*1000>timestamp &&
document.cookie.indexOf(cookieName)>=0
)
return;
const win=document.getElementById('welcome-window');
/*const win=document.getElementById('open');*/
if(!win)
return;
win.style.display='block';
document.cookie='name='+cookieName+'; path=/;';
})();
window.onload = function(){
document.querySelector('a[href="#open"]').click();
}
</script>
Проблема сейчас такая, при старте страницы сам баннер id="welcome-window" показывается один раз а id="open" вызывается постоянно. welcome-window - код баннера open - код модального окна Подскажите пожалуйста, как скрывать и показывать оба блока. |
Stas1985,
display:none надо ставить на id="open" и от этого плясать, кнопку class="hello-openModal" выкинуть |
Цитата:
- Если нет куков, сделал что нужно и записал куки со сроком жизни 2часа. - Если куки еще есть, ничего не показывай. |
Цитата:
<a href="#close" title="Закрыть" class="close-modalDialog">X</a> Но при этом куки срабатывают и при перезагрузки станицы баннер не показывается |
|
Цитата:
<script>
(function(){
const timestamp=new Date().getTime(); //miliseconds
const maxInactivePeriod=2; //hours
const cookieName='open';
let lastVisit;
try{
lastVisit=+(localStorage.getItem('lastVisit')||timestamp);
localStorage.setItem('lastVisit',timestamp);
}catch(e){
lastVisit=timestamp;
console.error(e);
};
if(
lastVisit+maxInactivePeriod*3600*1000>timestamp &&
document.cookie.indexOf(cookieName)>=0
)
return;
const win=document.getElementById('open');
if(!win)
return;
win.style.display='block';
document.cookie='name='+cookieName+'; path=/;';
})();
window.onload = function(){
document.querySelector('a[href="#open"]').click();
}
</script>
сам модуль вот <div id="open" style="display:none" class="modalDialog"> <div> <a href="#close" title="Закрыть" class="close-modalDialog">X</a> <div class="hello" id="welcome-window"> <a class="hello-openModal" href="#open"></a> <!--banner--> <!--banner end--> </div> </div></div> <div class="clr"></div> |
localStorage показ банера каждые 2 часа
Stas1985,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.modalDialog {
display: none;
}
.modalDialog.open {
display: block;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
const limit = 2 * 3600 * 1000; // 2 часа
const localStorageInitTime = localStorage.getItem('localStorageInitTime') || new Date() - limit;
const delta = new Date() - localStorageInitTime;
const close = document.querySelector('.close-modalDialog');
const modalDialog = document.querySelector('.modalDialog');
const openModal = _ => modalDialog.classList.add('open');
const closeModal = _ => {
modalDialog.classList.remove('open');
localStorage.setItem('localStorageInitTime', +new Date());
window.setTimeout(openModal, limit);
};
window.setTimeout(openModal, delta >= limit ? 0 : limit - delta);
close.addEventListener('click', closeModal)
});
</script>
</head>
<body>
<div id="open" class="modalDialog">
<div>
<a href="#close" title="Закрыть" class="close-modalDialog">X</a>
<div class="hello" id="welcome-window">
<!--banner-->
banner banner
<!--banner end-->
</div>
</div></div>
<div class="clr">
</div>
</body>
</html>
|
Получаю ошибку Uncaught TypeError: document.querySelector(...) is null
|
Stas1985,
смотрите какие у вас классы на самом деле |
Вот полностью код баннера
<?php defined('_JEXEC') or die; ?>
<style type="text/css">
.modalDialog {display: none;}
.modalDialog.open {display: block;}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
const limit = 2 * 3600 * 1000; // 2 часа
const localStorageInitTime = localStorage.getItem('localStorageInitTime') || new Date() - limit;
const delta = new Date() - localStorageInitTime;
const close = document.querySelector('.close-modalDialog');
const modalDialog = document.querySelector('.modalDialog');
const openModal = _ => modalDialog.classList.add('open');
const closeModal = _ => {
modalDialog.classList.remove('open');
localStorage.setItem('localStorageInitTime', +new Date());
window.setTimeout(openModal, limit);
};
window.setTimeout(openModal, delta >= limit ? 0 : limit - delta);
close.addEventListener('click', closeModal)
});
</script>
<div id="open" class="modalDialog">
<div>
<a href="#close" title="Закрыть" class="close-modalDialog">X</a>
<div class="hello" id="welcome-window">
<!--banner-->
<div class="hello-l">
<div class="hello-l-header">ПОЛИГРАФИЯ «ЛИК»</div>
<div class="hello-l-body"><center><img src="/modules/mod_banner_index_js/assets/css/images/bg-l-body.jpg" alt="ПОЛИГРАФИЯ «ЛИК» - СКИДКИ ДО 50%!"></center></div>
<div class="hello-l-footer">СКИДКИ ДО 50%!</div>
</div>
<div class="hello-r">
<div class="hello-r-header">Акция действительна на распечатку, флаеры, визитки</div>
<div class="hello-r-body">Вопросы по телефону:<br /> 8 (7172) <span>31-00-01</span> <br />www.lik-astana.kz</div>
<div class="hello-r-footer">*Информация, цены, реклама, прочее указанные на данном сайте, согласно ГК РК, не является публичной офертой. Компания не имеет намерения заключить договор на предложенных условиях со всеми, кто отзовется. Компания намерена обсуждать условия сотрудничества с любым кто обратиться с предложением заключить договор.</div>
</div>
<!--banner end-->
</div>
</div></div>
<div class="clr">
</div>
вот его стили _https://lik-astana.kz/modules/mod_banner_index_js/assets/css/style.css вроде все совпадает |
Stas1985,
браузер какой? |
Цитата:
|
в какой строке ошибка?
|
Stas1985,
всё работает и в мозилле. ссылку в личку, или можно гадать бесконечно. |
ошибка была из за
window.onload = function(){
document.querySelector('a[href="#open"]').click();
}
Цитата:
|
Stas1985,
не могу помочь. |
| Часовой пояс GMT +3, время: 23:49. |