1.每一个元素身上的事件都是天生自带的,不需要我们去定义,只需要我们给这个事件绑定的方法,当事件触发的时候就会执行这个方法。

2.事件绑定的方法

  1,div.onclick=function(){}    Dom0级事件绑定

  2,div.addEventListener()或div.attachEvent()     Dom2级事件绑定

  二者的区别

  onclick是这个元素私有的属性,天生自带的,而addEventListener()是公有的属性,从EventTarget(事件源)对象上继承来的。

  Ie低版本的attachEvent是公有的。

  div.onclick存在事件冒泡机制没有捕获机制

  div.addEventListener()可有冒泡可有捕获

  div.attachEvent()只有冒泡机制

3.div.addEventListener和div.attachEvent的区别

  1.前者有冒泡和捕获机制,后者只有冒泡机制

  2.事件名前者不带on后者带on

  3.前者this指向当前元素,后者指向window

  4.前者是标准浏览器的写法,后者是ie8以下

Arguments

每个函数都有一个argument对象,他是这个函数所有参数构造的集合

上面的控制台是arguments数组中有一个元素叫mouseevent。

所有,每个事件的方法中浏览器都给他一个参数叫mouseevent。我们所有鼠标的信息都临时存储在这个mouseevent对象上。

mouseevent有兼容性

  标准浏览器可以直接读取,但是ie不行

  解决办法

event对象的兼容性

  clientX和clientY是鼠标到浏览器窗口左上角的距离坐标

  pageX和pageY是鼠标到网页左上角的距离坐标,但是ie低版本没有这个属性

  在ie下怎么算pageY的值 用clientY+scrollTop

事件源   点击那个元素,哪个元素就是事件源

  标准浏览器的事件源是ev.target

  Ie6-8没有这个属性 但是ie有ev.srcElement

阻止事件冒泡兼容性

  1       event.cancelBubble=true

  2  event.stopPropagation?event.stopPropation():event.cancelBubble=true

阻止事件默认行为兼容性

  比如a的href

  href为空 会自动刷新页面

  href为#  锚点跳转

  href为javascript:;阻止默认行为的发生

  Event.preventDefault?Event.preventDefault():event.returnValue=false

事件委托

  如果子元素身上绑定大量相同的事件,我们尽量采用事件委托,所有子元素把自己的是建委托给父级了。

  原理:采用事件冒泡机制完成

为什么使用事件委托呢

  传统的for循环绑定事件,会增加大量的dom操作(事件),影响页面性能,采用事件委托就是把所有的事件基于一个元素上

事件委托和传统的事件绑定的优势

  传统的事件绑定对新增元素不起作用,事件委托起作用

  传统的事件绑定,有多少元素js就需要绑定多少事件,事件委托只需要一个事件

案例

传统写法

事件委托写法

事件委托建议采纳

5.并不是所有的事件都存在事件冒泡

onmouseenter      onmouseleave就没有事件冒泡机制

所有我们做跟鼠标的时候尽量用这两个事件,不要mouseover  mouseout

js高级1的更多相关文章

  1. JS高级前端开发群加群说明及如何晋级

    JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明:   一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...

  2. 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯

    http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...

  3. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  4. 读JS高级——第五章-引用类型 _记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定

    js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...

  6. 《JS高级程序设计》笔记 —— 解析查询字符串

    今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...

  7. js 高级函数 之示例

    js 高级函数作用域安全构造函数 function Person(name, age)    {        this.name = name;        this.age = age;     ...

  8. 惰性函数——JS高级

    我们先来看一下js的异步提交. XHR我们在原生的时候常常用到,因为常用到,我们更多把封装到了工具库中 先看下他最常用的实现 // 旧方法 function createXHR() { var xhr ...

  9. 《Node.js 高级编程》简介与第二章笔记

    <Node.js 高级编程> 作者简介 Pedro Teixerra 高产,开源项目程序员 Node 社区活跃成员,Node公司的创始人之一. 10岁开始编程,Visual Basic.C ...

  10. js高级-面向对象继承

    一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...

随机推荐

  1. [再寄小读者之数学篇](2014-06-22 函数恒为零的一个充分条件 [中国科学技术大学2011年高等数学B考研试题])

    设 $f(x)$ 在 $\bbR$ 上连续, 又 $$\bex \phi(x)=f(x)\int_0^x f(t)\rd t \eex$$ 单调递减. 证明: $f\equiv 0$. 证明: 设 $ ...

  2. 最大熵模型和EM算法

    一.极大似然已经发生的事件是独立重复事件,符合同一分布已经发生的时间是可能性(似然)的事件利用这两个假设,已经发生时间的联合密度值就最大,所以就可以求出总体分布f中参数θ 用极大似然进行机器学习有监督 ...

  3. List总结

    List是接口,不能直接new,需要使用它的实现类 所有已知实现类:AbstractList, AbstractSequentialList, ArrayList, AttributeList, Co ...

  4. 用juery的ajax方法调用aspx.cs页面中的webmethod方法

    首先在 aspx.cs文件里建一个公开的静态方法,然后加上WebMethod属性. 如: [WebMethod] public static string GetUserName() { //.... ...

  5. innobackupex的流备份【转】

    并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...

  6. C++设计模式——状态模式

    前言 在实际开发中,我们经常会遇到这种情况:一个对象有多种状态,在每一个状态下,都会有不同的行为.那么在代码中我们经常是这样实现的. typedef enum tagState { state, st ...

  7. Nginx配置https证书

    目前的大趋势是升级HTTP为HTTPS 本章介绍怎样实装HTTPS证书 # 如果报 ssl 错误是Nginx安装时未安装ssl 请重新编译nginx 可以参考我之前的博客 申请/获取https 这里就 ...

  8. java----SAX解析XML

    XML: 可扩展标记语言 1.充当显示数据 2.储存数据 3.传输数据 SAX: 水电费 基于事假驱动,顺序读写,速度快 不能任意读取节点,灵活性差 解析时,占用内存小 import org.xml. ...

  9. Knockout中ko.utils中处理数组的方法集合

    每一套框架基本上都会有一个工具类,如:Vue中的Vue.util.Knockout中的ko.utils.jQuery直接将一些工具类放到了$里面,如果你还需要更多的工具类可以试试lodash.本文只介 ...

  10. 程序猿最浪漫的表白,肯定会得到你的她——Jason niu 原文来自GitHub,本人已部分修改

    程序猿最浪漫的表白,肯定会得到你的她——Jason niu    原文来自GitHub,主页本人已部分修改,感谢程序猿大神wuxia2001和hackerzhou的开源,感谢这两位大神! 视频结果展示 ...