Я запускаю всплывающее окно, если пользователь неактивен на странице, но хочет, чтобы функция, отображающая всплывающее окно, удаляется, если пользователь закрывает всплывающее окно, так как это просто раздражает наличие этого pop открыть каждые XX секунд.Как я могу удалить эту функцию setTimeout
Это функция, которую я использую для вызова всплывающего окна.
<script type="text/javascript">
var timeoutID;
function setup() {
this.addEventListener("mousemove", resetTimer, false);
this.addEventListener("mousedown", resetTimer, false);
this.addEventListener("keypress", resetTimer, false);
this.addEventListener("DOMMouseScroll", resetTimer, false);
this.addEventListener("mousewheel", resetTimer, false);
this.addEventListener("touchmove", resetTimer, false);
this.addEventListener("MSPointerMove", resetTimer, false);
startTimer();
}
setup();
function startTimer() {
// wait 20 seconds before calling goInactive
timeoutID = window.setTimeout(goInactive, 20000);
}
function resetTimer(e) {
window.clearTimeout(timeoutID);
goActive();
}
function goActive() {
startTimer();
}
function goInactive() {
$.magnificPopup.open({
mainClass: "mfp-fade",
fixedContentPos: false,
fixedBgPos: true,
items: {
src: "#needtochat"
},
removalDelay: 1000, //delay removal by X to allow out-animation
callbacks: {
beforeOpen: function() {
this.st.mainClass = "mfp-3d-unfold";
},
close: function() {
window.clearTimeout(timeoutID); // Thought this may remove the timer function all together?
}
},
type: "inline"}, 0);
}
</script>
Вы заметите function goInactive()
показывает модальное окно и у меня есть обратный вызов close:
, что я надеялся, очистить функцию.
Это вполне может быть очистка таймера, но у вас есть куча слушателей событий который будет воссоздавать его с помощью 'resetTimer' ->' goActive' -> 'startTimer' –
Итак, ответ будет? – Aaron
Вы должны установить флаг в начале функции 'goInactive()', поэтому ** прекратите выполнение функции 'goActive()' внутри 'resetTimer()' **. Что происходит сейчас: вы очищаете тайм-аут, но вы устанавливаете его снова в самый следующий момент (используя вышеупомянутые прослушиватели событий). – skobaljic