js实现回放拖拽轨迹从过程上进行分析

Javascript之盒子拖拽(跟随鼠标、边界限定、轨迹回放) 本文通过拖拽案例,实现“跟随鼠标、边界限定、轨迹回放”三大效果; 完整代码中有详尽注释,故不再进行细致讲解; 对于案例中需要注意的重点或易错点问题,会总结在最后。 效果图(仅演示左、上边界限定) 完整代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> ... 阅读详情
今天有点小高兴,csdn博客浏览量过万了,在过去还从来没有过这么高的浏览量呢,不得不说,太多时候还是有些矫情,可看到这些鼓励还是忍不住高兴啊,至少,这样让我有一种行内人员的感觉,吾道不孤啊。效果可以看下具体51搜索展示http://www.51bt.cc,结合Xunsearch全文检索技术,可以达到毫秒级的数据搜索


闲话不多说,继续今天的记录,记录回放拖拽痕迹,先从过程上进行分析:


1、要实现回放拖拽痕迹,则必须先有记录;


2、要记录拖拽痕迹,则必须要实现拖拽;


这个问题前几天曾经做到过,当时实现的也略有瑕疵,但大致的实现方法已经了然于胸,所以今天在实现这个问题的时候速度快了不少,着实高兴了一番,今天再实现了一遍之后理解上又深了一点,那就今天再来记录下;


至于记录拖拽痕迹,这个分析就来长话短说,毕竟做过一次了:


1、确定现在div的位置和状态,保证absolute才能实现拖动;


2、监听鼠标拖动事件(昨天总结的几种鼠标事件);


3、根据相应的鼠标事件,做出相应的响应,在onmousemove拖拽中记录div存在过的点;


4、监听鼠标弹起事件,来结束拖拽事件和点的记录


任然是先来实现下代码(这里将所有代码同时列出,后面逐一分析):


html语言:


<div style="width: 50px;height: 50px;background-color: cyan;display: block;position: absolute;" id="showZone"></div>//这个还是那么熟悉啊 
<a href="#" style="position: absolute;margin-top: 100px;color: yellow;background-color: red;">reback</a>//这个是来回放的javascript部分:


window.onload=function(){ 
var obj=document.getElementById("showZone"); 
var disX=disY=0; 
var dragIf=false; 
var position=[{x:obj.offsetLeft,y:obj.offsetTop}];//这个是实现记录和回放的关键,其它都是基本元素的获取 
var oa=document.getElementsByTagName("a")[0]; 


obj.onmousedown=function(event){ 
var event=event||window.event; 
disX=event.clientX-obj.offsetLeft;//鼠标相对于div边框的距离 
disY=event.clientY-obj.offsetTop; 
dragIf=true;//可以进行拖拽的标志 


position.push({x:obj.offsetLeft,y:obj.offsetTop});//记录从这时候就开始了 
return false; 
}; 
document.onmousemove=function(event){ 


if(!dragIf)return;//这个判断极为重要,只有按下的移动才有效 
var event=event||window.event; 
var nowX=event.clientX-disX;//根据上面记录的鼠标相对div的距离就知道div相对网页的距离了吧 
var nowY=event.clientY-disY; 
var maxX=document.documentElement.clientWidth-obj.offsetWidth;//这里是offsetWidth,是div的宽度,不是offsetLeft 
var maxY=document.documentElement.clientHeight-obj.offsetHeight; 
nowX=nowX<0?0:nowX;//这些判定,只是判断不要出了边界 
nowY=nowY<0?0:nowY; 
nowX=nowX>maxX?maxX:nowX; 
nowY=nowY>maxY?maxY:nowY; 


obj.style.marginTop=obj.style.marginLeft=0; 
obj.style.left=nowX+"px";//不要忘记+“px”,只有style.left/top是有“px”的 
obj.style.top=nowY+"px"; 
position.push({x:nowX,y:nowY});//不停记录啊 
obj.innerHTML="X:"+nowX+"Y:"+nowY;//直观的看到变化 
return false; 
}; 
document.onmouseup=function(){ 
dragIf=false;//不允许再进行拖拽和记录了 
obj.innerHTML="X:"+obj.offsetLeft+"Y:"+obj.offsetTop; 
}; 
oa.onclick = function (){ 
if (position.length == 1) return;//只有一个的时候,说明并未移动 
var timer = setInterval(function (){ 
var oPos = position.pop(); 
oPos ? (obj.style.left = oPos.x + "px", obj.style.top = oPos.y + "px") : clearInterval(timer);//又被这个写法惊艳到 
}, 30); 
return false; 
}; 
};需要注意的关键点,简要说几个:


1、var position数组,点的集合:这个点,是以div的左上角的移动点,也就是说我们记录的移动轨迹实际上就是div左上角的点的集合,offsetLeft为x坐标,offsetTop为y坐标,这个坐标轴你知道怎么画不;


2、程序中出现的几个长度或距离:offsetLeft、clientX、offsetWidth、style.left和document.documentElement.clientWidth等等;


3、push()方法:向数组末尾添加元素,改变数组长度,末尾哦;


4、pop()方法:删除并返回数组的最后一个元素,关键点有两个,其一:返回最后一个元素;其二:删除元素,数组长度变小;


这样我们实现了倒着回放,实现原理就不用多说了吧,如果要是正着回放,我们是不是就要获取并删除数组的第一个值了,哈,试着动手写写看吧。


不得不说还是用鼠标拖起来舒服,键盘移动太不方便了,用鼠标可以肆无忌惮的拖拽啊.....天已入伏,要热,今天倒还好....
VideoLineForJS:VideoLineForJS 视频轴JS版 视频回放轴 海康威视 海康 VideoLineForJS 视频轴JS版 视频回放轴 海康威视 海康 $(function (){ var vL = new VideoLine("videoLine",function(time){ console.log(new Date(time).format("yyyy-MM-dd HH:mm:ss")); }); var data=[{ start:new Date().getTime()-3600*1000*5, end:new Date().getTime()-3600*1000*4-1800*100 },{ start:new Date().getTime()-3600*1000*3, end:new Date().getTime()-3600*10 立即下载

相关推荐

js-mouse-drag:使用浏览器☆(^〜^)练习鼠标拖动

js-鼠标拖动 使用浏览器☆(^〜^)练习鼠标拖动

js实现回放拖拽轨迹-------Day48

那些想明白了就可以不做的事情,往往不做就想不明白,一点点敲,就一点点进步,一直敲,就一直在进步...

麦田里 2451

js仿萤石云的视频回放插件拖动效果-时间标尺timeRuler

js仿萤石云的视频回放插件拖动效果-时间标尺timeRuler csdn地址:https://blog.youkuaiyun.com/chenluliang/article/details/123974475

使用JavaScript和Puppeteer实现滑动验证码识别及自动登录的完整教程

接下来,我们需要获取网页截图并裁剪出验证码图片,包括有缺口和无缺口的图片。确保已安装Node.js和npm,并创建一个空白的Node.js项目。在模拟登录过程中,我们需要输入账户和密码,然后点击滑块验证按钮。console.log('滑动轨迹:', track);const PASSWORD = '你的登录密码';const EMAIL = '你的登录账户';console.log('登录成功');最后,根据计算出的轨迹拖动滑块完成验证。

rrrrroottttttt的博客 577

三、使用HM进行简单的视频隐写demo

三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录

杨酬勤的博客 1795

PICO4 VR开发调试神器:用Live Preview Plugin实现电脑串流,告别反复打包烧录的繁琐流程

本文详细介绍了PICO4 VR开发中如何使用Live Preview Plugin实现电脑串流,显著提升开发效率。通过实时预览和调试功能,开发者可以避免反复打包烧录的繁琐流程,特别适用于Unity环境下的VR应用开发。文章涵盖环境配置、连接设置、实时调试技巧及性能优化方案,是PICO4开发者的必备指南。

weixin_34110970的博客 419

惊讶!!js原生的拖拽居然有两种方法

一.mousedown、mousemove和mouseup 拖着目标元素在页面任意位置 如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒。 1.onmousedown:鼠标按下事件 2.onmousemove:鼠标移动事件 3.onmouseup:鼠标抬起事件 重点: 1、一定要绝对定位,脱离文档流才可以移动。 2、绑定拖拽的元素,移动和鼠标松开后是对document的绑定,因为移动的是整个div。 3、点击:a= 获取当前鼠标坐标、b =div距浏览器距离、c = 鼠标在div内

Fancy_vae的博客 896

深入解析Pytest 底层源码

Pytest 的底层架构是一个基于 pluggy钩子机制的微内核架构。其核心流程是一个固定的链条,链条上的每个环节都通过钩子向外暴露,允许插件介入。这种设计使得 Pytest 极其灵活和强大。启动: 解析配置,加载所有插件(包括核心插件)。收集: 遍历文件系统,发现测试用例,并生成Item对象。执行: 对每个Item,依次执行setup->call->teardown协议。报告: 在整个过程中,通过不同的钩子收集信息,最终生成报告。

monk all the way 619

js拖拽事件详解

js拖拽事件详解

weixin_68658847的博客 6965

KEPServerEX与三菱iQ-R系列PLC通讯

KEPServerEX与三菱iQ-R系列PLC通讯Mitsubishi Ethernet北京东方鼎晨科技有限公司目 录1. 前言2. 三菱PLC端相关设置3. Kepware端相关设置KEPServerEX是美国PTC Kepware公司生产的具有行业性的连接平台,KEPServerEX支持150多种通讯协议,用于向您的所有应用程序提供单一来源的工业自动化数据。该平台的设计使用户能够通过一个直观的用户界面来连接、管理、监视和控制不同的自动化设备和软件应用程序。KEPServerEX利用OPC(自动化产业的互

qq_28768521的博客 8097

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南

本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。

weixin_30733003的博客 688

php移动轨迹,js实现回放拖拽轨迹从过程上进行分析_javascript技巧

今天有点小高兴,csdn博客浏览量过万了,在过去还从来没有过这么高的浏览量呢,不得不说,太多时候还是有些矫情,可看到这些鼓励还是忍不住高兴啊,至少,这样让我有一种行内人员的感觉,吾道不孤啊。闲话不多说,继续今天的记录,记录回放拖拽痕迹,先从过程上进行分析:1、要实现回放拖拽痕迹,则必须先有记录;2、要记录拖拽痕迹,则必须要实现拖拽;这个问题前几天曾经做到过,当时实现的也略有瑕疵,但大致的实现方法已...

weixin_39913422的博客 134

Node-RED系列(二二):使用dashboard搭配echarts制作漂亮的面板

在node-red中dashboard 是一个很常用的模块,其中它有一个chart节点可以用来制作一些图表,比如柱状图,折线图,饼图,但其中的图表并不是很美观,而且可配置项非常的少。 于是就有很多小伙伴找我做一套比较好看的图表面板,在对比了一下几个图表库,我选中了echarts。 不仅美观大方,而且非常容易集成,配置。下面先来看一下我做的效果。这里是直接做了四个折线图,第一个折线图有动态效果,第二个折线图是一个多线条的折线图,第三个折线图是在一个图例显示两个折线图。第二第三都可以用于数据对比。 第四个折线

知无涯 1万+

原生js实现拖拽回放运动轨迹小效果

1.css <style> html,body{overflow:hidden;} body,div,h2,p{margin:0;padding:0;} body{color:#fff;background:#000;font:12px/2 Arial;} p{padding:0 10px;margin-top:10px;} span{color:#ff0;padding-left:5px;} #box{position:absolute

故里的博客 857

ETAS工具导入DBC生成Com协议栈

ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项不管是导入DBC还是arxml,本质上都是为了生成对应的com协议栈,目的是为了减少重复的工作量,所以,前期定义好收发的矩阵很重要,一般导入一次之后,后面就可以按变更点手动更改了。

赞的博客 1713

烧录代码显示:no st-link 和Targrt DLL has been cancelled,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1580

完美拖曳,拖拽沿轨迹回放

完美拖曳,效果如图所示 拖曳,点击a标签,可按刚才的轨迹原路返回 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>完美拖拽</title> <style type="text/css"> ...

weixin_30367543的博客 254

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

高德地图轨迹回放/轨迹播放

前端实现高德地图轨迹回放/轨迹播放

鸡米花的博客 3052

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用百度地图实现车辆轨迹回放

最近在做的项目有个车辆轨迹回放需求,查资料看到可以使用百度地图的路书功能实现,百度路书功能如下。 点击开始按钮,小车会在地图上移动还原历史轨迹。 具体需求就是通过调用后台接口获取到指定车辆的指定时间段的位置信息,将位置信息还原到地图上,点击开始按钮,小车开始在地图上移动,同时添加开始、暂停、停止,地图缩放和速度调整功能。功能按键悬浮在地图左上角。 添加申请到的应用秘钥和路书js文件 <script src="http://api.map.baidu.com/api?v=2.0&amp.

格物穷理 9027

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaScript案例——实现鼠标拖拽回放

鼠标拖动box,点击“点击回放拖动轨迹”可以自动沿着你鼠标拖动的轨迹滑动 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-sc...

wing_annuan的博客 569

js实现鼠标拖拽和原轨迹返回

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拖拽</title> <style type="text/css"> html, body { overflow: hidden; } body, div, ...

crazyFlex的博客 1051
上一篇: jquery 页眉单行信息滚动显示实现思路及代码
下一篇: Javascript字符串对象的常用方法简明版
abdfdgh
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值