25.05.2019, 10:55
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Событие при каждом третьем посещении
Доброго времени суток, уважаемые форумчане.
Не понимаю как запустить событие при каждом третьем посещении страницы.
Хочу использовать для этого LocalStorage и sessionStorage. Может кто подсказать, показать пример как этого добиться.
|
|
25.05.2019, 12:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
localStorage и sessionStorage счётчик посещений
Alexodiy,
document.addEventListener("DOMContentLoaded", function() {
var num = localStorage.getItem("num") || 0,
today = sessionStorage.getItem("today");
if(today === "yes") return;
sessionStorage.setItem("today", "yes");
num = +num + 1;
localStorage.setItem("num", ""+num);
if(num % 3 === 0 ) alert("3");
});
Последний раз редактировалось рони, 25.05.2019 в 12:37.
|
|
25.05.2019, 15:08
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Сообщение от рони
|
Alexodiy,
document.addEventListener("DOMContentLoaded", function() {
var num = localStorage.getItem("num") || 0,
today = sessionStorage.getItem("today");
if(today === "yes") return;
sessionStorage.setItem("today", "yes");
num = +num + 1;
localStorage.setItem("num", ""+num);
if(num % 3 === 0 ) alert("3");
});
|
Я смысл понял, но данный код почему то не работает.
|
|
25.05.2019, 15:31
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Alexodiy
|
Я смысл понял, но данный код почему то не работает.
|
Он работает... он срабатывает на третий раз, если открывать вкладку... Кстати можно попроще... (нажмите запустить и закройте вкладку, откройте снова нажмите запустить... на третий раз сработает)
<script>
document.addEventListener("DOMContentLoaded", function() {
var num = Number(localStorage.num) || 0;
if(sessionStorage.today === "yes") return;
sessionStorage.today = "yes";
localStorage.num = ++num;
if(num % 3 === 0) alert("3");
});
</script>
если вам надо при третьем обновлении страницы, то можно так... (нажмите три раза кнопку запустить)
<script>
document.addEventListener("DOMContentLoaded", function() {
var num = Number(localStorage.num) || 0;
localStorage.num = ++num;
if(num % 3 === 0) alert("3");
});
</script>
Последний раз редактировалось Malleys, 25.05.2019 в 15:34.
|
|
25.05.2019, 16:15
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
да работает, спасибо. а можно ли остановить выполнение например по клику по кнопке? это получается просто переменную num переписать?
Или объявить новый localStorageи на него завязать, если например кликнули по кнопке, то больше ничего не делаем, а если не нажимали прогнем выше написанное условие
|
|
25.05.2019, 16:20
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Вы имеете в виду, чтобы при нажатии на кнопку вообще больше не запускалось?
Вот пример с возможностью включения и отключения запуска... Если на кнопке стоит галочка, то оно запускается через три раза, если не стоит галочка, то не запускается
<script>
document.addEventListener("DOMContentLoaded", function() {
var checkbox = document.getElementById("toggle-launch");
checkbox.addEventListener("change", function() {
localStorage.launch = checkbox.checked;
if(!checkbox.checked) localStorage.num = 0;
});
if("launch" in localStorage) {
checkbox.checked = localStorage.launch === "true";
} else {
localStorage.launch = checkbox.checked;
}
if(!checkbox.checked) return;
var num = Number(localStorage.num) || 0;
localStorage.num = ++num;
if(num % 3 === 0) alert("3");
});
</script>
<label><input type="checkbox" id="toggle-launch" checked>Запускать</label>
<script></script>
Последний раз редактировалось Malleys, 25.05.2019 в 16:38.
|
|
25.05.2019, 16:38
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Да именно, только по клику по линку, а не через инпут. Спасибо, я все пнял.
|
|
25.05.2019, 16:44
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Alexodiy
|
только по клику по линку
|
Это совершенно неправильно так делать! Используйте либо <button> либо <input>. Ссылка <a> предназначена, чтобы совершать переход на другой документ, здесь такого нет, поэтому используйте подходящий элемент! (кнопку или чек-бокс, чтобы показать текущее состояние!)
Также насчёт обмана и заблуждении, в которые вас ввели: на самом деле эти элементы могут быть стилизованы при помощи CSS!
Последний раз редактировалось Malleys, 25.05.2019 в 16:46.
|
|
25.05.2019, 16:55
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Malleys, так у меня и планируется переход на другой документ. Смысл такой, по событию падают уведомляшки с просьбой перейти на другую страницу, так вот если пользователь переходит, то эти уведомления я отрубаю.
|
|
25.05.2019, 21:12
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Сообщение от Malleys
|
Это совершенно неправильно так делать! Используйте либо <button> либо <input>. Ссылка <a> предназначена, чтобы совершать переход на другой документ, здесь такого нет, поэтому используйте подходящий элемент! (кнопку или чек-бокс, чтобы показать текущее состояние!)
Также насчёт обмана и заблуждении, в которые вас ввели: на самом деле эти элементы могут быть стилизованы при помощи CSS!
|
А как лучше сделать, тоесть вместо localStorage.launch = checkbox.checked; сделать событие например
$(".link").on("click", function(){
// тут запишем ключ и по нему потом проверяем вместо checkbox.checked
}
?
|
|
|
|