- 浏览: 311456 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (243)
- Core Java (13)
- Java (12)
- Android (2)
- Lucene (3)
- J2EE (3)
- Hibernate (2)
- Jsp & Servlet (3)
- Struts2 (3)
- Spring (5)
- JSF (6)
- RichFaces (2)
- HTML & JS & DOM & CSS (87)
- browser (1)
- Ajax & A4J (2)
- Workflow (1)
- Maven (3)
- Linux (2)
- VM & VBOX (1)
- Tomcat (1)
- Cache (3)
- Others (36)
- design (1)
- PHP (1)
- Try.js (1)
- HTML5 && CSS3 && ECMAScript5 (26)
- 疯言疯语 (5)
- mongodb (2)
- Hardware Common Sence (1)
- RESTful (3)
- Nginx (2)
- web安全 (8)
- Page Design (1)
- web performance (1)
- nodejs (4)
- python (1)
最新评论
-
New_Mao_Er:
求最新的版本破解啊!!!
Omondo eclipseUML插件破解 -
konglx:
讲得仔细,谢了
全面分析 Spring 的编程式事务管理及声明式事务管理 -
cilendeng:
对所有post有效只能使用过滤器
说说Tomcat的Server.xml的URIEncoding=‘UTF-8’配置 -
jiulingchen:
mark了,灰常感谢!
JAVA中最方便的Unicode转换方法 -
anlaetion:
这算法可以有
js 字符串搜索算法
先看看都有哪些鼠标事件:mousedown,mouseup_and_click,dblclick,mousemove和mouseover mouseout。然后还会解释一下relatedTarget,fromElement和toElement这些事件属性。最后是微软的 mouseenter和mouseleave事件。
浏览器的兼容性问题,可以在浏览器兼容性列表查看。
例子
这里有一个例子。可以帮助理解下面的内容。
mousedown,mouseup,click和dblclick在这个链接上注册。可以再下面的文本框里面查看。或者在对话框里面。(请在原文里尝试:http://www.quirksmode.org/js/events_mouse.htm)
Mousedown,mouseup,click
如果用户在一个元素上点击,那么最少三个事件会被触发,顺序是这样的:
1、mousedown,当用户在这个元素上按下鼠标键的时候
2、mouseup,当用户在这个元素上松开鼠标键的时候
3、click,当一个mousedown和一个mouseup都在这个元素上被检测到的时候发生
通常mousedown和mouseup比click有用。有些浏览器不允许你读取onclick的事件信息。而且有时候用户用鼠标做出某些动作click事件没有跟上。
假设用户在一个链接上按下了鼠标键,然后把鼠标挪开了并且挪开后松开了鼠标键。那么这时候这个链接就仅仅发生了mousedown事件。类似的,用户在点击鼠标之后挪到了链接上,那么链接就仅有mouseup发生。这两种情况都没有click事件发生。
这是不是一个问题取决于用户的行为。但是你应该注册onmousedown/up事件,除非你就是完全想click发生。
如果你用了弹出警示框的话,浏览器可能会丢失事件发生的轨迹和发生了多少次,会引起混乱。所以最好别用那个。
Dblclick
dblclick事件很少用。如果你要用的话一定不要把onclick和dblclick的事件处理程序注册在一个HTML元素上。如果两个都注册了的话你要知道用户到底干什么是一件基本上不可能的事情。
总之,当用户在一个元素上双击的时候click事件总是发生在dblclick之前。另外,在Netscape中,第二个click总是会在dblclick之前被分开处理。不管怎样,警示框在这是很危险的。
所以保证你的click和dblclick很好的分离能避免很多复杂的事情。
Mousemove
mousemove事件运行的很好,但是需要注意的是那可能需要很多的系统资源来处理所有的mousemove事件。当用户把鼠标移动一个像素,mousemove就触发一次。就算什么都没发生,长而复杂的函数也要耗费很长的时间会影响网站的效率:所有的事情都会变慢,尤其在那些老古董上。
所以最好的办法就是当你需要的时候注册onmousemove事件,在不用的时候尽快移除:
element.onmousemove = doSomething; // later element.onmousemove = null;
Mouseover和mouseout
再看看这个例子,换成mouserover然后试试。这个例子只是在ev3上添加了onmouseover的事件处理程序。然而你会注意到不仅仅在ev3上会触发事件在ev4或者span上都会触发。在Mozilla 1.3之前,当鼠标进入一个文本区域的时候都会触发。
原因当然就是事件冒泡。用户在ev4上触发了mouseover事件。在这个元素上没有onmouseover事件处理程序,但是在ev3上有。所以当事件冒泡到ev3上的时候,程序就执行了。
现在这样的设置虽然都完全正确,但是还有一个问题。首要问题就是目标。假设鼠标进入了ev4:
----------------------------------------- | This is div id="ev3" | | ----------------------------- | | | This is div id="ev4" | | | | -------- <-------- | | | | span | | | | | | | | | | | -------- | | | ----------------------------- | ----------------------------------------- <--------: mouse movement
现在这个事件的target/srcElement就是ev4:就是事件发生的元素,因为鼠标移动到了他上面。但是当下面的发生时候:
----------------------------------------- | This is div id="ev3" | | ----------------------------- | | | This is div id="ev4" | | | | -------- | | | | | span | | | | | | --------> | | | | -------- | | | ----------------------------- | ----------------------------------------- -------->: mouse movement
这个事件的target/srcElement是一样的。在这一样还是鼠标进入ev4。然而你可能会当鼠标从ev3来或者从SPAN来的时候做不同的事。所以我们需要知道鼠标到底从哪来的。
relatedTarget,fromElement,toElement
W3C把relatedTarget属性加进了mouseover和mouseout事件中。在mouseover事件下就是包括鼠标从哪来,在mouseout下就是包括鼠标到哪去。
微软也有包含以下信息的两个属性:
1、fromElement指的是鼠标来之前的元素。在mouseover的状况下比较有用
2、toElement表示鼠标将要去的那个元素。在mouseout的情况下比较有用。
在我们的第一个例子里面,relatedTarget/fromElement包含一个ev3的引用,在我们的第二个例子是SPAN。现在你就知道鼠标的来源了。
跨浏览器的代码
所以如果你想在mouseover的情况下想知道鼠标从哪来,那么:
function doSomething(e) { if (!e) var e = window.event; var relTarg = e.relatedTarget || e.fromElement; }
如果在mouseout的情况下想知道鼠标的去向那么:
function doSomething(e) { if (!e) var e = window.event; var relTarg = e.relatedTarget || e.toElement; }
鼠标离开一个层
在一个基于层的导航菜单里面你可能需要知道鼠标什么时候离开层这样你才能把那个层关闭。所以你给这个层的onmouseout注册了一个事件处理程序。然后事件冒泡会导致当鼠标离开任意一个层的时候都会触发这个onmouseout。
--------------
| Layer |.onmouseout = doSomething;
| -------- |
| | Link | ----> We want to know about this mouseout
| | | |
| -------- |
| -------- |
| | Link | |
| | ----> | but not about this one
| -------- |
--------------
---->: mouse movement
另外的一个停止的方法是当你把鼠标移入这个层,然后到了一个链接上,浏览器就在这个层上注册一个mouseout事件。这个让我很不明白(鼠标依然在层里),但是所有的浏览器都没问题。
那么我们如何在鼠标真正离开的层的时候让mouseout发生呢?
function doSomething(e) { if (!e) var e = window.event; var tg = (window.event) ? e.srcElement : e.target; if (tg.nodeName != 'DIV') return; var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement; while (reltg != tg && reltg.nodeName != 'BODY') reltg= reltg.parentNode if (reltg== tg) return; // Mouseout took place when mouse actually left layer // Handle event }首先得到事件的target,也就是鼠标离开的元素。如果target不是DIV(层),理解结束函数,因为鼠标没有真正离开层。
如果target是层,我们不能确定鼠标时离开层了还是进入了层里面的一个链接。所以要再检查事件的relatedTarget/toElement,也就是鼠标移向的那个元素。
我们读取这个元素,然后我们通过DOM树向上遍历,直到事件的target(也就是DIV),或者BODY元素。
如果我们遇到的target是层的子元素,那么鼠标就没有离开层。就停止函数的运行。
当函数通过所有的验证我们就能确定鼠标确实离开了层,我们就能开始应该的动作了(通常是隐藏这个层)。
Mouseenter和mouseleave
微软还有个解决办法。他添加了两个新的事件mouseenter和mouseleave。除了对事件冒泡不反应以外基本上和mouseover和mouseout是一样的。他们把注册了事件的元素看成一个整块,对于发生在块内的
mouseover和mouseout不做反应。
所以这两个事件也解决了我们的问题:他们只对绑定的元素做出mouseover/out反应。
现在这两个事件只被版本在5.5以上的IE支持。或许其他浏览器哪天回借鉴下。
结尾
现在已经到了Event的介绍的尾声了。好运!
[转自:http://tech.ddvip.com/2010-03/1269927968148964.html]
发表评论
-
循环数组的逻辑怎么写
2015-03-23 10:24 643应用场景这样的: var imgUrls = [ ... -
发布`代码生成器`
2014-11-17 00:45 580闲话不说,直接上地址 npm: https://www. ... -
MutationObserver
2014-10-27 15:29 1090MutationObserver MutationObse ... -
a simple mvvm library - bird
2014-10-09 18:26 726see here:https://github.com/i ... -
遍历dom tree是一件相当耗时的事情
2014-09-23 01:15 752遍历dom tree是一件相当耗时的事情,尤其是在遍历的同时 ... -
今天再讲下js里的继承
2014-09-18 00:27 693js的继承说简单也很简单,请看: function ... -
Text 类型
2014-09-05 18:52 841文本节点由Text类型表 ... -
JavaScript插入动态脚本
2014-09-05 18:47 635动态脚本指的是在页面加载时不存在,但将来的某一时刻通过修改该 ... -
innerHTML插入<style>元素
2014-09-05 18:37 1157通过innerHTML写入<style>元素没 ... -
CSS实现相对浏览器窗口定位彻底研究
2014-09-05 18:33 3718Web Developer / Designer 经常需要将 ... -
JavaScript插入动态样式
2014-09-05 18:07 604能够把CSS样式包含到HTML页面中的元素有两个。其中,& ... -
再理解jQuery;delete原型属性
2014-05-13 22:05 1855以前用jQuery的时候曾粗略看了它的源码,但却不求甚解。 ... -
javascript &&和||
2012-07-23 00:38 700一直以为 && 和 || ... -
undefined 和 void 0 的区别
2012-07-20 11:15 701在读backbone源码时看见这么一段代码: if ( ... -
Fiddler - 前端开发值得拥有
2012-07-16 14:41 825最近换了新工作,搬了新家,换了新室友,一切都在重新开始。 ... -
说说我的web前端之路,分享些前端的好书
2012-07-16 14:38 791WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没 ... -
JavaScript实现 页面滚动图片加载
2012-07-16 14:29 685又到了这个月的博客时间了,原计划是打算在这个月做一个的功 ... -
JavaScript 操作 Cookie
2012-07-16 11:18 682从事web开发也有些日 ... -
Javascript定义类(class)的三种方法
2012-07-12 12:35 584程序员们做了很多探索,研究如何用Javascript模拟”类” ... -
服务端解决跨源共享
2012-06-21 10:18 4514跨源资源共享是web开发领域中一个非常有趣的话题,互联网 ...
相关推荐
在JavaScript中,鼠标事件主要分为两类:鼠标动作事件和鼠标按钮事件。动作事件通常与鼠标移动有关,而按钮事件则与鼠标的点击操作相关。以下是一些基本的鼠标事件: 1. `mousemove`:当鼠标在元素上移动时触发。...
JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例代码JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例代码JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例...
Event 对象的使用可以分为两个方面:事件处理和事件绑定。事件处理是指在事件发生时执行的函数或代码,而事件绑定是指将事件处理函数绑定到某个元素上,使得该元素能够响应用户的交互行为。 常见的事件类型包括: ...
`initEvent`方法用于初始化事件对象,它接受三个参数:事件类型、一个布尔值表示事件是否冒泡、一个布尔值表示是否要阻止事件的默认行为。 除此之外,文章提到了jQuery库中的`event.trigger`方法,这是一个封装过的...
在JavaScript中,事件处理通常有两种方式:事件监听器(Event Listeners)和传统事件处理程序。传统事件处理程序是通过在HTML元素上直接设置`onclick`、`onmouseover`等属性来实现的,而事件监听器则是通过...
- **`timeStamp`**:事件发生的时间戳。 - **`bubbles`**:布尔值,表示该事件是否可以冒泡。 - **`cancelable`**:布尔值,表示该事件是否可以通过`preventDefault()`方法取消默认行为。 ### 2. 控制事件流程的...
JavaScript中的Event是处理用户交互或浏览器事件的核心机制。Event对象包含了与事件相关的所有信息,如触发事件的元素、事件类型、按键状态等。在JavaScript中,事件可以是用户的行为,如点击按钮、滚动页面,或者是...
JavaScript是Web开发中不可或缺的一部分,它提供了丰富的交互性,使得网页不仅仅是静态的HTML。在JavaScript中,事件(Events)是用户或浏览器与页面...不断学习和实践JavaScript事件,将使你成为更优秀的前端开发者。
JavaScript中的鼠标事件是Web开发中不可或缺的一部分,它们允许开发者响应用户的鼠标操作,从而实现丰富的交互功能。这些事件主要分为两类:按钮事件和运动事件。在本篇中,我们将深入探讨JavaScript的鼠标事件,...
在 JavaScript 中,Event 对象是事件状态的代表,它包含了事件发生的元素、键盘状态、鼠标位置和鼠标按钮状态等信息。一旦事件发生,浏览器的内存中就会生成相应的 Event 对象,如单击一个按钮。Event 对象只在事件...
### JavaScript 鼠标事件详解 #### 一、概述 JavaScript 的鼠标事件是网页交互设计中的重要组成部分,通过这些事件可以实现丰富的用户交互效果。在本文档中,我们将重点介绍几种常用的鼠标事件,并通过示例代码展示...
`event`对象包含了关于事件的所有相关信息,例如触发事件的对象、鼠标的位置、按下的键以及更多细节。 值得注意的是,`event`对象只有在事件发生的过程中才是有效的。一旦事件处理完毕,该对象就会被销毁。因此,...
window.event对象是JavaScript中一个特殊的对象,它代表当前发生的事件的状态,包括触发事件的元素、鼠标位置和按键状态等信息。window.event对象仅在事件处理函数运行期间有效,因此它是事件处理函数的局部变量。每...
- **Event对象**:事件处理函数中通常会传递一个Event对象,包含了关于事件的信息,如事件类型、位置等。 - **键盘事件**:如`onkeydown`(键按下)、`onkeyup`(键释放)和`onkeypress`(字符键按下)。 - **...
### jQuery鼠标事件详解 在网页开发中,合理利用jQuery库能极大地提高JavaScript代码的编写效率。jQuery通过封装一系列复杂的DOM操作,使得开发者能够更轻松地处理网页中的元素和事件。本文将详细介绍jQuery中与...
javaScript事件学习小结(四)event的公共成员(属性和方法) //www.jb51.net/article/86262.htm JavaScript事件学习小结(二)js事件处理程序 //www.jb51.net/article/86264.htm JavaScript事件学习小结(三)js...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在网页设计中,下拉菜单是一个常见...学习和理解这些资源,将有助于你深入理解JavaScript在创建交互式网页中的作用。
JavaScript事件是Web开发中不可或缺的一部分,它允许我们与用户进行交互,响应用户的操作,并控制页面的行为。本篇文章将深入解析JavaScript事件列表...在实践中,不断学习和探索,才能充分利用JavaScript事件的潜力。
JavaScript中的鼠标事件包括了多个不同类型的事件,如mousedown、mouseup、click、dblclick、mousemove、mouseover和mouseout等,这些事件的熟悉和应用对于开发交互性网站界面至关重要。 在第九章中,作者首先介绍...