慕课网课程学习--JS事件探秘

事件流

事件冒泡(IE):事件最先被最具体的元素(文档中嵌套层次最深的节点)接受,然后逐级向上传播至最不具体的节点(.. -> body ->html -> document);

事件捕获(网景):不具体的节点更早接收到事件,最具体的节点最后接收到事件,和事件冒泡相反。



事件处理程序

1、HTML事件处理程序

原理:把事件直接在HTML结构中的HTML元素上。

方法一、

<input type="button" value="click" onclick="alert(‘hello‘)">

方法二、

<input type="button" value="click" onclick="show()">
<script>
  function show() {
    alert(‘hello‘);
  }
</script>

缺点:HTML和JS代码紧密耦合在一起。

2、DOM0级事件处理程序 (简单、跨浏览器优势、用得较多)

原理:把一个函数赋值给一个事件的处理程序属性。

1 <input type="button" value="click" id="bnt">
2 <script>
3   var bnt1 = document.getElementById(‘bnt‘); //获得bnt按钮对象
4   btn1.onclick = function() {     //onclick事件是bnt按钮对象的属性
5        alert(‘hello‘);
6   }
7 </script>

如果想取消这个事件(删除bnt1的onclick属性):

bnt1.onclick = null;

3、DOM2级事件处理程序

原理:通过定义两个方法实现, 1)指定事件处理程序 2)删除事件处理程序。

所有的DOM节点均包含这两个方法.

对于IE,Opera: attachEvent();  detachEvent();

接收两个参数(因为是IE,事件流为:事件冒泡,所以没有第三个参数--IE8及更早版本的浏览器只支持事件冒泡):

1、要处理的事件名(如‘onclick‘,需要加‘on‘)

2、事件处理程序的函数

 1 <input type="button" value="click" id="bnt">
 2 <script>
 3    function show () {
 4       alert(‘hello‘);
 5    }
 6
 7     var bnt1 = document.getElementById("bnt");
 8     bnt1.attachEvent(‘onclick‘, show; //添加事件
 9     bnt1.detachEvent(‘onclick‘, show, false); //删除事件
10 </script>

其他浏览器: addEventListener();  removeEventListener();

接收三个参数:

1)要处理的事件名(如click,注意没有‘on‘)

2)事件处理程序的函数

3)布尔值(true-捕获阶段调用,false-冒泡阶段调用)

 1 <input type="button" value="click" id="bnt">
 2 <script>
 3   function show () {
 4      alert(‘hello‘);
 5   }
 6
 7    var bnt1 = document.getElementById("bnt");
 8    bnt1.addEventListener(‘click‘, show, false); //添加事件
 9    bnt1.removeEventListener(‘click‘, show, false); //删除事件
10 </script>

浏览器兼容性处理

方法:判断浏览器具有那种事件处理的能力。

 1 <script>
 2 var eventUtil = {
 3     addHandler: function(element, type, handler) {
 4         if (element.addEventListener) { //DOM2级事件处理程序
 5             element.addEventListener(type, handler, false);
 6         } else if (element.attachEventListener) {
 7             element.addEventListener("on" + type, handler); //IE事件处理程序
 8         } else {
 9             element["on" + type] = handler; //因为type为事件属性,所以可以用中括号
10         }
11     };
12
13     removeHandler: function(element, type, handler) {
14         if (element.removeEventListener) { //DOM2级事件处理程序
15             element.removeEventListener(type, handler, false);
16         } else if (element.detachEventListener) {
17             element.EventListener("on" + type, handler);
18         } else {
19             element["on" + type] = null;
20         }
21     };
22 }
23
24 function show() {
25     alert("hello");
26 }
27
28 var bnt1 = document.getElementById("bnt");
29 eventUtil.addHandler(bnt1, "click", show);
30
31 </script>
32
33 <input type="button" value="click" id="bnt">



事件对象

非IE浏览器,可以直接使用event,IE8之前的IE浏览器必须使用window.event。

1、DOM中的事件对象:

在触发DOM上的事件都会产生一个事件对象-Event。Event常用属性、方法:

  1. type :事件类型
  2. Target :事件目标
  3. stopPropagation() : 阻止事件冒泡
  4. preventDefault() : 阻止事件默认行为

2、IE中的事件对象:

Event常用属性、方法:

  1. type :事件类型
  2. srcElement :事件目标
  3. cancelBubble : 阻止事件冒泡(true阻止)
  4. returnValue : 阻止事件默认行为(false阻止)

 3、解决兼容性问题:

1 var event = event || window.event;
2 if(event.stopPropagation) {  //事件方法在判断时也不需要加()
3   event.stopPropagation();
4 }else {
5   event.cancelBubble = true;
6 }
7     


慕课网课程学习--JS事件探秘

时间: 2024-12-20 22:11:59

慕课网课程学习--JS事件探秘的相关文章

慕课网课程学习--信息排列效果

background: 简写属性在一个声明中设置所有的背景属性. 例子: background: #00FF00 url(bgimage.gif) no-repeat fixed top; 可以设置如下属性: background-color background-position background-size background-repeat background-origin background-clip                  (fixed, scroll) backgro

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

夜空中最亮的星:慕课网新手学习指南_慕课手记

首先标题是为了凑够标准的十个字,如果你这会去数了一下然后想评论说不是十个字,那我佩服你的求知精神...进来的肯定不是看我瞎扯淡的,我们步入正题. 慕课网作为国内不能说是最大,但是起码口碑最好的一个IT学习的网站,受到了很多人的欢迎,但是在推荐给朋友的过程中,我就发现了一些问题,那就是纯小白根本不知道怎么开始学习.这里我要说一下什么叫做纯小白,你以为不知道变量,命令提示符,HTTP协议,这些就是小白了吗?那你就错了,我今天要说的是连怎么设置IP地址,怎么设置百度为首页,连自己的操作系统是winxp

Css定位之relative_慕课网课程笔记

前言 最近在慕课网上跟着张鑫旭大神重新学习一遍CSS相关的知识,以下是学习的笔记以及个人一些理解 relative对绝对定位的限制 1.限制绝对定位 绝对定位的top.left.right和bottom是相对最近的一个relative父元素的. 2.限制层级 绝对定位的层级优先级是低于其父元素相对定位的层级的 3.限制overflow 绝对定位可以不受父容器overflow的影响,即可以溢出,但是父元素加上relative后,即可以完美包裹绝对定位元素. relative自身定位 1 相对自身

网站优化之-SEO在网页制作中的应用(信息来自慕课网课程笔记)

一.SEO基本介绍. 1.搜索引擎工作原理. 2.seo简介:SEarch Engine Optimization,搜索引擎优化.为了提升网页在搜索引擎自然搜索结果中的收录数量及排序位置而做的优化行为,就是为了使百度.谷歌这些搜索引擎多多收录我们精心制作的网页,同时在网页搜索相关内容时,使网页链接排在搜索引擎店面. 分为以下两种: 1):白帽SEO:起到规范,改良网站设计的作用,使之对搜索引擎和用户更加友好,并且网站也能从搜索引擎中获得合理流量,这是搜索引擎鼓励和支持的. 2):黑帽SEO:利用

JavaScript学习——JS事件总结

回顾之前已经使用过的事件 (onsubmit.onclick.onload.onfocus.onblur.onmouseover.onmouseout) onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适(出现"用户名必填"等等) onclick/ondblclick:鼠标单击和双击事件 onkeydown/onkeypress:搜索引擎使用较多 onload:页面加载事件,所有的其它操作(匿名方式)都可以放到这个绑定的函数里面去.如果是有名称,那么在html页面中

安卓开发_慕课网_百度地图_添加覆盖物

学习内容来自“慕课网” 本片学习内容接自前四篇基础 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 安卓开发_慕课网_百度地图_实现模式转换 请先学习前4篇再学习本篇,因为本篇在前四篇的基础上进行代码的编写 一.新建一个类用来存放数据(距离,点赞数,介绍图等信息) 1 package com.example.map; 2 3 import java.io.Serializable; 4 import java.util.ArrayLi

安卓开发_慕课网_百度地图_实现方向传感器

学习内容来自“慕课网” 这里学习百度地图方向传感器功能 就是当转动手机的时候,地图上显示个人所在位置的图标的箭头变动 学习接自前两篇 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 思路: 传感器随着定位的开始而开启,随着定位的结束而结束 传感器获得位置的移动而更新方向 代码在前两篇的基础上修改 一.讲原本坐标的图标改成箭头图标 二.引入方向传感器 首先增添MainActivity.java中的自定义图标和方向传感器代码 看红色字体的部分 1 package com.examp

【慕课网】php工程师学习计划之我的学习笔记——01 入门必学web基础 htmlcss基础课程 篇

为了进一步学习PHP,本周我选定了慕课网的PHP工程师学习计划, 从今天2015-07-06 10:24:47开始从头学习:计划本周尽快学习完成本课程,谨此作为笔记. 有个好的学习计划和思路非常非常重要,非常感谢慕课网提供本套学习计划,希望更多地学习平台能提供像这样全面一条龙学习思路清晰地教程. 计划图:链接 我的学习状况:2015-07-06 10:29:46 开始随记: php工程师学习计划笔记——01 入门必学web基础 htmlcss基础课程 篇 入门篇: text-align:cent