在同事Stack溢出成员的帮助下,我得到了使用Keydown的快捷方式的代码。
How to Check if jQuery .keydown() has any other keys pressed or not?
对于每个按键事件,代码都使用setTimeout函数。我在一个页面上使用它,用户通常输入超过1000个单词。(我想是4K-5k字符)
这意味着按键将在所有5k键上运行,新的超时将多次启动。
var NewKeys = {};
var NewTimeout;
jQuery(document).keydown(function (e) {
if (NewTimeout) {
clearTimeout(NewTimeout);
}
NewKeys[e.which] = true;
NewTimeout = setTimeout(function () {
if (typeof NewKeys[17] !== "undefined" && typeof NewKeys[83] !== "undefined" && Object.keys(NewKeys).length === 2) {
e.preventDefault();
if(!jQuery('.SearchCreations').hasClass('Show')){
e.preventDefault();
jQuery('.SaveCreation').click();
}
}
if (typeof NewKeys[27] !== "undefined" && Object.keys(NewKeys).length === 1) {
jQuery('.Thumbnail.Close').click();
jQuery('.Action').removeClass('Collapse');
}
if (typeof NewKeys[16] !== "undefined" && typeof NewKeys[17] !== "undefined" && typeof NewKeys[83] !== "undefined" && Object.keys(NewKeys).length === 3) {
e.preventDefault();
if(jQuery('.CreationEditor').hasClass('Autosaving')){
jQuery('.StopSave').click();
}
else{
jQuery('.AutoSave').click();
}
}
}, 200);
});
这会影响最终用户的性能/可靠性吗?
您最不想做的事情是创建一个资源密集型的网页,使用户的设备停止正常工作。
我在6-7岁的笔记本电脑(i5,4GB内存,Windows 10)上尝试了这段代码.我注意到,如果我继续使用这个页面,它就能正常工作。但是,如果我使用
Alt + Tab
将窗口切换到其他应用程序,然后在5-7秒内返回到浏览器,那么快捷键就会停止工作。
可以确认此行为是一致的,并且到目前为止,它可以在多台Windows 10机器上进行复制。
发布于 2021-09-09 06:11:36
这在很大程度上取决于超时值和输入的速度。例如,超时为3,第二次键入5个字母。然后,您将得到15个同时运行的函数。
这很好,但是当您使用更长的超时时间(比如10s,速度为10个字母/秒)时,您将有100个函数同时运行,这是不合适的。
特别是,如果您试图完成比更改类和一些DOM操作更重的任务。
https://stackoverflow.com/questions/69112118
复制相似问题