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

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

  思考过程

//当按下的时候改变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

【来自项目的技术点】— 聊聊键盘长按的时候解决卡顿方案相关推荐

  1. 解决 js 长任务导致的页面卡顿(时间分片技术)

    时间分片技术 解决 js 长任务导致的页面卡顿 界面操作使用transform动画会使用GPU,不会让界面卡死 解决 js 长任务导致的页面卡顿 在web界面运行长时间代码时,会造成界面卡死,最新看了 ...

  2. 主界面边框流动效果长时间挂机后会卡顿

    1)主界面边框流动效果长时间挂机后会卡顿 ​2)检测内存是否超过阈值问题 3)堆内存会持续上升,如何用UWA报告来分析 4)关于AssetBundle加密这块,如何重新实现LoadFromFile接口 ...

  3. JavaScript-定时器解决卡顿问题- 键盘控制移动div

    demo: 用键盘上下左右键子,控制div 上下左右移动. 不加定时器的时候会感觉移动的时候有卡顿现象, 可以通过定时器来解决. <!DOCTYPE html> <html lang ...

  4. 樱桃键盘Ubuntu(Linux系统)卡顿延迟解决方案

    最近使用乌班图系统时候,发现自己的樱桃键盘延迟非常严重,按下去要一秒钟以上才有反应.下面介绍一下解决方案 一.打开樱桃官网 官网链接 二.点击右下角客服 和客服说明你的情况.键盘型号,邮箱,然后客服会 ...

  5. 技术实践 | 聊聊网易云信的信令网络库实践

    导读:信令作为实时音视频技术架构中的重要一环,是对建立实时音视频通信起到关键桥梁性的作用. 文|丁永锋 网易云信资深客户端开发工程师 本文将从信令的概念着手,分享在网易云信新一代音视频技术架构下,信令 ...

  6. 阿里云栖开发者沙龙PHP技术专场-聊聊服务稳定性保障这些事

    本文主要带大家了解服务稳定性的重要性和相关策略.策略大概分两部分,第一方面从架构层面介绍保障服务稳定性的常见策略(限流,降级,隔离,超时,重试和集群).第二个方面是从流程方面(code review, ...

  7. 前端技术演进(六):前端项目与技术实践

    这个来自之前做的培训,删减了一些业务相关的,参考了很多资料(参考资料列表),谢谢前辈们,么么哒 ? 任何五花八门的技术,最终还是要在实践中落地.现代的软件开发,大部分讲求的不是高难度高精尖,而是效率和 ...

  8. 基于激光投影技术的虚拟键盘

    今天给大家带来的开源项目是:基于激光投影技术的虚拟键盘 原文链接:https://mp.weixin.qq.com/s/shFAY6kA9EGqWNZB_Wv8PA 直接看图,看了你就明白了!(键盘运 ...

  9. (转)图森技术汇 | 聊聊Anchor的前世今生(下)

    大家好,欢迎回来!我们继续上次的anchor之旅(点击回顾上一篇精彩内容:图森技术汇 | 聊聊Anchor的"前世今生"(上))从今年年初开始,整个detection领域掀起了&q ...

最新文章

  1. C语言----字符串左旋
  2. java面试常问问题(中级及以下工程师)
  3. Django CMS教程一:安装
  4. linux+shell+整数计算器,Shell(())实现对整数进行数学运算
  5. Linux操作系统下软件的安装方法大全
  6. 相机矩阵(Camera Matrix)
  7. Nginx应用场景之负载均衡
  8. 【TSP】基于matlab GUI粒子群算法求解旅行商问题【含Matlab源码 1334期】
  9. 【数据库开发】MySQL修改root密码
  10. 用Java实现一个视频聊天软件
  11. 主流智能家居通信总线、无线、电力载波和以太网的基本介绍
  12. html5 图片合成,H5案例分享:图片合成
  13. 常说的监听某个端口,是什么意思?怎么理解?
  14. 4个让你相见恨晚的电脑操作技巧
  15. linux服务器关机日期,linux服务器last查看关机记录
  16. ng2-ace-editor 在 angular 12+ 高版本中无法经过 Ivy编译问题
  17. android 硬币翻转动画,使用Android标准动画显示正在翻转的硬币的两面
  18. 自动紧急制动(AEB)
  19. Safety-Gym环境配置与安装
  20. Python的序列数据和变量

热门文章

  1. 在ASP.NET网站中实现带列表(其由xml文件控制生成)的视频播放
  2. 4.3.2 用jQuery进行异步加载(2)
  3. 八款JS框架介绍及比较
  4. java实现对properties类型文件的读写
  5. 交换机vlan配置实训心得_交换机VLAN配置实验报告.doc
  6. 深度学习的实用层面 —— 1.8 其它正则化方法
  7. LaTeX——双栏论文插入图片
  8. 基于随机响应机制的本地差分隐私【谷歌】论文笔记
  9. 图 邻接表 建立 深度遍历 广度遍历
  10. Skywalking-12:Skywalking SPI机制