聊聊 键盘长按将解决卡顿方案

当我们做游戏的时候,很多时候遇用到键盘事件长按的的时候第一下卡顿的情况,怎么解决呢?
 以下是我的解决方案,建议复制到编辑器上直接调试

代码里面有我思考的过程,大家可以参考

  思考过程

//当按下的时候改变left属性值
40     //总结:当我们按下的时候,键盘的设计者不知道我们是要连续按还是按一下,所以,键盘的制造者定了一个规矩,如果按下超过..s的时候就认为是用户要连续按,于是就出现了一个问题,当我们玩游戏的时候,我们如果连续按下键盘就会先停顿一下,然后在连续的
41     //转化思想:如何解决这个问题,当按第一下的时候我们就执行left/top的改变,那么改变的代码就不能写在按下的事件里面,按下只是传给我们信号,这个信号让top/left连续改变,当抬起键盘的时候,改变这个信号,让上面的改变停止,传给他的信号应该是布尔值
 1 老版本

<!DOCTYPE html>
 2 <html lang="en">
 3
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>Document</title>
 7     <style>
 8     .box {
 9         position: absolute;
10         top: 10px;
11         left: 10px;
12         width: 100px;
13         height: 100px;
14         background: red;
15     }
16     </style>
17 </head>
18
19 <body>
20     <div class="box"></div>
21     <script>
22     var box = document.querySelector(‘.box‘);
23     var isleft = false;
24     var isright = false;
25     var istop = false;
26     var isbottom = false;
27     setInterval(function() {
28
29         if (isleft) {
30             box.style.left = box.offsetLeft - 5 + ‘px‘;
31         } else if (isbottom) {
32             box.style.top = box.offsetTop - 5 + ‘px‘;
33         } else if (istop) {
34             box.style.top = box.offsetTop + 5 + ‘px‘;
35         } else if (isright) {
36             box.style.left = box.offsetLeft + 5 + ‘px‘;
37         }
38     }, 20)
39     //当按下的时候改变left属性值
40     //总结:当我们按下的时候,键盘的设计者不知道我们是要连续按还是按一下,所以,键盘的制造者定了一个规矩,如果按下超过..s的时候就认为是用户要连续按,于是就出现了一个问题,当我们玩游戏的时候,我们如果连续按下键盘就会先停顿一下,然后在连续的
41     //转化思想:如何解决这个问题,当按第一下的时候我们就执行left/top的改变,那么改变的代码就不能写在按下的事件里面,按下只是传给我们信号,这个信号让top/left连续改变,当抬起键盘的时候,改变这个信号,让上面的改变停止,传给他的信号应该是布尔值
42     window.onkeydown = function(e) {
43         switch (e.keyCode) {
44             case 37:
45                 isleft = true;
46                 break;
47             case 38:
48                 isbottom = true;
49                 break;
50             case 39:
51                 isright = true;
52                 break;
53             case 40:
54                 istop = true;
55                 break;
56         }
57     }
58     window.onkeyup = function(e) {
59         switch (e.keyCode) {
60             case 37:
61                 isleft = false;
62                 break;
63             case 38:
64                 isbottom = false;
65                 break;
66             case 39:
67                 isright = false;
68                 break;
69             case 40:
70                 istop = false;
71                 break;
72         }
73     }
74     </script>
75 </body>
76
77 </html>

改良版本

 1 <!DOCTYPE html>
 2 <html lang="en">
 3
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>Document</title>
 7     <style>
 8     .box {
 9         position: absolute;
10         top: 10px;
11         left: 10px;
12         width: 100px;
13         height: 100px;
14         background: red;
15     }
16     </style>
17 </head>
18
19 <body>
20     <div class="box"></div>
21     <script>
22     var box = document.querySelector(‘.box‘);
23
24     //当按下的时候改变left属性值
25     //总结:当我们按下的时候,键盘的设计者不知道我们是要连续按还是按一下,所以,键盘的制造者定了一个规矩,如果按下超过..s的时候就认为是用户要连续按,于是就出现了一个问题,当我们玩游戏的时候,我们如果连续按下键盘就会先停顿一下,然后在连续的
26     //转化思想:如何解决这个问题,当按第一下的时候我们就执行left/top的改变,那么改变的代码就不能写在按下的事件里面,按下只是传给我们信号,这个信号让top/left连续改变,当抬起键盘的时候,改变这个信号,让上面的改变停止,传给他的信号应该是布尔值
27     window.onkeydown = function(e) {
28         switch (e.keyCode) {
29             case 37:
30                 box.style.left = box.offsetLeft - 5 + ‘px‘;
31                 break;
32             case 38:
33                 box.style.top = box.offsetTop - 5 + ‘px‘;
34
35                 break;
36             case 39:
37                 box.style.left = box.offsetLeft + 5 + ‘px‘;
38                 break;
39             case 40:
40                 box.style.top = box.offsetTop + 5 + ‘px‘;
41                 break;
42         }
43     }
44     </script>
45 </body>
46
47 </html>

原文地址:https://www.cnblogs.com/-yu-ze-/p/8424577.html

时间: 2024-10-09 20:10:05

聊聊 键盘长按将解决卡顿方案的相关文章

键盘--自动弹出不卡顿的小技巧

1 /** 2 * 在view已经显示的时候弹出键盘, 这样可避免切换控制器的时的小卡顿 3 */ 4 - (void)viewDidAppear:(BOOL)animated 5 { 6 [super viewDidAppear:animated]; 7 [self.searchBar becomeFirstResponder]; 8 }

Mui-为解决卡顿问题,设置子界面

--index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title&

说说C#的async和await 解决卡顿问题 转

C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: 可以看到,async和await关键字只是把上面的代码变得更简单易懂而已. public class MyClass { public MyClass() { DisplayValue(); //这里不会阻塞 System.Diagnostics.Debug.WriteLine("MyClass() End."); } public Task<double> GetVal

Element-ui 下拉列表 选项过多时通过自定义搜索来解决卡顿问题

当使用Select选择器时,如果下拉列表的数据量太多,会有一个明显的卡顿体验,例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.jsdelivr.net/npm/[email protected]/d

thikphp5.0 ip地址库 解决卡顿问题 curl_init

使用淘宝新浪的地址库非常的使用,但是调用有时候会出现很慢.会导致卡在当前网页. 要想不影响当前速度,因此要使用 curl_init功能. 项目案例:会员登陆日志 user_log 字段:id,user_id,user_name,ip,address,add_time 思路: 1.如果登陆成功send线下发送请求,带参数id,name,ip 2.在方法add_log接收参数,并且开始转化值(要插入user_log字段的数据),其中会用到getAddressFromIp 淘宝新浪地址库 具体操作:

webstorm配置内存参数,解决卡顿

找到WebStorm.exe.vmoptions这个文件,路径如下webstorm安装主目录>bin>WebStorm.exe.vmoptions更改为第二行:-Xms526m第三行:-Xmx1024m(ps:这里-Xms最大值不能超过1024,否则webstorm将无法打开)重启ps:本地电脑64位,同时修改了WebStorm64.exe.vmoptions

解决在firefox中看flash视频时卡顿的问题

问题:使用firefox播放音悦台中flash视频时总是出现画面卡顿的现象. 注意:以下的解决方案会导致安全性问题,我用360安全浏览器发现它现在(2015-2-14)就是使用旧版flash插件来解决卡顿问题的. 解决方案的步骤: 1. 下载旧版flash 11.6.602.180 2. 打开安装压缩包中的fp_11.6.602.180_archive\11_6_r602_180\flashplayer11_6r602_180_win.exe 3. 打开firefox的about:config,

彻底解决 Intellij IDEA 卡顿 优化笔记,重要的快捷键

由于工作中经常出现分支各种切换,使用Eclipse便不再像以前那么舒服了,不停的修改工作空间,每次修改完工作空间又是一堆一堆的个性化设置,来回的切换,真的很累.我们做软件的,怎么能不去尝试新鲜的呢,毕竟,再难走的路,也有人已经走过,我们只需要Google一下而已. 本篇适用于Idea 14.x 15.x 16.x 这次在使用了2天的IDEA之后,我发现这玩意简直屌爆了! 这次我重新进行征服IDEA过程中,遇到了很多很多的问题,当然,有一句话说的很好,遇到一件很难搞的事情,但凡你有半点犹豫,那就肯

ART:Android 摆脱卡顿的希望?

与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各种阻碍,逐渐壮大起来了. 在此过程中,Google 也在经历着重大的变化.它逐渐从一个只重视数据的公司,转变为一个重视设计和用户体验的公司.从 Android 4.0 开始,Android 拥有了自己的设计语言和应用设计指导.与此同时,Google 也在着手解决卡顿问题.Android 4.1 的“