Я знаю, что есть куча других людей, которые задавали вопросы о функциях регулирования, и я прокручивал их, но большинство, если не все, намного выше моего уровня или включают такие вещи, как jquery и действительно странные логики c для функция.
Я просто пытаюсь ограничить количество изменений, которые пользователь может вносить в секунду, чтобы не допустить рассылки спама.
Я написал свой код с помощью this YouTube видео, и я могу понять это, по большей части. Однако, похоже, что это не работает, я не вижу никаких проблем или блоков.
Это моя первая попытка реализовать регулирование:
const throttle = (bad_func, limit) =>{
var flag = true;
document.getElementById('key').innerHTML = flag;
return function(){
let context = this;
let args = arguments;
if(flag){
bad_func.apply(context,args);
bad_func();
flag = false;
setTimeout(()=>{
flag = true;
},limit);
}
}
}
ThrottledFunc = throttle(logKey, 4000);
window.addEventListener('keydown', ThrottledFunc);
function logKey(e){
// document.getElementById('EKey').innerHTML = e.which;
if (e.which == 87){
document.getElementById('demo').innerHTML = 'forwards';
}
else if (e.which == 83){
document.getElementById('demo').innerHTML = 'backwards';
}
else{
document.getElementById('demo').innerHTML = 'empty';
}
}
Но это не работает, Я все еще могу спамить w и s. «Демо» меняется, но задержки нет.
Для моей второй попытки я только что сказал, привинтите ее и попытался внедрить функцию тайм-аута в функцию, но все же не повезло:
window.addEventListener('keydown', logKey);
function logKey(e){
var flag = true;
var limit = 10000;
document.getElementById('key').innerHTML = flag;
if(flag){
if (e.which == 87){
flag = false;
document.getElementById('demo').innerHTML = 'forwards';
setTimeout(()=>{
flag =true;
}, limit);
}
else if (e.which == 83){
document.getElementById('demo').innerHTML = 'backwards';
flag = false;
setTimeout(()=>{
flag =true;
}, limit);
}
}
else{
document.getElementById('demo').innerHTML = 'empty';
}
}
Что я делаю не так?