区分拖曳(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浏览器中对触摸事件的响 ...
随机推荐
- UVa——400Unix ls(字典序文本处理输出iomanip)
Unix ls Time Limit: 3000MS ...
- CentOS7 修改时区、charset
1. 修改时区 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 经过这番修改后,JAVA启动后自动使用了Shanghai作为时区. 2. ...
- net2:DropDownList的使用
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- Atcoder CODE FESTIVAL 2017 qual B D - 101 to 010 dp
题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\(' ...
- Ubuntu16 编译源码出错 unsupported reloc 43
错误如下 prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6//x86_64-linux/include/c++/4.6/bits/basi ...
- Vue中的computed 解读
computed相当于属性的一个实时计算,如果实时计算里关联了对象,那么当对象的某个值改变的时候,同事会出发实时计算.比如: <body id="content"> & ...
- hdu 5690(模运算)
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- python学习之-- 故障记录汇总
以下为我编程期间遇到的错误并进行记录,起始时间2017-6-21 时间:2018/11/21问题现象:ajax 执行异步提交后,在访问日志看出现了2次post执行分析:默认ajax提交是执行一次,然后 ...
- CCCC L2-024 部落【并查集】
https://www.patest.cn/contests/gplt/L2-024 首先在一行中输出这个社区的总人数.以及互不相交的部落的个数.随后对每一次查询,如果他们属于同一个部落,则在一行中输 ...
- Java集合——概述
Java集合——概述 摘要:本文主要介绍了几种集合类型以及有关的一些知识点. 集合类图 类图 类图说明 所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collecti ...