摘要:一直觉得拖拽能与用户互动,像我们平常的拖动排序弹出框拖动移动等用户自定义的动作都是拖拽实现的,它是一个比较有意思的角儿,今天我好好总结了一下下。
一直觉得拖拽能与用户互动,像我们平常的拖动排序、弹出框拖动移动等用户自定义的动作都是拖拽实现的,它是一个比较有意思的角儿,今天我好好总结了一下下。
拖拽动作:按下、移动、松开
1、鼠标按下
obj.onmousedown = function(e){ }
2、鼠标移动
obj.onmousemove = function(e){ }
3、鼠标松开
obj.onmouseup = function(e){ }
原理:这里我找到一个图片很形象,我决定bia给大家看看,主要就是鼠标移动的坐标和元素坐标之间的关系~
移动后元素的X坐标=鼠标移动后的X坐标 - 鼠标按下的X坐标 + 元素的初始X坐标 移动后元素的Y坐标=鼠标移动后的Y坐标 - 鼠标按下的Y坐标 + 元素的初始Y坐标
说白了就是求元素移动的坐标:
这里的中心是鼠标[见方法一]
元素移动后的x、y坐标=鼠标移动后按下的偏移量+元素的初始坐标
也可以这样,原理是相通的:这里的中心是元素[见方法二]
元素移动后的x、y坐标=鼠标移动后的x、y坐标-(鼠标按下的xy坐标-元素初始坐标)
*注意:元素拖拽得定位一下,才能脱离文档流* 推荐法二
方法一:
var mouseDownX,mouseDownY,initX,initY,flag = false; obj.onmousedown = function(e) { //鼠标按下时的鼠标所在的X,Y坐标 mouseDownX = e.pageX; mouseDownY = e.pageY; //初始位置的X,Y 坐标 initX = obj.offsetLeft; initY = obj.offsetTop; //表示鼠标已按下 flag = true; } document.onmousemove = function(e) { // 确保鼠标已按下 if(flag) { var mouseMoveX = e.pageX,mouseMoveY = e.pageY; this.style.left = parseInt(mouseMoveX) - parseInt(mouseDownX) + parseInt(initX) + "px"; this.style.top = parseInt(mouseMoveY) - parseInt(mouseDownY) + parseInt(initY) + "px"; } } document.onmouseup = function() { //标识已松开鼠标 flag = false; }
方法二:
oDiv.onmousedown=function(ev){ var x=ev.pageX-oDiv.offsetLeft; var y=ev.pageY-oDiv.offsetTop; document.onmousemove=function(ev){ var l=ev.pageX-x; var t=ev.pageY-y; oDiv.style.left=l+"px"; oDiv.style.top=t+"px"; } document.onmouseup=function () { document.onmousemove=null; document.onmouseup=null; } }
移动端不是mousedown、mousemove和mouseup
相应的应是touchstart、touchmove和touchend
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86800.html
摘要:在中,拖放是标准的一部分,任何元素都能够拖放。如果需要设置允许放置,我们必须阻止对元素的默认处理方式方法。 系列文章 关于前端上传文件全面基础扫盲贴(零)关于前端上传文件全面基础扫盲贴(一) ----- XMLHttpRequest关于前端上传文件全面基础扫盲贴(二) ----- File关于前端上传文件全面基础扫盲贴(三) ----- FormData关于前端上传文件全面基础扫盲贴(...
摘要:页面布局是流程操作栏,工具箱流程组件,绘图区。关于这部分可以了解一下的流程拖拽方法,这里推荐大神张鑫旭的文章有了流程的模块,当然还需要线路的指向。 目前有很多公司都有工作流的产品。关于工作流的架构大致都是将工作流制定一个规范、标准数据模板,后台程序再解析这些数据模板。一些公司的工作流是数据库配置的,其实推荐将工作流可视化,这样就会节省人力和物力来读懂这些数据。关于流程可视化必然想到了在...
摘要:页面布局是流程操作栏,工具箱流程组件,绘图区。关于这部分可以了解一下的流程拖拽方法,这里推荐大神张鑫旭的文章有了流程的模块,当然还需要线路的指向。 目前有很多公司都有工作流的产品。关于工作流的架构大致都是将工作流制定一个规范、标准数据模板,后台程序再解析这些数据模板。一些公司的工作流是数据库配置的,其实推荐将工作流可视化,这样就会节省人力和物力来读懂这些数据。关于流程可视化必然想到了在...
摘要:写在最前本次的分享是一个基于标签实现的一个自定义视频播放器。其中实现了播放暂停进度拖拽音量控制及全屏等功能。核心思路我相信一定会有些没有接触过制作自定义播放器的童鞋对于标签的认识会停留在此。整个视频播放器的基础功能实现的还算完善。 写在最前 本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度拖拽、音量控制及全屏等功能。欢迎关注我的博客,不定期更新中—...
阅读 1878·2021-11-25 09:43
阅读 1387·2021-11-22 14:56
阅读 3257·2021-11-22 09:34
阅读 1978·2021-11-15 11:37
阅读 2211·2021-09-01 10:46
阅读 1369·2019-08-30 15:44
阅读 2277·2019-08-30 13:15
阅读 2374·2019-08-29 13:07