在javascript中,一般的DOM元素如div,都有onmousedown、onmousemove、onmouseup这3个鼠标事件。

<div id="div1" onmousedown="down();" onmouseup="up();" onmousemove="move();"></div>

当鼠标在div1上移动或者按下左键拖动的时候,都会触发onmousemove事件。怎样区分这2种事件呢?怎样区分鼠标单击弹起和拖动后弹起呢?区分鼠标单击弹起和拖动后弹起。能够注冊onmousedown和onmouseup事件处理函数,在onmousedown中记录鼠标按下的位置,在onmouseup中记录鼠标弹起的位置,然后比較这2个位置的差距。假设距离差距不大,则是鼠标单击后弹起;假设距离相差较大,则是鼠标拖动后弹起。

以下介绍的是使用setTimeout来实现。

<div id="div1" onmousedown="down();" onmouseup="up();" onmousemove="move();" />

<script type="text/javascript">
var timmerHandle = null;
var isDrag = false; function down()
{
console.log("mouse down.");
//由于mouseDownFun每次都会调用的,在这里又一次初始化这个变量
isDrag = false; //延迟100ms
timmerHandle = setTimeout(setDragTrue,200);
} function setDragTrue()
{
isDrag = true;
} function move()
{
//能够使用isDrag来推断是移动还是拖动
} function up()
{ if (!isDrag)
{
//先把doMouseDownTimmer清除。不然200毫秒后setGragTrue方法还是会被调用的
clearTimeout(timmerHandle);
console.log("mouse up.");
}
else
{
isDrag = false;
console.log("draging over.");
}
}
</script>

使用setTimeout这样的是基于时间的做法,使用坐标是基于空间的做法。

javascript中区分鼠标单击和拖动事件的更多相关文章

  1. JavaScript中的鼠标滚轮事件详解

    JavaScript中的鼠标滚轮事件详解/*Firefox注册事件*/ ~~~Firefox: addEventListener('DOMMouseScroll', handler, false)if ...

  2. JavaScript中,有三种常用的绑定事件的方法

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...

  3. 让你高效的理解JavaScript中的同步、异步和事件循环

    "同步请求","异步请求"相信这两词在程序猿的世界中频频出现,到底是词性的妖娆,还是撸代码的基础要求,下面直接分享本人学习的好东西,保证让你深入浅出,爽得不要不 ...

  4. JS - 解决鼠标单击、双击事件冲突问题(原生js实现)

    由于鼠标双击时每一次触发双击事件都会引起两次单击事件和一次单击事件,原生的js不提供专门的双击事件. 因为业务原因,双击和单机都绑定了不同的业务,在双击的时候又触发了单机,影响了页面的正常显示 出现问 ...

  5. 【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应

    转自http://blog.csdn.net/yanfeiouc2009/archive/2010/06/07/5653360.aspx 手头上有个东西要用到单文档,由于想省事,直接用VS2010做了 ...

  6. js区分鼠标单双击 阻止事件冒泡

    function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find(&qu ...

  7. javascript 中 keyup、keypress和keydown事件

    keyup.keypress和keydown事件都是有关于键盘的事件 1. keydown事件在键盘的键被按下的时候触发,keyup 事件在按键被释放的时候触发    keydown.keypress ...

  8. javaScript中获取鼠标位置的理解

    获取鼠标坐标值的总结为了避免混淆知识点 通过<javaScript高级程序设计>查到这些 event.clientX event.clientY event.pageX event.pag ...

  9. js实现鼠标单击或者双击事件

    // timer为全局变量 getClickEmail1(_type) { clearTimeout(this.timer); if (_type == 1) { if (event.detail = ...

随机推荐

  1. 如何把自己的代码发布到npmjs(npm publish)

    来源: https://www.cnblogs.com/calamus/p/8384318.html

  2. 使用nvDXT.exe把图片转换成dds图片【转】

    从nvidia官网下载工具包DDS Utilities [https://developer.nvidia.com/legacy-texture-tools] 转换图片格式需要的工具是 nvdxt.e ...

  3. 项目笔记:导出Excel功能设置导出数据样式

    /** * 导出-新导出 * * @return * @throws IOException */ @OperateLogAnn(type = OperateEnum.EXPORT, hibInter ...

  4. 2017.8.5 Linux达人养成计划 I (上)

    参考来自:http://www.imooc.com/learn/175 1 linux简介 1.1 linux简介 linux分为了内核版本和发行版本. 二者的区别:内核版本是由官方提供,而不同的发行 ...

  5. Efficiently traversing InnoDB B+Trees with the page directory--slot

    Efficientlytraversing InnoDB B+Trees with the page directory 1.the purpose of the page directory As ...

  6. Laravel之备忘项(不定期更新)

    1.自定义字段验证错误信息 $this->validate($request, ['name' => 'required|max:50'], ['name.required' => ...

  7. 【OpenGL 学习笔记01】HelloWorld演示样例

    <<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比較踏实,哈哈. 我的主题是,好记性不如烂笔头. ========== ...

  8. vue 生命周期组件渲染

    1.created 实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调.然而,挂载阶段还没开始,$el 属性目前不可见. 2.mount ...

  9. 初探J2EE

    还记得在技术交流会上八期给我们讲的J2EE,当时就是云里来屋里去.留在自己脑子中的仅仅有两个字"规范",其他的真是一无全部. 可是如今学了后,又在脑子里留下了两个字"规范 ...

  10. Spring学习一----------Spring概况

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring概况 Spring是为了解决企业应用开发的复杂性而创建的. Spring是一种轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. ...