js下 Day09、事件(二)
一.事件流
事件流描述的是从页面中接收事件的顺序,目前主要有三个模型:
#1. 事件冒泡:
事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素
#2. 事件捕获
不太具体的节点更早接收事件,而最具体的元素最后接收事件,和事件冒泡相反
#3. DOM事件流
DOM2级事件规定事件流包括三个阶段: 事件捕获阶段,处于目标阶段,事件冒泡阶段。首先发生的是事件捕获,为截取事件提供机会,然后是目标阶段,最后是冒泡阶段

DOM2级事件第三个参数布尔值: true 事件捕获 false 事件冒泡
阻止冒泡: e.stopPropagation()
取消默认行为: e.preventDefault()
事件源: e.target || e.srcElement
#二.事件委托
事件委托就是利用事件冒泡将子元素某一类型的事件委托给父元素集中管理。
事件委托绑定事件比循环绑定事件好在哪?
\1. 减少页面上的事件处理程序,减少DOM操作提高性能
\2. 简化动态渲染的数据其他的dom操作

#三.案例-三级联动
效果图:

功能思路分析:
功能一: 封装公用渲染方法
\1. 省市区结构一致,数据不同,可封装公用方法,点击时调用,传递不同数据
\2. 通过自定义属性记录数据的下标
\3. 省和市的数据都是数组对象格式,区是数组格式,渲染是需要做个判断

功能二:省份渲染
\1. 给省份盒子绑定点击事件
\2. 调用渲染方法,将省份数据渲染到ul中,并显示ul
\3. 利用事件委托,判断事件源是否为li,是则选中并隐藏ul
\4. 通过getAttribute()记录省份下标
\5. 重置市和区

功能三:城市渲染
\1. 给城市盒子绑定点击事件
\2. 调用渲染方法,通过省份下标找到城市数据,渲染到ul中,并显示ul
\3. 利用事件委托,判断事件源是否为li,是则选中并隐藏ul
\4. 通过getAttribute()记录城市下标
\5. 重置区

功能四:区域渲染
\1. 给区域盒子绑定点击事件
\2. 调用渲染方法,通过省份下标和城市下标找到区域数据,渲染到ul中,并显示ul
\3. 利用事件委托,判断事件源是否为li,是则选中并隐藏ul

#四.今日小结
事件流:事件传播的机制
分为三个阶段: 捕获阶段 ==> 目标阶段 ==> 冒泡阶段
捕获:由不具体到具体 ==> 外到内
冒泡:由具体到不具体 ==> 内到外
阻止冒泡: e.stopPropagation()
取消默认行为: e.preventDefault()
事件源: e.target || e.srcElement
获取自定义属性: 元素.getAttribute()
#五.作业 -- 标签库增删
效果图:

功能思路分析:
1. 添加自定义标签
(1) 点击添加标签按钮,创建标签
(2) 获取文本框的内容
(3) 添加到选中盒子里
2. 展开收起标签库
\3. 标签库渲染
(1) 模拟数据,渲染标签
4. 添加标签库标签
(1) 点击标签库中的标签添加到选中区域( 事件委托 )
(2) 选中项高亮
5. 删除标签
判断删除标签,是标签库中的标签则取消高亮( 事件委托 )
js下 Day09、事件(二)的更多相关文章
- 从零开始的JS生活(二)——BOM、DOM与JS中的事件
上回书说道,JS中变量.运算符.分支结构.循环和嵌套循环等内容.本回就由本K给大伙唠唠JS中的BOM.DOM和事件. 一."花心大萝卜"--BOM 1.震惊,FFF团为何对BOM举 ...
- Node.js event loop 和 JS 浏览器环境下的事件循环的区别
Node.js event loop 和 JS 浏览器环境下的事件循环的区别: 1.线程与进程: JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 进程是 CPU ...
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- js的touch事件的实际引用
一开始做前端页面的时候,接触的也是js,但是随后便被简单高效的jquery吸引过去,并一直使用至今. 而js,则被我主观的认为底层技术而抛弃. 直到这几天工作需要,研究移动端页面的触屏滑动事件,搜索j ...
- js中冒泡事件和捕获事件
js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获 ...
- CSS+JS下拉菜单和纯CSS下拉菜单
下拉菜单 (思路:先把二级定位到屏幕外,鼠标悬停重新定位回来:另一个就是ul浮动,li也浮动) 下拉菜单的一般思路就是把子导航嵌套在无序列表中,把列表定位到屏幕之外,当鼠标悬停在其父列表项上时,重新定 ...
- 看懂此文,不再困惑于 JS 中的事件设计
看懂此文,不再困惑于 JS 中的事件设计 今天刚在关注的微信公众号看到的文章,关于JS事件的,写的很详细也很容易理解,相关的知识点都有总结到,看完就有种很舒畅的感觉,该串起来的知识点都串起来了.反正一 ...
- node.js 下依赖Express 实现post 4种方式提交参数
上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...
- js中的事件,内置对象,正则表达式
[JS中的事件分类] 1.鼠标事件: click/dbclick/mouseover/mouseout/mousemove/mousedown/mouseup 2.键盘事件: keydown: 键盘按 ...
随机推荐
- FL Studio钢琴卷轴之刷子工具以及其他
上一篇文章我们重点讲解了FL Studio钢琴卷轴的画笔工具,今天我们就来讲解钢琴卷轴窗口中剩下的工具.由于接下来的工具都很简单,所以我们将放在一起讲,现在就和小编一起来看看FL Studio钢琴卷轴 ...
- Camtasia中对给录制的视频添加视觉效果
视频创作和后期剪辑对很多人来说是一件很头痛的事,对着屏幕一段一段.一帧一帧的进行调整会让人十分的心烦,有时花费了大量时间剪出来的视频质量却不高,让人有一种想砸键盘的冲动. 这种问题,除非是原视频素材质 ...
- ubuntu安装php的 redis扩展
wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gztar -zxvf 2.2.4.tar.gz cd phpredis-2.2 ...
- java类,函数传参
1 package 传参练习; 2 //学生姓名组成的数组:指定区间和查找的名字返回此人是否存在(如果存在返回位置否则-1) 3 public class test1 { 4 public stati ...
- MySQL下载及使用
MySQL下载及使用 在下载MySQL的过程当中一般都不会下载最新版本的软件,因为最新版本的MySQL可能会出现各种问题,也不推荐在原来的版本上更新到最新版本,因为这样可能导致原本项目能正常运行,更新 ...
- `prometheus-net.DotNetRuntime` 获取 CLR 运行指标原理解析
prometheus-net.DotNetRuntime 介绍 Intro 前面集成 Prometheus 的文章中简单提到过,prometheus-net.DotNetRuntime 可以获取到一些 ...
- MVTMVC 区别
1,MVC的意思是 M:model V:views C:controller model是 主要是封装对数据库层的访问,对数据库中的数据进行增删改查操作 views 是 用于封装结果, 生程页面展示 ...
- 分享篇:聊一聊 15.5K 的 FileSaver,是如何工作的?
聊一聊 15.5K 的 FileSaver,是如何工作的? FileSaver.js 是在客户端保存文件的解决方案,非常适合在客户端上生成文件的 Web 应用程序.它简单易用且兼容大多数浏览器,被作为 ...
- 赶紧收藏吧!MyBatis-Plus万字长文图解笔记,错过了这个村可就没这个店了
简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生 愿景 我们的愿景是成为 MyBatis 最好的搭档 ...
- zookeeper基础笔记
一.安装 1.安装jdk 2.安装Zookeeper 3.单机模式(stand-alone):安装目录/conf 复制 zoo_sample.cfg 并粘贴到当前目录下,命名zoo.cfg. 二. ...