区分拖曳(drag)和点击(click)事件
假设页面上有一个a标签:
<a href="http://www.google.com">google</a>
现在需要对这个标签进行拖放操作,会发现当拖曳完成后,该链接也同时被打开了,这并不是期望的结果,因为我们仅仅想将这个标签拖放到另一个位置而已。
最初很自然地想到了用preventDefault来阻止默认行为,可实际操作后发现这种方案不可行。
由于拖曳需要监听三个事件:mousedown、mousemove、mouseup,而点击事件click则包含了mousedown和mouseup,如果阻止了默认的click操作,那么
拖曳也不能正常进行。解决这个问题的关键是区分鼠标是点击还是拖曳,下面是解决方案,为精简代码,用到了jQuery:
var a = $('a'),
flag = 0; //标记是拖曳还是点击 a.bind({
mousedown:function(e) {
flag = 0;
//code...
},
mousemove:function(e) {
flag = 1;
//code...
},
mouseup:function(e) {
if(flag === 0) {//点击
a.unbind();
} else if(flag === 1) {//拖曳
a.bind('click',function(){
return false; //阻止默认行为
});
}
//code...
}
});
通过一个flag变量来区分是点击还是拖曳操作,这样拖曳和点击链接就不冲突了。
区分拖曳(drag)和点击(click)事件的更多相关文章
- jquery点击click事件和blur事件冲突如何解决
最近做了一个查询小功能,input输入框输入文字后,自动列出几条查询结果,可以键盘上下键或鼠标进行查询结果选择,并且点击输入框其他地方要隐藏这个列出的结果. 但比较头疼的是input上添加blur事件 ...
- vue循环出来列表里面的列表点击click事件只对当前列表有效;
<div id="app"> <div class=‘b’ v-for='item in items' @click="toggle(item)&quo ...
- 网页中,鼠标点击与javascript的click事件怎么区分处理
就下面问题发现另一个方式: js代码: <script> //IE if(document.all) { document.getElementById("clickme&quo ...
- JavaScript区分click事件和mousedown(mouseup、mousemove)方法
在前端开发工作中,会遇到这样问题:针对同一个dom元素,即希望为它绑定click事件,又想该元素可以允许拖拽的效果.而使用拖拽的效果,我们一般就会用到mousedown,mousemove和mouse ...
- 点击label时click事件被触发两次的坑
今天帮群里的朋友看一段代码的时候偶然间遇到一个label的坑,点击label的时候,监听的click事件被执行两次: 具体代码如下: <div id="test"> & ...
- [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情 (转载)
当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的—— ...
- html 子元素和父元素都监听了 click 事件,点击子元素时为何先触发的是父元素的 click 事件?
先上一段代码,点击子元素时先触发的是父元素的 click 事件 <html> <head> <script type="text/javascript" ...
- 在vue中无论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去
在vue中如论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去,以前都是可以的,想着唯一不同的场景就是因为运用了scroll组件(https://ustbhua ...
- safari浏览器click事件要点击两次才有响应出现闪烁
闪烁问题 由于在iOS Safari上click事件存在300ms响应延时,所以为touch事件添加样式,会和click事件默认样式叠加而产生闪烁问题. 因为ios safari浏览器中对触摸事件的响 ...
随机推荐
- 【Luogu】P2709小B的询问(莫队算法)
题目链接 md,1A率等于0. 烦死. 终于搞到一道莫队了qwq. 先对区间分块再按照块编号为第一关键字,右端点为第二关键字排序,然后每次端点移动1乱搞. 然后……就wa了. 然后有很多细节需要注意q ...
- ACM程序设计选修课——1031: Hungar的得分问题(二)(杨辉三角+二进制转换)
1031: Hungar的得分问题(二) 时间限制: 1 Sec 内存限制: 64 MB 提交: 15 解决: 10 [提交][状态][讨论版] 题目描述 距离正式选秀时间越来越近了,今天Hung ...
- win10经验总结
1.修改win10 桌面图标快捷方式路径 C:\Users\qbfe\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tool ...
- 刷题总结——Cut the Sequence(POJ 3017 dp+单调队列+set)
题目: Description Given an integer sequence { an } of length N, you are to cut the sequence into sever ...
- 面试题之redis单线程为什么性能很高
原因是,使用了多路复用技术. 什么是多路复用技术:多个客户端使用一个信道,并且通过一个信道进行传输
- “百度杯”CTF比赛 九月场_Test(海洋cms前台getshell)
题目在i春秋ctf训练营 又是一道cms的通用漏洞的题,直接去百度查看通用漏洞 这里我使用的是以下这个漏洞: 海洋CMS V6.28代码执行0day 按照给出的payload,直接访问url+/sea ...
- 我的js为什么会触发两次
$(function() { $(".show").off("click").on("click",function(e){ e.preve ...
- 洛谷—— P3807 【模板】卢卡斯定理
https://www.luogu.org/problemnew/show/3807 题目背景 这是一道模板题. 题目描述 给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105) ...
- House Robber(动态规划)
思路: 代码: class Solution { public: int rob(vector<int> &num) { ; int size=num.size(); ) ]; v ...
- Maven依赖机制理解
假设一个项目需要用到日志组件Log4j,那么有如下方式添加这个组件. 一.传统方式: 1.访问官网https://logging.apache.org/log4j/2.x/download.html, ...