原生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 ...
随机推荐
- HTML5 Canvas 超炫酷烟花绽放动画教程
这是一个很酷的HTML5 Canvas动画,它将模拟的是我们现实生活中烟花绽放的动画特效,效果非常逼真,但是毕竟是电脑模拟,带女朋友看就算了,效果还是差了点,呵呵.这个HTML5 Canvas动画有一 ...
- How to use base class's assignment operator in C++
看了android下的代码,好长时间没看了,有个关于C++的知识点不是很清楚,查了下: 如何使用基类中的赋值运算符? 引述自http://stackoverflow.com/questions/122 ...
- Allure Report使用
https://blog.csdn.net/liuchunming033/article/details/79624474#commentBox https://blog.csdn.net/lihua ...
- 性能分析Linux服务器CPU利用率
CPU度量 1. 指标范围 1.1 User mode CPU utilization+ System mode CPU utilization 合理值:60-85%,如果在一个多用户系统中us+ ...
- mongo数据库命令简单学习
db.getCollection('product').update({status:"offline"},{$set:{status:"online"}},f ...
- Jenkins入门知识
1 修改jenkins的根目录,默认地在C:\Documents and Settings\AAA\.jenkins . .jenkins ├─jobs│ └─JavaHelloWorld│ ...
- vim中文手册
http://vimcdoc.sourceforge.net/doc/help.html
- [Bayes ML] This is Bayesian Machine Learning
From: http://www.cnblogs.com/bayesianML/p/6377588.html#central_problem You can do it: Dirichlet Proc ...
- MongoDB聚合管道
通过上一篇文章中,认识了MongoDB中四个聚合操作,提供基本功能的count.distinct和group,还有可以提供强大功能的mapReduce. 在MongoDB的2.2版本以后,聚合框架中多 ...
- SharePoint如何模拟用户
try { SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序 { SPWeb web = SPContext ...