记录鼠标的轨迹并回放的js代码

遇到的问题:
Question
①:mousemove事件中,移动方法中会被记录很多的left和top,我只需要大概的几组数据就行,不需要那么多;
Question
②:回放的时候,在for循环里执行太快了,导致的效果就是直接看到开始跟结束位置,我想放慢中间的过程;搞了一个延迟的函数,但是还是没有实质性解决。

慢慢慢慢拖动小方块到一个新位置,然后松开鼠标,

先点击“复位”,再点击“回放”查看所经过的路径,
只有一次机会哦 - -|||
循环内延迟的部分代码:


代码如下:

//延迟方法
sleep: function(n) {
var start = new Date().getTime();
while (true)
if (new Date().getTime() - start > n)
break;
},
//回看轨迹记录
backTrack: function() {
var oSlippage = document.getElementById("slippage");
var len = this.X.length;
for (var i = 0; i < len; i++) {
oSlippage.style.left = this.X[i] - this.relativeX;
oSlippage.style.top = this.Y[i] - this.relativeY;
//延迟循环方法
this.sleep(10);
}
}

还是没有达到慢慢回放的效果,待解决。。。
啊哈,今早解决了~!
不用for循环,通过定时器运用数组的下标来不断改变小方块的left和top

定时器结合数组下标


代码如下:

//延迟方法
sleep: function(n) {
//var start = new Date().getTime();
//while (true)
// if (new Date().getTime() - start > n)
// break;
var oSlippage = document.getElementById("slippage");
oSlippage.style.left = this.X[this.iNum] - this.relativeX; //iNum为数组下标
oSlippage.style.top = this.Y[this.iNum] - this.relativeY;
MOUSETRACKRECORD.iNum++;
//如果下标大于了他的长度就停止回放
if (this.iNum > this.X.length - 1) {
clearInterval(this.timeID);
}
},
//回看轨迹记录
backTrack: function() {
//var oSlippage = document.getElementById("slippage");
//var len = this.X.length;
//for (var i = 0; i < len; i++) {
// oSlippage.style.left = this.X[i] - this.relativeX;
// oSlippage.style.top = this.Y[i] - this.relativeY;
// //延迟循环方法
// this.sleep(10);
//}
this.timeID = setInterval("MOUSETRACKRECORD.sleep()", 10);
}

演示效果:

MOUSETRACKRECORD = {
oSlippage: null, //小方块
X: [], //X坐标
Y: [], //Y坐标
clickX: 0, //鼠标点击时的X坐标
clickY: 0, //鼠标点击时的Y坐标
relativeX: 0, //鼠标相对方块的X坐标
relativeY: 0, //鼠标相对方块的Y坐标
isCanMove: false, //是否可以移动
iNum: 0, //坐标XY数组的下标
timeID: null, //回放定时器
//鼠标按下的时候
mouseDown: function() {
//鼠标点击时
this.clickX = event.clientX;
this.clickY = event.clientY;
//获取小方块
var oSlippage = document.getElementById("slippage");
//获取div当前坐标(左边界和上边界)
var divX = parseInt(oSlippage.style.left) || 0;
var divY = parseInt(oSlippage.style.top) || 0;
//获取鼠标相对div的坐标
this.relativeX = this.clickX - divX;
this.relativeY = this.clickY - divY;
//设置可以移动
this.isCanMove = true;
},
//鼠标移动的时候
mouseMove: function() {
if (this.isCanMove) {
var oSlippage = document.getElementById("slippage");
oSlippage.style.left = event.clientX - this.relativeX;
oSlippage.style.top = event.clientY - this.relativeY;
//移动就记录下鼠标的轨迹
MOUSETRACKRECORD.startRecord(event.clientX, event.clientY);
}
},
//鼠标松开的时候
mouseUp: function() {
//取消小方块的mousemove事件
var oSlippage = document.getElementById("slippage");
oSlippage.onmousemove = null;
this.isCanMove = false;
//停止记录
clearInterval(this.timeID);
},
//开始记录鼠标移动过的坐标
startRecord: function(x, y) {
this.X.push(x);
this.Y.push(y);
},
//点击停止按钮,回到初始状态
overTrack: function() {
var oSlippage = document.getElementById("slippage");
oSlippage.style.left = 50;
oSlippage.style.top = 50;
},
//延迟方法
sleep: function(n) {
//var start = new Date().getTime();
//while (true)
// if (new Date().getTime() - start > n)
// break;
var oSlippage = document.getElementById("slippage");
oSlippage.style.left = this.X[this.iNum] - this.relativeX;
oSlippage.style.top = this.Y[this.iNum] - this.relativeY;
MOUSETRACKRECORD.iNum++;
//如果下标大于了他的长度就停止回放
if (this.iNum > this.X.length - 1) {
clearInterval(this.timeID);
}
},
//回看轨迹记录
backTrack: function() {
//var oSlippage = document.getElementById("slippage");
//var len = this.X.length;
//for (var i = 0; i

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • 记录鼠标的轨迹并回放的js代码

    遇到的问题: Question①:mousemove事件中,移动方法中会被记录很多的left和top,我只需要大概的几组数据就行,不需要那么多: Question②:回放的时候,在for循环里执行太快了,导致的效果就是直接看到开始跟结束位置,我想放慢中间的过程:搞了一个延迟的函数,但是还是没有实质性解决. 慢慢慢慢拖动小方块到一个新位置,然后松开鼠标, 先点击"复位",再点击"回放"查看所经过的路径, 只有一次机会哦 - -||| 循环内延迟的部分代码: 复制代码

  • 20行JS代码实现网页刮刮乐效果

    分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码 效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) <canvas id="canvas" width="400" height="300"></canvas> </body> 没什么要特别注意的 为了效果加了些CSS样式 CSS部分 <style type=&

  • js实现鼠标点击左上角滑动菜单效果代码

    本文实例讲述了js实现鼠标点击左上角滑动菜单效果代码.分享给大家供大家参考.具体如下: 这里需要鼠标点击激活的网页左上角菜单,不点击不会滑出来,可以改造成二级菜单. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-click-hd-show-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo

  • JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法

    多网站的需要填写的文本框在默认状态下都会给出一个默认的提示语言,当鼠标点击此文本框的时候能够将里面的默认文本清除,当删除输入的文本且焦点离开文本框的时候再将默认的文本写入文本框. 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.jb51.net/&quo

  • js鼠标点击图片切换效果实现代码

    本文实例讲述了js鼠标点击图片切换效果实现代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: html代码: <div id="menuWrapper" class="menuWrapper bg1"> <ul class="menu" id="menu"> <li class="bg1" style="background-position:

  • 图片旋转、鼠标滚轮缩放、镜像、切换图片js代码

    本文实例为大家展示了图片旋转.鼠标滚轮缩放.镜像.切换图片多重效果,提供了详细的代码,分享给大家供大家参考,具体内容如下 具体代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <title>图片旋转,鼠标滚轮缩放,镜像,切换图片</title> <meta charset="utf-8" /> <!--<script type="

  • 分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式

    废话不多说了,直接给大家贴关键代码了,具体代码如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t

  • JS鼠标3次点击事件实现代码及扩展思路

    这几天看了一下JavaScript高级程序设计中的Dom事件相关内容,同时看到网上有关鼠标多次点击事件,鼠标事件是简单.常用的事件之一,于是便针对点击事件进行一些小的扩展和实现,增强对Dom事件的进一步理解.其中的实现和思路是自己总结的,有什么不对的地方还请大神们交流指正. 1.制作一个通用的事件处理模块(原生实现) 以下实现基于AMD定义模块方式: /** * 浏览器兼容事件处理组件 */ define(function () { var EventUtil = { // 添加事件监听 add

  • 纯JS代码实现隔行变色鼠标移入高亮

    在前端开发中经常见到隔行变色鼠标移入高亮显示的效果,下面小编给大家分享基于js代码实现的隔行变色鼠标移入高亮效果,废话不多说了,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #table { width: 400px; bor

  • 基于JS代码实现当鼠标悬停表格上显示这一格的全部内容

    想实现这样一个功能,就是在一个表格中,由于很多字过多,所以用文字溢出的方法处理了,但是这样就无法看到表格中具体的内容呢.想实现当鼠标移上去的时候可以显示这一行被隐藏的内容.当然这个网上有很多插件,但是我没有用,还是自己写了一个. css部分 <style> #showbox { width: 150px; min-height: 50px; font: 100 14px/1 "微软雅黑"; border: 1px solid #3c8dbc; display: none;

随机推荐