我正在使用javascript编程电视遥控器,如果用户再按一次1(1个频道或11个频道或111个频道),用户按下数字1功能需要等待2秒。
我写了这个函数,但它只显示11111111
in循环这里是我的代码:
function chChannel(pressed) {
setInterval(function () {
if (lengthCS < 3) {
inputChannel += pressed;
lengthCS = inputChannel.length;
}
}, 2000);
// call function to change channel using variable value inputChannel for ex. 011
};
有任何解决方案吗?
因此,函数需要等待2秒,然后在2秒之后,它会在变量InputChannel中获取被按下数字的值,这样我就可以调用函数将值从Value InputChannel更改为数字。
答案 0 :(得分:1)
听取按键并计算它们是一个记录良好的事情,但是,在实际主题的上下文中,我会说,没有正确的等待方法,除了用超时调用设置为函数来结束脚本反复检查,等待的时间是否已经过去,如果不是则自动触发,例如,使用setTimeout。 100ms,如果是,则调用继续主程序的函数。 然后,等待线程还可以检查和计数按键,例如。在全局变量中作为基本解决方案。
答案 1 :(得分:0)
使用“setTimeout”。
var Timer;
function chChannel(pressed) {
clearTimeout(Timer);
Timer = setTimeout(function () {
if (lengthCS < 3) {
inputChannel += pressed;
lengthCS = inputChannel.length;
}
}, 2000);
// call function to change channel using variable value inputChannel for ex. 011
};
答案 2 :(得分:0)
你是否考虑过使用下划线的去抖功能,会让事情变得更加简单。
http://underscorejs.org/#debounce
可能是这样的事情可能有用,在电话上无法自己测试......
var inputChannel;
function chChannel(pressed) {
if (inputChannel <= 3) {
inputChannel += pressed;
}
else {
inputChannel = pressed;
}
_.debounce(someFunction, 2000);
};
只要debounce在延迟时间内被调用就不会执行,只会在延迟后执行一次。