事件

一题目:

1.编写一个通用的事件监听函数

解答:请往下继续看

2.描述事件冒泡流程

a:dom树形结构网上冒

b:一层一层的触发事件

c:阻止冒泡

3.对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

解答:使用代理。代理的优点:1.代码简洁。2.减少浏览器内存占用

二知识点:

1.通用事件绑定

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8 </head>
 9 <body>
10 <div>
11     <input type="button" value="点击" id="btn1">
12     <div id="div1"></div>
13     <input type="button" value="点击" id="btn2">
14     <div id="div2"></div>
15     <a href="https://www.baidu.com/" id="link1">我是超链接</a>
16 </div>
17 </body>
18 <script>
19 var btn1 = document.getElementById('btn1')
20 var div1 = document.getElementById('div1')
21 btn1.addEventListener('click', function(event){
22     div1.innerHTML='按钮点击了'
23 })
24 
25 function bindEvent(elem, type ,fn){
26     elem.addEventListener(type,fn)
27 }
28 var btn2 = document.getElementById('btn2')
29 var div2 = document.getElementById('div2')
30 
31 bindEvent(btn2,'click',function(){
32     div2.innerHTML='按钮2点击了'
33 })
34 
35 var link1 = document.getElementById('link1')
36 bindEvent(link1,'click',function(e){
37     e.preventDefault();  // 阻止默认行为
38     console.log(112233)
39 })
40 
41 </script>
42 </html>

----注意注意注意

完善通用事件绑定

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8 </head>
 9 <body>
10 <div id="div1">
11     <p id="p1">激活</p>
12     <p id="p2">取消1</p>
13     <p id="p3">取消2</p>
14     <p id="p4">取消3</p>
15 </div>
16 <p id="p5">取消4</p>
17 </body>
18 <script>
19 var div1 = document.getElementById('div1')
20 var p5 = document.getElementById('p5')
21 
22 function bindEvent(elem, type, selector ,fn){
23     if(fn==null){
24         fn = selector
25         selector = null
26     }
27     elem.addEventListener(type,function(e){
28         var target
29         if(selector){
30             // 代理
31             target = e.target
32             if(target.matches(selector)){
33                 fn.call(target,e)
34             }
35         }
36         else{
37             // 不是代理
38             fn(e)
39         }
40     })
41 }
42 
43 bindEvent(p5,'click',function(e){
44 console.log(p5.innerHTML)
45 })
46 
47 </script>
48 </html>

 

2.事件冒泡

 1 1 <!DOCTYPE html>
 2  2 <html lang="en">
 3  3 <head>
 4  4     <meta charset="UTF-8">
 5  5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6  6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7  7     <title>Document</title>
 8  8 </head>
 9  9 <body>
10 10 <div id="div1">
11 11     <p id="p1">激活</p>
12 12     <p id="p2">取消</p>
13 13     <p id="p3">取消</p>
14 14     <p id="p4">取消</p>
15 15 </div>
16 16 <div id="div2">
17 17     <p id="p5">取消</p>
18 18     <p id="p6">取消</p>
19 19 </div>
20 20 </body>
21 21 <script>
22 22 var p1 = document.getElementById('p1')
23 23 var body = document.body
24 24 
25 25 function bindEvent(elem, type ,fn){
26 26     elem.addEventListener(type,fn)
27 27 }
28 28 
29 29 bindEvent(p1,'click',function(e){
30 30     e.stopPropagation();  // 阻止冒泡行为
31 31     console.log('激活')
32 32 })
33 33 
34 34 bindEvent(body,'click',function(e){
35 35     console.log('取消')
36 36 })
37 37 </script>
38 38 </html>

3.代理

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8 </head>
 9 <body>
10 <div id="div1">
11     <p id="p1">激活</p>
12     <p id="p2">取消1</p>
13     <p id="p3">取消2</p>
14     <p id="p4">取消3</p>
15 </div>
16 </body>
17 <script>
18 var div1 = document.getElementById('div1')
19 
20 function bindEvent(elem, type ,fn){
21     elem.addEventListener(type,fn)
22 }
23 
24 bindEvent(div1,'click',function(e){
25     console.log(e.target)
26     console.log(e.target.innerHTML)
27 })
28 
  29 </script>
30 </html>

 

转载于:https://www.cnblogs.com/zhswater/p/11167368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值