鼠标事件对象几个重要的属性:

clientX 窗口坐标,加上垂直滚动可以得到文档纵坐标

clientY 窗口坐标,加上水平滚动可以得到文档横坐标

altKey boolean值,点击时是否按下了alt键

ctrlKey boolean值,点击时是否按下了ctrl键

metaKey boolean值,点击时是否按下了meta键

shiftKey boolean值,点击时是否按下了shift键

button 点击时按下的是鼠标的哪个键(不同浏览器的赋值不同,不易使用)

收录拖动文档元素的js

/**
 * 拖动绝对定位的HTML元素
 * 该方法依赖之前收集的getScrollOffset方法
 */
function drag( elementToDrag, event ){
    // 初始化鼠标位置,转换为文档坐标
    var scroll = getScrollOffset(),
        startX = event.clientX + scroll.x,
        startY = event.clientY + scroll,y,
        // 这里假设了elementToDrag的offsetParent是文档的body元素,似乎会有问题
        origX = elementToDrag.offsetLeft,
        origY = elementToDrag.offsetTop,
        deltaX = startX - origX,
        deltaY = startY - origY;

if( document.addEventListener ){
        document.addEventListener( "mousemove", movehandler, true );
        document.addEventListener( "mouseup", upHandler, true );
    }else if( document.attachEvent ){
        // IE的事件模型中,捕获事件是通过调用元素上的setCapture()实现的
        elementToDrag.setCapture();
        elementToDrag.attachEvent( "onmousemove", moveHandler );
        elementToDrag.attachEvent( "onmouseup", upHandler );
        // 作为mouseup事件看待鼠标捕获的丢失???
        elementToDrag.attachEvent( "onlosecapture", upHandler );
    }
    if( event.stopPropagation ) event.stopPropagation();
    else event.cancelBubble = true;

// 现在阻止任何默认操作
    if( event.preventDefault ) event.preventDefault();
    else event.returnValue = false;

function moveHandler( e ){
        if( !e ) e = window.event;
        var scroll = getScrollOffset();
        elementToDrag.style.left = ( e.clientX + scroll.x - deltaX ) + "px";
        elementToDrag.style.top = ( e.clientY + scroll.y -deltaY ) + "px";
        if( e.stopPropagation ) e.stopPropagation();
        else e.cancelBubble = true;
    }

function upHandler( e ){
        if( !e ) e = window.event;
        if( document.removeEventListener ){
            document.removeEventListener( "mouseup", upHandler, true );
            document.removeEventListener( "mousemove", movehandler, true );
        }else if( document.attachEvent ){
            elementToDrag.detachEvent( "onlosecapture", upHandler );
            elementToDrag.detachEvent( "onmouseup", upHandler );
            elementToDrag.detachEvent( "onmousemove", movehandler );
            elementToDrag.releasecapture();
        }
        if( e.stopPropagation ) e.stopPropagation();
        else e.cancelBubble = true;
    }
}

原生js--鼠标事件的更多相关文章

  1. JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理

    1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素 ...

  2. js 鼠标事件的抓取代码

    js 鼠标事件的抓取代码,分享给大家. 1.通过ele.setCapture();设置鼠标事件的抓取. 2,应用可以通过单.双击文字来获取时间. <html> <head> & ...

  3. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  4. [JS]鼠标事件穿透的问题

    今天制作登陆窗口的效果时碰到的一个问题,如下: 标签结构如下: <div id="loginFrame"> <form class="loginFram ...

  5. js鼠标事件相关知识

    1.mousedown->mouseup依次触发后相当于click事件 2.除了mouseenter和mouseleave外,其它的鼠标事件都是冒泡的 3.mouseover和mouseout事 ...

  6. JS鼠标事件大全 推荐收藏

    一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...

  7. js鼠标事件大全

    一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...

  8. JS 鼠标事件大全

    一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...

  9. js鼠标事件

    今天遇到一个非常奇怪而又搞笑的事情:给一个a标签添加一个鼠标移动上时给一个事件,我给其添加的是一个onMouseMove事件,结果在IE6 7 8 9和GOOLE中都很正常,结果在Firox中出现问题 ...

  10. js 鼠标事件详细

    常用的几个类型 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick HT ...

随机推荐

  1. 微软office web apps 服务器搭建之在线文档预览

    案例:http://owa.linbsoft.com/op/generate.aspx# 文档地址:http://demo.linbsoft.com/CourseFile/201407/2014070 ...

  2. (个人)Linux基本指令收集

    1. 删除文件 其中 -r为向下递归删除    -f为强行删除,不做提示 rm -rf name 1   1 rm -rf name 2. 目录跳转指令 cd .. --跳转到上一级 cd ../ - ...

  3. 相对和绝对路径/cd命令/创建和删除目录mkdir/rmdir/rm命令

    2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令 绝对路径:从根开始的路径:文件所在的路径: 相对路径:相对于当前目录而言的路径:上一级或者下一 ...

  4. 局域网 ping

    时间:2013-01-15 11:07来源:网络整理 作者:秩名点击:2271次 |我要投稿 一般情况下,如果我们使用Ping命令来查找网络问题所在或检验网络运行情况,我们需要使用许多Ping命令,如 ...

  5. 给zTree添加onSelect callback

    由于jquery ui没有集成tree控件,所以在网上找到了zTree v3.zTree无疑是功能非常强大的一款jquery的插件,而且是国人作品,zTree的文档写得也非常好,效果很炫.但是我在使用 ...

  6. 元素加了position:absolute则该元素的text-align:center居中失效的解决办法

    position:absolute; top:50%; left:50%; -webkit-transform: translate(-50%,-50%); -moz-transform: trans ...

  7. android EditText设置弹出数字输入法键盘

    <EditText      android:id="@+id/edit_digit_input"      android:layout_width="wrap_ ...

  8. [web] spring boot 整合MyBatis

    1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  9. Oauth2.0(四):Implicit 授权方式

    Oauth2.0的核心机制已经总结完毕.除了核心机制,Oauth2.0 还提供了几种标准的授权流程,分别适用于不同的场景.其中一种叫做 Implicit 授权,适用于纯静态页面应用.所谓纯静态页面应用 ...

  10. nuget类库xml说明以及类库说明文件添加到包中

    1.nuget包制作添加xml操作:项目右键属性,生成配置输出xml文档文件,debug,release都配置一下,项目右键 yesway.redis.csproj 文件增加: 添加类库说明文件con ...