【11】大厂面试知识总结 - JS-Web-API-事件

题目

  • 编写一个通用的事件监听函数
  • 描述事件冒泡的流程
  • 无限下拉的列表,如何监听每个图片的点击?

知识点

  • 事件绑定
const btn = document.getElementById('btn1')
btn.addEventListener('click', event => {
	console.info('clicked')
})

function bindEvent(elem, type, fn) {
	elem.addEventListener(type, fn)
}

  • 事件冒泡
<body>
	<div id="div1">
		<p id="p1">激活</p>
		<p id="p2">取消</p>
		<p id="p3">取消</p>
		<p id="p4">取消</p>
	</div>
		<div id="div2">
		<p id="p5">取消</p>
		<p id="p6">取消</p>
	</div>
</body>
<script>
	const p1 = document.getElementById('p1')
	const body = document.body
	bindEvent(p1, 'click', event => {
	    event.stopPropagation() // 阻止冒泡
	    console.log('激活')
	})
	
	bindEvent(body, 'click', event => {
	    console.log('取消')
	    // console.log(event.target)
	})
</script>
  • 事件代理
  • 代码简洁
  • 减少浏览器内存占用
  • 但是,不要滥用
<div id="div3">
	<a href="#">a1</a>
	<a href="#">a2</a>
	<a href="#">a3</a>
	<a href="#">a4</a>
</div>
<button>点击增加一个 a 标签</button>

<script>
	const div3 = document.getElementById("div3")
	bindEvent(div3, 'click', event => {
	    event.preventDefault()
	    const target = event.target
	    if (target.nodeName === 'A') {
	        console.log(target.innerHTML)
	    }
	})
</script>

通用的事件绑定函数

function bindEvent(elem, type, selector, fn) {
    if (fn == null) {
        fn = selector
        selector = null
    }
    elem.addEventListener(type, event => {
        const target = event.target
        if (selector) {
            // 代理绑定
            if (target.matches(selector)) {
                fn.call(target, event)
            }
        } else {
            // 普通绑定
            fn.call(target, event)
        }
    })
}

问题解答

  • 编写一个通用的事件监听函数
  • 描述事件冒泡的流程
  • 无限下拉的图片列表,如何监听每个图片的点击?

描述事件冒泡的流程

  • 基于DOM树形结构
  • 事件会顺着触发元素往上冒泡
  • 应用场景:代理

无限下拉图片列表,如何监听每个图片的点击

  • 事件代理
  • 用e.target获取触发元素
  • 用matches来判断是否是触发元素

小结

事件绑定
事件冒泡
事件代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值