关于解决HTML5画布中长按按键动作不流畅的小技巧

本人在用canvas做个通过按键控制目标移动的效果的时候发现,使用onkeydown事件处理的现象是:长按一个按键先动一下然后停一下,然后按照系统固定的频率重复输出该按键的值(具体没仔细研究),运动效果不尽人意。既然我们想要的效果是长按按键的时候触发事件,松开就结束,那么我们可以为事件添加一个状态,就可以避免这种情况。具体实现如下:

HTML部分

<canvas width="800" height="100" id="canvas"></canvas>  <!--拟设置一个宽800px,高100px的画布-->

JS部分

 1 <script type="text/javascript">
 2       var canvas=document.getElementById(‘canvas‘).getContext(‘2d‘);
 3       var a=50,i=0;//其中a为小球的横坐标,i=0时小球不右移,i=1时右移;
 4       var move=setInterval(function(){
 5         //重绘背景
 6         canvas.fillStyle="white";
 7         canvas.fillRect(0,0,800,100);
 8         //绘制小球
 9         canvas.beginPath();
10         canvas.arc(a,50,50,0,Math.PI*2,false);
11         canvas.fillStyle="black";
12         canvas.closePath();
13         canvas.fill();
14         //设置停止
15         if(a==550){
16           clearInterval(move);
17         }
18         //当i=1时右移
19         if(i==1){
20           a+=5;
21         }
22       },10);
23       //绑定按键事件
24       document.onkeydown=function(event){
25         var e=window.event||arguments[0];
26         if(e.keyCode==39){//方向键→
27           i=1;
28           document.onkeyup=function(){
29             i=0;
30           }
31         }
32       }
33     </script>

当我们按下设定按键之后状态值i等于1,小球的运动跟随定时器周期;当松开按键的时候,状态值i变回0,停止运动。这是嵌套了onkeyup事件,与onkeydown共同间接的控制了小球的运动。

时间: 2024-12-13 20:12:00

关于解决HTML5画布中长按按键动作不流畅的小技巧的相关文章

HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. HTML5 画布上的 Three.js 环境灯光HTML5 Canvas Three.js Ambient Lighting <!DOCTY

HTML5 画布canvas元素

HTML5 画布canvas元素 HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小看了这个画布,它能实现无限的可能性.接下来我们从最简单的部分开始,逐步认识Canvas的强大功能. 1.在页面中添加canvas元素: 默认情况下,Canvas所创建的矩形区域大小为宽300像素,高150像素,不过我们可以使用width和height属性来自定义画布

html5画布

html5画布 Canvas: 什么是 Canvas? canvas 元素用于在网页上绘制图形. HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的方法. 创建 Canvas 元素 向 HTML5 页面添加 canvas 元素. 规定元素的 id.宽度和高度: <canvas id="myCanvas" width="200"

解决HTML5中placeholder属性兼容性的JQuery插件

//调用方法 $(function () {   $(".pHolder").jason(); }); //HTML代码 <input type="text" class="pHolder" placeholder="请输入姓名" /> //jquery插件 ($.fn.jason = function(a) {    var b = {        focus: "black",      

【OneAPM】极客编程挑战#023:使用HTML5画布生成渐变自由落体小球效果

本期挑战 给定如下HTML: <canvas id="gbcanvas" width="350" height="300"></canvas> 阅读如下的相关HTML5画布教程: HTML5画布实现的粒子运动效果 HTML5画布Canvas基础入门 请使用HTML5画布生成一个自由落体效果的渐变小球,效果如下(点击下图查看GIF动画) 渐变色由#dd4814开始, 由#FFFF66结束 提交方式: 录制代码编写过程或最终代

HTML5画布生成的3D飞船舰队效果

在线演示 本地下载 使用HTML5画布2D来模拟3D的空间效果,生成舰队飞行效果,了解怎样开发.请阅读以下代码相关"藐视频": HTML5画布模拟生成3D的舰队飞行效果

运用html5画布画随机三角形(有图有真相)

原文:运用html5画布画随机三角形(有图有真相) 源代码下载地址:http://www.zuidaima.com/share/1550463675124736.htm 今天闲着没事写了一个html5画布的例子,我把这个例子也放在了网上可以在线预览,想了解的牛牛们可以下载代码看看,基本上每句代码我都加了注释的哟.我上张图吧:  在线预览地址: http://tandaly.42t.com/html5/triangle.html

HTML5画布(CANVAS)速查简表

HTML5画布(CANVAS)元素 >HTML5画布(Canvas)元素 <canvas id="myCanvas" width="500" height="300"> 浏览器不支持画布(canvas)时的备案 <canvas id="myCanvas" width="500" height="300"> your browser doesn't suppo

iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. - (IBAction)clickBtn1:(UIbutton *)sender { sender.enabled = NO; doSomething sender.enabled