mousemove事件,鼠标移动过快时,无法全部响应
2015-09-01 18:44
495 查看
问题描述:
项目中,运用mousemove来实现绘制圆形时,发现鼠标移动速度过快时,绘制的圆形,不能连接一起,中间出现断点,无法形成一条完整的路径。
问题分析:
效果图:
![](http://img.blog.csdn.net/20150901183510237)
鼠标移动过快时
![](http://img.blog.csdn.net/20150901183909954)
鼠标移动缓慢时
经过如上代码分析,发现当鼠标移动过快时,console.log(“move”)执行的次数很少;当鼠标移动足够缓慢时,执行次数鼠标移动的像素数近似(这正好验证了,当每移动一个像素时,就会触发mousemove事件)。
原因:鼠标移动时,不会存储所有的移动信息,而是通过取插值的方法取得鼠标位置信息,否则,系统会被鼠标移动拖垮。所以就会出现,移动过快时,出现断点的问题。
解决方案:
鼠标移动过快时,不能做到移动一个像素,响应一次mousemove事件,所以导致,绘制的圆形不连续。我们换种思路,直接在两次响应mousemove事件时,绘制直线,正好可以连接中间的断点。
为了美观,可以利用lineCap属性,可以保证直线两端为圆角,如下所示:
![](http://img.blog.csdn.net/20150903133202886)
这样我们的问题就解决了
演示效果:http://zhaoshaobang.github.io/blog/lottery/
项目中,运用mousemove来实现绘制圆形时,发现鼠标移动速度过快时,绘制的圆形,不能连接一起,中间出现断点,无法形成一条完整的路径。
问题分析:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件</title> <style type="text/css"> *{ margin: 0; padding: 0; } #content{ width: 200px; height: 200px; border: 1px solid #ccc; background-color: blue; margin: 0 auto; } </style> </head> <body> <div id="content"></div> <script type="text/javascript"> var box=document.getElementById("content"); var isMouseDown=false; var t=0; box.addEventListener("mousemove",function(e){ if(isMouseDown){ console.log("move"); /*t++; console.log(t);*/ } }); box.addEventListener("mousedown",function(e){ isMouseDown=true; }); document.addEventListener("mouseup",function(e){ isMouseDown=false; }); </script> </body> </html>
效果图:
鼠标移动过快时
鼠标移动缓慢时
经过如上代码分析,发现当鼠标移动过快时,console.log(“move”)执行的次数很少;当鼠标移动足够缓慢时,执行次数鼠标移动的像素数近似(这正好验证了,当每移动一个像素时,就会触发mousemove事件)。
原因:鼠标移动时,不会存储所有的移动信息,而是通过取插值的方法取得鼠标位置信息,否则,系统会被鼠标移动拖垮。所以就会出现,移动过快时,出现断点的问题。
解决方案:
鼠标移动过快时,不能做到移动一个像素,响应一次mousemove事件,所以导致,绘制的圆形不连续。我们换种思路,直接在两次响应mousemove事件时,绘制直线,正好可以连接中间的断点。
为了美观,可以利用lineCap属性,可以保证直线两端为圆角,如下所示:
ctx.beginPath(); ctx.lineCap="round"; ctx.moveTo(20,40); ctx.lineTo(200,40); ctx.stroke();
这样我们的问题就解决了
演示效果:http://zhaoshaobang.github.io/blog/lottery/
相关文章推荐
- 一个酷炫实用的下拉刷新开源库
- 黑马程序员——41,打印流,合并流,对象序列化,管道流,RandomAccessFile
- 打包volley
- ssh+mysql 登陆 及增删改成
- iOS: UIWebView 中不加载图片(即浏览器常见的无图模式)
- linux常用命令(13):less命令
- POJ 题目1436 Horizontally Visible Segments(线段树染色覆盖求相互是否可见)
- 黑马程序员——面向对象(数组工具类+单例设计模式)-第16天
- oracle OCCI编程
- OpenSSL中调用OpenSSL_add_all_algorithms内存泄漏之问题调查
- NYOJ 860 又见01背包(01背包转移方程巧用)
- hdu 3944 DP? lucas定理
- 【AngularJS】—— 12 独立作用域
- JQuery中的DOM操作
- nio文件通道
- leetcode 2: Add Two Numbers
- JAVA之编码/解码 -- 各种环境下可能会发生的乱码问题及解决方案
- Pdf格式文件怎么修改
- poj 1286 Necklace of Beads (polya(旋转+翻转)+模板)
- 周记——20150831