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

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;
    }
}

最新文章

  1. php单点登录之模拟淘宝天猫同步登录
  2. lucene 分词实现
  3. sublime 3 user Settings
  4. HTML DOM appendChild() 方法
  5. 【CodeForces 520E】Pluses everywhere
  6. 【转】asp.net导出数据到Excel的三种方法
  7. zookeeper数据迁移
  8. Eclipse关联JavaDoc和源代码
  9. Lambda表达式中的表达式lambda和语句lambda区别
  10. Color the ball
  11. NET通用平台
  12. Jquery中使用setInterval和setTimeout 容易犯的低级错误
  13. [html5] 学习笔记-改良的input元素种类
  14. 深入理解Java内置锁和显式锁
  15. python田忌赛马
  16. 【HNOI 2019】校园旅行
  17. pythonの连接MySQL数据库
  18. Android中使用BufferedReader.readline阻塞读取不到数据,但是ready返回true
  19. 关于makefile的生成原理以及make相关命令的使用
  20. 【maven】之打包war依赖子项目jar

热门文章

  1. win10 UWP Markdown 含源码
  2. html常用对照表
  3. 安装drools workbench
  4. C# 导出资源文件到硬盘
  5. 3d md5 demo
  6. UNIX环境编程学习笔记(7)——文件I/O之文件访问权限与进程访问控制
  7. 提供json格式数据,去掉引号的方法
  8. python,如何获取字符串中的子字符串,部分字符串
  9. C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
  10. Java压缩包解压到指定文件