森森水族,太原seo结算,wordpress 代码分享,工业互联网平台架构图文章目录 1. 为什么鼠标单击的时候触发了mousemove事件#xff1f;明明鼠标没有移动2. 鼠标拖拽元素怎么能不触发单击事件#xff1f;怎么处理鼠标在元素内的相对定位#xff0c;而不是每次定位到左上角#xff1f;方式一#xff1a;拖拽的元素没有注册click监听就不会触发… 文章目录 1. 为什么鼠标单击的时候触发了mousemove事件明明鼠标没有移动2. 鼠标拖拽元素怎么能不触发单击事件怎么处理鼠标在元素内的相对定位而不是每次定位到左上角方式一拖拽的元素没有注册click监听就不会触发单击事件绑定的函数方式二通过鼠标是否发生移动判断当前元素是需要移动还是需要单击方式三考虑鼠标在元素内相对定位问题鼠标点击位置就是拖拽位置 3. 鼠标拖拽元素怎么能不触发选中文本方式一鼠标按下时阻止默认事件e.preventDefault()不触发选中文本方式二鼠标按下时修改当前元素style样式鼠标抬起再取消 参考链接 鼠标拖拽需要注意什么问题 鼠标拖拽会依次触发mousedown mousemove mouseup click事件。很多时候在一个元素既需要拖拽又需要单击的时候应该怎么避免在拖拽时不触发单击事件不触发文本选中问题
1. 为什么鼠标单击的时候触发了mousemove事件明明鼠标没有移动 2. 鼠标拖拽元素怎么能不触发单击事件怎么处理鼠标在元素内的相对定位而不是每次定位到左上角
方式一拖拽的元素没有注册click监听就不会触发单击事件绑定的函数
示例代码
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title测试拖拽/titlestylebody{background-color: #f5f5f5;}#triggerDiv {position: fixed;left: 0px;top: 0px;width: 100px;height: 100px;background-color: red;position: absolute;text-align: center;line-height: 100px;vertical-align: middle;cursor: pointer;border-radius: 50%;}/style
/head
bodydiv idtriggerDiv拖拽/div
/bodyscriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {isMouseDown trueconsole.log(mousedown:, isMouseDown)})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove:, isMouseDown)if (isMouseDown) {triggerELe.style.left e.clientX pxtriggerELe.style.top e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {isMouseDown falseconsole.log(mouseup:, isMouseDown)})// 鼠标离开事件顺序 mouseout mouseleave// triggerELe.addEventListener(mouseout, function(e) {// isMouseDown false// console.log(mouseout:, isMouseDown)// })// triggerELe.addEventListener(mouseleave, function(e) {// isMouseDown false// console.log(mouseleave:, isMouseDown)// })// 给元素绑定了单击事件// triggerELe.addEventListener(click, function(e) {// console.log(click)// })
/script
/html通过对比是否绑定单击事件判断单击是否被触发 方式二通过鼠标是否发生移动判断当前元素是需要移动还是需要单击
如果mousemove事件没有被触发那mouseup发生时当前元素应该执行单击事件 示例代码
scriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false // 鼠标是否按下let isMouseMove false // 鼠标是否发生移动// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {console.log(mousedown)isMouseDown trueisMouseMove false})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove)isMouseMove trueif (isMouseDown) {triggerELe.style.left e.clientX pxtriggerELe.style.top e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {console.log(mouseup)isMouseDown falseif (isMouseMove) {console.log(鼠标移动了)} else {console.log(鼠标没有移动执行单击事件)}})
/script通过判断是否触发mousemove事件决定是否执行单击事件 如果mousedown和mouseup事件发生后鼠标位置没有改变应该执行单击事件 示例代码
scriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false // 鼠标是否按下// 鼠标移动相关变量 let beforeX 0 // 鼠标按下时的x坐标let beforeY 0 // 鼠标按下时的y坐标let afterX 0 // 鼠标抬起时的x坐标let afterY 0 // 鼠标抬起时的y坐标// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {console.log(mousedown)isMouseDown truebeforeX e.offsetXbeforeY e.offsetY})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove)if (isMouseDown) {triggerELe.style.left e.clientX pxtriggerELe.style.top e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {console.log(mouseup)isMouseDown falseafterX e.offsetXafterY e.offsetYconsole.log(beforeX:, beforeX, beforeY:, beforeY, afterX:, afterX, afterY:, afterY)// 前后坐标相等说明没有移动执行单击事件if (beforeX ! afterX || beforeY ! afterY) {console.log(鼠标移动了)} else {console.log(鼠标没有移动执行单击事件)}})// // 给元素绑定了单击事件// triggerELe.addEventListener(click, function(e) {// console.log(click)// })
/script思路如果鼠标前后坐标没有发生变化执行单击事件 注由于页面缩放问题可能会出现鼠标没有移动但是前后坐标不一致的问题。
方式三考虑鼠标在元素内相对定位问题鼠标点击位置就是拖拽位置
scriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false // 鼠标是否按下// 鼠标移动相关变量 let beforeX 0 // 鼠标按下时的x坐标let beforeY 0 // 鼠标按下时的y坐标let afterX 0 // 鼠标抬起时的x坐标let afterY 0 // 鼠标抬起时的y坐标let initX 0 // 鼠标按下时的x坐标let initY 0 // 鼠标按下时的y坐标// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {console.log(mousedown)isMouseDown truebeforeX e.offsetXbeforeY e.offsetY// 鼠标按下时的坐标initX e.offsetXinitY e.offsetY})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove)if (isMouseDown) {triggerELe.style.left (e.clientX - initX) pxtriggerELe.style.top (e.clientY - initY) px// 鼠标移动时的坐标afterX e.offsetX pxafterY e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {console.log(mouseup)isMouseDown falseafterX e.offsetXafterY e.offsetYconsole.log(beforeX:, beforeX, beforeY:, beforeY, afterX:, afterX, afterY:, afterY)// 前后坐标相等说明没有移动执行单击事件if (beforeX ! afterX || beforeY ! afterY) {console.log(鼠标移动了)} else {console.log(鼠标没有移动执行单击事件)}})// // 给元素绑定了单击事件// triggerELe.addEventListener(click, function(e) {// console.log(click)// })
/script3. 鼠标拖拽元素怎么能不触发选中文本
方式一鼠标按下时阻止默认事件e.preventDefault()不触发选中文本
scriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false // 鼠标是否按下// 鼠标移动相关变量 let beforeX 0 // 鼠标按下时的x坐标let beforeY 0 // 鼠标按下时的y坐标let afterX 0 // 鼠标抬起时的x坐标let afterY 0 // 鼠标抬起时的y坐标let initX 0 // 鼠标按下时的x坐标let initY 0 // 鼠标按下时的y坐标// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {console.log(mousedown)isMouseDown truebeforeX e.offsetXbeforeY e.offsetY// 鼠标按下时的坐标initX e.offsetXinitY e.offsetY// 阻止默认事件e.preventDefault()})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove)if (isMouseDown) {triggerELe.style.left (e.clientX - initX) pxtriggerELe.style.top (e.clientY - initY) px// 鼠标移动时的坐标afterX e.offsetX pxafterY e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {console.log(mouseup)isMouseDown falseafterX e.offsetXafterY e.offsetYconsole.log(beforeX:, beforeX, beforeY:, beforeY, afterX:, afterX, afterY:, afterY)// 前后坐标相等说明没有移动执行单击事件if (beforeX ! afterX || beforeY ! afterY) {console.log(鼠标移动了)} else {console.log(鼠标没有移动执行单击事件)}})// // 给元素绑定了单击事件// triggerELe.addEventListener(click, function(e) {// console.log(click)// })
/script方式二鼠标按下时修改当前元素style样式鼠标抬起再取消
scriptlet triggerELe document.getElementById(triggerDiv)let isMouseDown false // 鼠标是否按下// 鼠标移动相关变量 let beforeX 0 // 鼠标按下时的x坐标let beforeY 0 // 鼠标按下时的y坐标let afterX 0 // 鼠标抬起时的x坐标let afterY 0 // 鼠标抬起时的y坐标let initX 0 // 鼠标按下时的x坐标let initY 0 // 鼠标按下时的y坐标// 鼠标按下triggerELe.addEventListener(mousedown, function(e) {console.log(mousedown)isMouseDown truebeforeX e.offsetXbeforeY e.offsetY// 鼠标按下时的坐标initX e.offsetXinitY e.offsetY// 不选中文字triggerELe.style.userSelect none// 添加css// css// .no-select {// user-select: none// }})// 鼠标移动triggerELe.addEventListener(mousemove, function(e) {console.log(mousemove)if (isMouseDown) {triggerELe.style.left (e.clientX - initX) pxtriggerELe.style.top (e.clientY - initY) px// 鼠标移动时的坐标afterX e.offsetX pxafterY e.clientY px}})// 鼠标抬起triggerELe.addEventListener(mouseup, function(e) {console.log(mouseup)isMouseDown falseafterX e.offsetXafterY e.offsetYconsole.log(beforeX:, beforeX, beforeY:, beforeY, afterX:, afterX, afterY:, afterY)// 前后坐标相等说明没有移动执行单击事件if (beforeX ! afterX || beforeY ! afterY) {console.log(鼠标移动了)// 移除css// .no-select {// user-select: text// }triggerELe.style.userSelect text} else {console.log(鼠标没有移动执行单击事件)}})// // 给元素绑定了单击事件// triggerELe.addEventListener(click, function(e) {// console.log(click)// })
/script参考链接
可拖动DIV层的实现方法_可拖动的div-CSDN博客 Javascript设置拖拽时不触发点击事件_鼠标拖动列表,会触发列表项的点击事件,如何阻止-CSDN博客 文章转载自: http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.wdxr.cn.gov.cn.wdxr.cn http://www.morning.jhwqp.cn.gov.cn.jhwqp.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.gxcym.cn.gov.cn.gxcym.cn http://www.morning.qqfcf.cn.gov.cn.qqfcf.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.snmsq.cn.gov.cn.snmsq.cn http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn http://www.morning.rtzd.cn.gov.cn.rtzd.cn http://www.morning.rqqn.cn.gov.cn.rqqn.cn http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.bwfsn.cn.gov.cn.bwfsn.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.mnsts.cn.gov.cn.mnsts.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn http://www.morning.smspc.cn.gov.cn.smspc.cn http://www.morning.dbddm.cn.gov.cn.dbddm.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.rntby.cn.gov.cn.rntby.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.pznqt.cn.gov.cn.pznqt.cn http://www.morning.gjwkl.cn.gov.cn.gjwkl.cn http://www.morning.rqgbd.cn.gov.cn.rqgbd.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.yslfn.cn.gov.cn.yslfn.cn http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn http://www.morning.xbkcr.cn.gov.cn.xbkcr.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.mbaiwan.com.gov.cn.mbaiwan.com http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn http://www.morning.wqcz.cn.gov.cn.wqcz.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.jydhl.cn.gov.cn.jydhl.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.tdqhs.cn.gov.cn.tdqhs.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.mpflb.cn.gov.cn.mpflb.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.lbfgq.cn.gov.cn.lbfgq.cn http://www.morning.snxbf.cn.gov.cn.snxbf.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.gjqnn.cn.gov.cn.gjqnn.cn http://www.morning.clwhf.cn.gov.cn.clwhf.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn