原生js--鼠标事件
鼠标事件对象几个重要的属性:
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--鼠标事件的更多相关文章
- JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理
1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素 ...
- js 鼠标事件的抓取代码
js 鼠标事件的抓取代码,分享给大家. 1.通过ele.setCapture();设置鼠标事件的抓取. 2,应用可以通过单.双击文字来获取时间. <html> <head> & ...
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- [JS]鼠标事件穿透的问题
今天制作登陆窗口的效果时碰到的一个问题,如下: 标签结构如下: <div id="loginFrame"> <form class="loginFram ...
- js鼠标事件相关知识
1.mousedown->mouseup依次触发后相当于click事件 2.除了mouseenter和mouseleave外,其它的鼠标事件都是冒泡的 3.mouseover和mouseout事 ...
- JS鼠标事件大全 推荐收藏
一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...
- js鼠标事件大全
一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...
- JS 鼠标事件大全
一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...
- js鼠标事件
今天遇到一个非常奇怪而又搞笑的事情:给一个a标签添加一个鼠标移动上时给一个事件,我给其添加的是一个onMouseMove事件,结果在IE6 7 8 9和GOOLE中都很正常,结果在Firox中出现问题 ...
- js 鼠标事件详细
常用的几个类型 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick HT ...
随机推荐
- 图像处理、计算机视觉与模式识别“SCI期刊和顶级会议”总结
期刊: best (1) IEEE Transactions on Pattern Analysis and Machine Intelligence,IEEE模式分析与机器智能汇刊,简称PAMI,是 ...
- 仿网易nec首页动画效果
仿网页nec首页动画效果nec链接:http://nec.netease.com/ 首先,介绍animationanimation检索或设置对象所应用的动画特效.animation由“keyframe ...
- iOS : Blur Effect
http://blog.bubbly.net/2013/09/11/slick-tricks-for-ios-blur-effect/ Full sample sources available at ...
- DataTable内容导出为CSV文件
CSVHelper.cs内容: using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- node配置自动监测文件改变不重启
方法一: nodemon npm install -g nodemon nodemon ./bin/www 或者在npm start命令里把node改为nodemon 方法二:supervisor n ...
- Dos命令大全(1)
MS DOS 命令大全 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含 ...
- 最新Java面试题及答案整理
基础篇 一.基本功 面向对象特征 封装,继承,多态和抽象 1. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰 ...
- php解析mpp文件中的前置任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...
- Base64编码——学习笔记
Base64是一种编码方式. 非加密 chcp->936 编码流程: 位数不够后面补0,例中补了2个0. 末尾加=表示结束符. GB2312,有些敏感词不能显示. GBK,是GB2312升级版. ...
- char与TCHAR相互转换(拒绝中文乱码,好用!)
C++编程中屡屡要遇到宽窄字符转换的问题,尤其是字符串中有中文,稍有不慎就会中文乱码,程序运行出错. 下面为char*.char[]与TCHAR*.TCHAR[]互转的用法,不求花哨,只求好用!请参考 ...