自定义事件

//旧的方法

//创建
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. 【leetcode】 Unique Binary Search Trees (middle)☆

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  2. 【linux】jdk安装

    1.在http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载最新版的rpm文件,我 ...

  3. LeetCode 283 Move Zeros

    Problem: Given an array nums, write a function to move all 0's to the end of it while maintaining th ...

  4. 安装Django,运行django-admin.py startproject 工程名,后不出现指定的工程解决办法!!

       第一次写博客,,,,, 在看我这篇教程的前提是你应该已经正确装好python和Django了,好了,废话不说了,正题走你!你现在是不是很纠结自己运行django-admin.py startpr ...

  5. July 6th, Week 28th Wednesday, 2016

    Diligence is the mother of good fortune. 勤勉是好运之母. The mother of good fortune can be diligence, conti ...

  6. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  7. js获取url方法

    //设置或获取对象指定的文件名或路径.alert(window.location.pathname); //设置或获取整个 URL 为字符串.alert(window.location.href); ...

  8. ListView优化中ViewHolder要不要定义为static静态内部类?

    给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...

  9. C#在excel中添加超链接

    1.新建一个项目 2.给项目添加引用:Microsoft Excel 12.0 Object Library (2007版本) using Excel = Microsoft.Office.Inter ...

  10. SQL Server排序规则

    在使用数据库的过程中,总会碰到一些特别的需求.有时候需要储存中文字符,区分大小写或者按照中文的比划顺序排序.这就涉及到了对数据库排列规则的选择. 我们一般可以选择数据库名称-->右键属性(Pro ...