自定义事件

//旧的方法

//创建
var event = document.createEvent('Event');
//初始化
event.initEvent('build', true, true);
//监听
A.$('a').addEventListener('build', function (e) {
console.log('build');
}, false);
//触发
A.$('a').dispatchEvent(event);
//新的方法
var event = new Event('build');
event.initEvent('build', true, true);
A.$('a').addEventListener('build', function (e) {
console.log('build');
}, false);
A.$('a').dispatchEvent(event);

跨浏览器的事件属性和方法##

与DOM文档中每个节点实际都扩展自其他一些DOM对象一样,事件对象也是;在W3C模型中,传递到事件监听器中的事件对象并不总是相同的,不过这些事件对象却拥有相同的属性

当浏览器调用load事件时,传递到事件监听器的是DOM2事件规范中定义的Event对象;当调用click事件时,传递到事件监听器的对象是一个MouseEvent对象

DOM2级事件对象的继承关系如下图所示:

Event对象###

事件对象中包含着用于控制事件流和目标对象的方法和属性。包括:

  • bubbles:布尔值,表示是否是冒泡阶段
  • cancelable:布尔值,表示事件是否具有可以取消的默认动作
  • currentTarget:当前正在处理的DOM元素
  • target:最早调用事件序列的对象(EventTarget对象的实例)
  • timestamp:DOMTimeStamp对象,用来确定创建事件后的毫秒数
  • type:包含事件名称(例如click)的字符串
  • eventPhase:表示处于事件流的阶段,使用1-3的整数来表示,也可以使用Event常量CAPTURE_PHASE、AT_TARGET和BUBBLING_PHASE。
  • initEvent(eventType,canBubble,cancelable):初始化通过document.createEvent(‘Event’)方法创建的事件对象
  • preventDefalt():取消对象的默认动作
  • stopPropagation():停止事件流的进一步执行

MouseEvent对象###

鼠标事件对象中包含与鼠标指针的位置相关的属性,也包含鼠标事件发生的同时可能会按住的键盘中某个健的信息

  • altKey,ctrlKey,shiftKey: 布尔值,表示鼠标事件发生的同时,是否也按住了Alt,Ctrl,Shift键;
  • button: 表示鼠标按下的键
    • 0 : 左键
    • 1 : 中键
    • 2 : 右键
  • clientX/clientY: 相对于浏览器的坐标
  • screenX/screenY: 相对于屏幕的坐标
  • relatedTarget: 在多数情况下,这个属性值是null,但在mouseover事件中,它引用的是鼠标离开的前一个对象;在mouseout事件中,它引用的是鼠标之前进入的那个对象。

处理浏览器的不兼容##

访问事件的目标元素###

IE没有提供target和currentTarget属性,但却提供了srcElement属性。对于Safari而言,文本节点会代替包含它的元素节点变成事件的目标对象。

确定点击了哪个鼠标键###

  • W3C规定:

    • 0表示按下了左键
    • 1表示按下了中键
    • 2表示按下了右键
  • Microsoft的规定
    • 0表示没有按下任何键
    • 1表示按下左键
    • 2表示按下右键
    • 3表示同时按下了左右键
    • 4表示按下了中键
    • 5表示同时按下了左中键
    • 6表示同时按下了右中键
    • 7表示同时按下了所有三个键

检测事件具有toString()方法并且返回的是MouseEvent,那么考虑使用W3C的方式;否则如果仍然存在button属性,那就可以假设是IE

处理鼠标的位置###

虽然W3C和IE都定义了clientX和clientY鼠标,但它们在确定滚动后的位移属性时却不相同。W3C使用document.documentElement.scrollTop,而IE则使用document.body.scrollTop。对于Safari而言,它把位置信息放在了事件的pageX和pageY属性中。

访问键盘命令###

var code = event.keyCode;
var value = String.fromCharCode(code);

DOM--4 响应用户操作和事件(2)的更多相关文章

  1. DOM--4 响应用户操作和事件(1)

    简介 事件:事件并不是以"on"开头的.例如,onclick引用的是一个对象的属性,click才是事件. 事件侦听器:当指定的事件发生时会执行的函数或方法. 事件注册:为DOM元素 ...

  2. hitTest和pointInside如何响应用户点击事件

    hitTest和pointInside如何响应用户点击事件 处理机制 iOS事件处理,首先应该是找到能处理点击事件的视图,然后在找到的这个视图里处理这个点击事件. 处理原理如下: • 当用户点击屏幕时 ...

  3. JavaScript之DOM操作,事件操作,节点操作

    1,DOM操作 1.1  概念 所谓DOM,全称Document Object Model 文档对象模型,DOM是W3C(World Wide Web Consortuum )标准,同时也定义了访问诸 ...

  4. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  5. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

  6. cocos2d-x视频控件VideoPlayer的用户操作栏进度条去除(转载)

    目前遇到两个问题: (1)视频控件移除有问题,会报异常. (2)视频控件有用户操作栏,用户点击屏幕会停止视频播放. 对于第一个问题,主要是移除控件时冲突引起的,目前简单处理是做一个延时处理,先stop ...

  7. jQuery中模拟用户操作

    有时为了节省不想手动操作网页,但又想看到用户操作时的效果,可以用到jQuery提供的trigger方法.见下图代码 在不点击按钮时仍然想弹出this.value 我们只需要在后面加上.trigger( ...

  8. Dom,查找标签和操作标签

    Dom,查找标签和操作标签 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 ...

  9. 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one

    jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...

随机推荐

  1. 【资料】Boost的资料

    http://blog.csdn.net/pongba/article/details/1561110

  2. HDU 5879 Cure -2016 ICPC 青岛赛区网络赛

    题目链接 题意:给定一个数n,求1到n中的每一项的平方分之一的累加和. 题解:题目没有给数据范围,而实际上n很大很大超过long long.因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固 ...

  3. 微信支付官方.net版之坑你没商量

    最近开始弄支付这块,先是支付宝手机网站支付,也是坑了我许久,不过还好,问题不大. 让我们看看微信支付有多少坑 微信商户平台,你们知道么(我前天才知道,别笑我) 登录地址:https://mch.wei ...

  4. VS2010编译Qt4.8.2的64版本库

    安装qt-win-opensource-4.8.2-vs2010.exe(从http://download.qt.io/archive/qt/4.8/4.8.2/下 载),这个是32位的,里面有编译好 ...

  5. [Android] adb shell dumpsys的使用

    reference to :http://blog.csdn.net/g19920917/article/details/38032413 有两种方法可以查看service list: 1. adb ...

  6. Mysql源码分析--csv存储引擎

    一直想分析下mysql的源码,开始的时候不知道从哪下手,先从csv的文件存储开始吧,这个还是比较简单的.我是用的是mysql5.7.16版本的源码. csv源码文件在mysql源码的mysql-5.7 ...

  7. 自定义UIDatePikerView

    1.添加文件GoYearMonthDayPickerView.h .m .xib.NSDate+Helper.h .m.iCarousel.h .m 2.在Lable上显示日期 UILabel *ag ...

  8. iPhone:4.7 5.5 4 3.5 对应的各个设备屏幕尺寸对应的像素及App上线信息

    Shared App Information You can access these properties from the App Details page in the App Informat ...

  9. Ionic环境搭建

    stepts npm install -g ionic@beta Make sure you have NodeJS installed. Download the installer here or ...

  10. JDK、Jmeter、Android环境变量配置

    JDK环境变量 1.在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,在这里就填写"D:\Program Files\Java\jdk1.6.0_26" ...