HTML画布:当键被按下时控制keydown注册表
HTML Canvas: Controlling keydown registry when key is held down
我正在寻找一种方法来控制在按住某个键的给定时间段内注册了多少keydown事件。我有两个动画功能,collapse()
和expand()
,当按下向下键时,它们会折叠和展开一个框。我把它装好了,这样第二个动画就在第一个动画之后开始了。但是,我在第一个动画中设置了一个计时器hovering(t)
,每次按键都会重置该计时器,这样第二个动画在释放关键帧且计时器到期之前不会开始。
function collapse(){
if(h > 1 && arrayCount < myArray.length){
reqAnimFrame(collapse);
h -= 10;
clear();
draw();
} else {
arrayCount += 1;
h = 0;
clearHoverTimer();
hovering(250);
}
}
function expand(){
if(h < 100){
reqAnimFrame(expand);
h += 10;
clear();
draw();
} else {
h = 100;
clear();
draw();
}
}
这就是我的问题所在:第一个动画函数也通过arrayCount变量在字符串数组中循环。当collapse()激发时,arrayCount将递增一。不幸的是,当按下键时,它会快速连续地触发塌陷功能,数组循环过快。
是否可以限制密钥事件的时间,以便注册一半的密钥?
我尝试将变量heldDown
设置为false
,这将允许注册keyEvent。keyEvent将调用collapse
并启动heldDownTimer
。一旦heldDownTimer
到期,heldDown
将被重置为false
,并且循环将重新开始。
设置指示折叠&展开动画。
var doCollapsing
指示折叠代码是否应设置动画。
var doExpanding
指示展开代码是否应设置动画。
在keydown处理程序中,可以忽略"extra"keydown,方法是仅在标志指示动画循环空闲时设置标志。
// listen for keydown and doCollapsing only if the animation is currently idle
if(!doCollapsing && !doExpanding){
doCollapsing=true; // start collapsing
doExpanding=false; // don't expand until a keyup fires
}
这将导致collapse+expand执行一次,而不是每次按下键都触发。
// variables indicating the state of the animation
var doCollapsing=false;
var doExpanding=false;
// listen for keydown events
document.addEventListener("keydown",handleKeydown,false);
// listen for keyup events
document.addEventListener("keyup",handleKeyup,false);
// start the animation loop
requestAnimationFrame(animate);
// handle keydown events
function handleKeydown(e){
// listen for keydown
// doCollapsing only if the animation is idle
if(!doCollapsing && !doExpanding){
doCollapsing=true;
doExpanding=false;
}
}
// handle keyup events
function handleKeyup(e){
doExpanding=true;
}
// the animation loop
function animate(time){
requestAnimationFrame(animate);
if(doCollapsing){
// Do collapsing until done
// When done: doCollapsing=false;
}else if(doExpanding && hoveringTimerHasExpired){
// Do expanding until done
// When done: doExpanding=false;
}
}
相关文章:
- JS编译器/包管理器,用于版本控制
- 使用特定键在keydown时触发事件
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 如何控制组件'的createContent函数被激发
- 节点协同与生成器和Promise并行流量控制
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- 使用:new Image()控制加载html.src=html_URL
- 传单缩放控制位置错误
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- JQuery.on(“keydown”)追加到页面时不工作
- KeyPress和Keydown在这个特定的代码上不起作用.只有key-up起作用
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 使用jQuery控制来自图像的音频
- 阻止浏览器对keydown事件作出反应,但不取消该事件
- CORS:否'访问控制允许来源'header-但是php设置头文件
- "访问控制允许起源”;通过javascript从http页面调用同一网站的httpsurl时出现问题
- 为什么可以't我将检索到的文档分配给控制台中的变量
- HTML画布:当键被按下时控制keydown注册表