原生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 ...
随机推荐
- jq dom不存在时绑定事件
$( "a.offsite" ).live( "click", function() { alert( "Goodbye!" ); // j ...
- T4 好用的Vs扩展
- MATLAB错误:下标索引必须是正整数类型或者逻辑类型
背景: Matlab R2015b 问题: 在运行BP算法时出现错误: 下标索引必须是正整数类型或者逻辑类型 output( i , class( i ) ) = 1 ; 解决办法: 根目录下运行, ...
- hql date比较
补充:相等时用to_char,比较大小(<或>)时用 时间格式(如果不是时间格式可以用to_date) java.util.Date date=new java.util.Date(); ...
- RGB转LAB色彩空间
1.原理 RGB无法直接转换成LAB,需要先转换成XYZ再转换成LAB,即:RGB——XYZ——LAB 因此转换公式分两部分: (1)RGB转XYZ 假设r,g,b为像素三个通道,取值范围均为[0,2 ...
- GetDlgItem的用法小结
GetDlgItem用于获得指定控件ID的窗体指针,函数原型如下: HWND GetDlgItem( HWND hDlg, int nIDDlgItem ); CWnd* GetDlgItem(int ...
- [SQLite3]connection string的连接池参数引发的错误
最近在.net中使用Sqlite数据库,发现.net的驱动做得不错,而且实现了加密功能.于是想给自己的数据库加上口令,结果,多次实验都以失败告终: 链接数据库,然后ChangePassword都成功执 ...
- python05 - 迭代器,生成器,装饰器
迭代器 迭代器就是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问一遍后结束. 迭代器很大的特点: 只能往前迭代,不能够回退,也不能随机访问其中一个元素,只能通过__ ...
- Blender 编辑模式
1.如何进入编辑模式 可直接通过“Tab”快捷键进入编辑模式,或者选择界面底部的下拉列表: 如果想退出编辑模式,可再按下“Tab”键退出. 2.编辑选择 进入编辑状态后,我们可以通过鼠标右键来选择某个 ...
- 多个Tomcat之间实现Session共享
对于高访问量.高并发量的网站或web应用来说,目前最常见的解决方案应该就是利用负载均衡进行server集群,例如比较流行的nginx+memcache+tomcat.集群之后比如我们有N个Tomcat ...