#javascript
#javascript
Вопрос:
У меня есть следующий код. Я хочу запустить действие в функции activityDetected(eventName)
только после 100 щелчков. Как это сделать?
Я знаю, что должен поместить let a = 1; a
, но не уверен, где…
const intervalTimeout = 2000;
//here is where code should be added. let a = 1; a...
function activityDetected(eventName) {
console.log(`Activity detected with the event name: ${eventName}!`);
clearInterval(activityTimeout);
activityTimeout = setInterval(recordNoActivity, intervalTimeout);
}
document.addEventListener('click', _ => {
activityDetected('click');
});
Комментарии:
1. Почему бы не объявить счетчик вне функции? pastebin.com/Rk5M49Tt
2. Также вам нужно хранить счетчик внутри файлов cookie или базы данных для поддержания последовательности подсчета. Как только ваша страница перезагрузится, установите ваш счетчик на ноль и снова запустите.
3. Должен ли этот счетчик быть постоянным? что происходит после 100 кликов? проверка перезапускается?
Ответ №1:
Вам нужно объявить счетчик вне функции и увеличить его на 1, когда значение eventName
равно 'click'
. После этого проверьте a % 100
и поместите туда любое действие, которое вы хотите вызывать каждые 100 кликов.
Посмотрите на пример кода:
// For ease, change this to a smaller value to detect more often, higher to detect less often!
const intervalTimeout = 2000;
let a = 0;
// Here's our interval, setting up the initial capture of no activity
let activityTimeout = setInterval(recordNoActivity, intervalTimeout);
// A single function to handle the events we're listening to.
// clears the interval and restarts it, also tells us which event has cleared the interval!
//here is where code should be added. let a = 1; a...
function activityDetected(eventName) {
if(eventName == 'click'){
a ;
if(a%100 == 0){
// Trigger whatever you want to trigger after every 100 clicks
}
}
console.log(`Activity detected with the event name: ${eventName}!`);
clearInterval(activityTimeout);
activityTimeout = setInterval(recordNoActivity, intervalTimeout);
}
// Set listening events
document.addEventListener('keydown', _ => {
activityDetected('keydown');
});
document.addEventListener('click', _ => {
activityDetected('click');
});
Комментарии:
1. Спасибо за вашу помощь и объяснение, это работает
Ответ №2:
Как правильно указали другие в этом потоке, переменная a
должна быть объявлена и определена вне функции, но причина, по которой этот подход будет работать, заключается в закрытии
Поэтому, когда вызывается функция execution context
, создается, который содержит
- scopeChain — он содержит variableObject variableObject всего родительского контекста выполнения
- variableObject — содержит аргументы / параметры функции, внутреннюю переменную и объявления функций
- это — этот контекст.
Таким образом a
, значения переменных будут сохранены перед вызовом функции, и переменная будет продолжать увеличиваться.