Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2019, 11:55
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

Событие при каждом третьем посещении
Доброго времени суток, уважаемые форумчане.

Не понимаю как запустить событие при каждом третьем посещении страницы.

Хочу использовать для этого LocalStorage и sessionStorage. Может кто подсказать, показать пример как этого добиться.
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2019, 13:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,323

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 в 13:37.
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2019, 16:08
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 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");
});
Я смысл понял, но данный код почему то не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2019, 16:31
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,713

Сообщение от 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 в 16:34.
Ответить с цитированием
  #5 (permalink)  
Старый 25.05.2019, 17:15
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

да работает, спасибо. а можно ли остановить выполнение например по клику по кнопке? это получается просто переменную num переписать?

Или объявить новый localStorageи на него завязать, если например кликнули по кнопке, то больше ничего не делаем, а если не нажимали прогнем выше написанное условие
Ответить с цитированием
  #6 (permalink)  
Старый 25.05.2019, 17:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,713

Вы имеете в виду, чтобы при нажатии на кнопку вообще больше не запускалось?

Вот пример с возможностью включения и отключения запуска... Если на кнопке стоит галочка, то оно запускается через три раза, если не стоит галочка, то не запускается
<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 в 17:38.
Ответить с цитированием
  #7 (permalink)  
Старый 25.05.2019, 17:38
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

Да именно, только по клику по линку, а не через инпут. Спасибо, я все пнял.
Ответить с цитированием
  #8 (permalink)  
Старый 25.05.2019, 17:44
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,713

Сообщение от Alexodiy
только по клику по линку
Это совершенно неправильно так делать! Используйте либо <button> либо <input>. Ссылка <a> предназначена, чтобы совершать переход на другой документ, здесь такого нет, поэтому используйте подходящий элемент! (кнопку или чек-бокс, чтобы показать текущее состояние!)

Также насчёт обмана и заблуждении, в которые вас ввели: на самом деле эти элементы могут быть стилизованы при помощи CSS!

Последний раз редактировалось Malleys, 25.05.2019 в 17:46.
Ответить с цитированием
  #9 (permalink)  
Старый 25.05.2019, 17:55
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

Malleys, так у меня и планируется переход на другой документ. Смысл такой, по событию падают уведомляшки с просьбой перейти на другую страницу, так вот если пользователь переходит, то эти уведомления я отрубаю.
Ответить с цитированием
  #10 (permalink)  
Старый 25.05.2019, 22:12
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

Сообщение от Malleys Посмотреть сообщение
Это совершенно неправильно так делать! Используйте либо <button> либо <input>. Ссылка <a> предназначена, чтобы совершать переход на другой документ, здесь такого нет, поэтому используйте подходящий элемент! (кнопку или чек-бокс, чтобы показать текущее состояние!)

Также насчёт обмана и заблуждении, в которые вас ввели: на самом деле эти элементы могут быть стилизованы при помощи CSS!
А как лучше сделать, тоесть вместо localStorage.launch = checkbox.checked; сделать событие например

$(".link").on("click", function(){
// тут запишем ключ и по нему потом проверяем вместо checkbox.checked
}


?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие при изменении размера окна в диапазоне (для адаптивной верстки) spo Общие вопросы Javascript 4 02.10.2014 15:51
переопределение переменных при событие onchange lw091190 Элементы интерфейса 0 29.06.2014 12:07
Новые элементы в блоке при событие onmouseleave b14de Events/DOM/Window 2 29.05.2014 07:56
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27