@@ -1155,18 +1155,116 @@ history.forward();
11551155```
11561156
11571157## 05-01
1158- ### 事件-知识点
1159- * 编写一个通用的事件监听函数
1160- * 描述事件冒泡流程
1161- * 对于一个无线下拉加载图片的页面,如何给每个图片绑定事件
1162- #### 知识点
1163- * 通用事件绑定
1158+ #### 编写一个通用的事件监听函数
1159+ #### 描述事件冒泡流程
1160+ * DOM树形结构
1161+ * 事件冒泡
1162+ * 阻止冒泡
1163+ * 冒泡的应用
1164+ #### 对于一个无线下拉加载图片的页面,如何给每个图片绑定事件
1165+ * 使用代理
1166+ * 知道代理的有点
1167+
1168+ ##### 通用事件绑定
1169+
11641170``` JavaScript
11651171var btn = document .getElementById (' btn1' );
1166- btn.
1172+ btn .addEventListener (' click' ,function (event ) {
1173+ console .log (' clicked' );
1174+ })
1175+
1176+ function bindEvent (elem ,type ,fn ) {
1177+ elem .addEventListener (type,fn);
1178+ }
1179+ var a = document .getElementById (' link1' )
1180+ bindEvent (a,' click' ,function (e ){
1181+ e .preventDefault (); // 阻止默认行为
1182+ alert (' clicked' );
1183+ });
1184+ ```
1185+
1186+ * 关于IE低版本的兼容性
1187+ * IE低版本使用attachEvent绑定事件,和W3C标准不一样
1188+ * IE低版本使用量非常少,很多网站早已不支持
1189+ * 建议对IE低版本的兼容性:了解即可,无需深究
1190+ * 如果遇到对IE低版本要求苛刻的面试,果断放弃
1191+
1192+ #### 事件冒泡
1193+
1194+ ``` html
1195+ <body >
1196+ <div id =" div1" >
1197+ <p id =" p1" >激活</p >
1198+ <p id =" p2" >取消</p >
1199+ <p id =" p3" >取消</p >
1200+ <p id =" p4" >取消</p >
1201+ </div >
1202+ <div id =" div2" >
1203+ <p id =" p5" >取消</p >
1204+ <p id =" p6" >取消</p >
1205+ </div >
1206+ </body >
1207+ ```
1208+
1209+ ``` JavaScript
1210+ var p1 = document .getElementById (' p1' );
1211+ var body = document .body ;
1212+ bindEvent (p1,' click' ,function (e ) {
1213+ e .stopPropatation ();
1214+ alert (' 激活' );
1215+ });
1216+ bindEvent (body,' click' ,function (e ){
1217+ alert (' 取消' );
1218+ })
1219+ ```
1220+
1221+ #### 代理
1222+ ``` html
1223+ <div id =" div1" >
1224+ <a href =" #" >a1</a >
1225+ <a href =" #" >a2</a >
1226+ <a href =" #" >a3</a >
1227+ <a href =" #" >a4</a >
1228+ <!-- 会随时新增更多a标签 -->
1229+ </div >
1230+ ```
1231+ ``` JavaScript
1232+ var div1 = document .getElementById (' div1' );
1233+ div1 .addEventListener (' click' ,function (e ) {
1234+ var target = e .target ;
1235+ if (target .nodeName === ' A' ) {
1236+ alert (target .innerHTML );
1237+ }
1238+ })
1239+ ```
1240+ #### 完善通用绑定事件的函数
1241+
1242+ ``` JavaScript
1243+ // 使用代理
1244+ var div1 = document .getElementById (' div1' );
1245+ bindEvent (div1,' click' ,' a' ,function (e ) {
1246+ console .log (this .innerHTML );
1247+ })
1248+ ```
1249+
1250+ ``` JavaScript
1251+ function bindEvent (elem ,type ,selector ,fn ) {
1252+ if (fn == null ) {
1253+ fn = selector;
1254+ }
1255+ elem .addEventListener (type,function (e ) {
1256+ var target;
1257+ if (selector) {
1258+ target = e .target ;
1259+ if (target .matches (selector)) {
1260+ fn .call (target,e);
1261+ }
1262+ }else {
1263+ fn (e);
1264+ }
1265+ })
1266+ }
11671267```
1168- * 事件冒泡
1169- * 代理
11701268---
11711269
11721270### JSDemo JS小程序
0 commit comments