问题说明
利用 [vue-seamless-scroll]( https://github.com/chenxuan0000/vue-seamless-scroll) 实现了一个图片的轮播,流转效果。
当只有一个时,会再创建一个一模一样的Html,给 li 添加了点击事件,但是没有作用,没有反应。
代码如下:
问题解决
1.分析 vue-seamless-scroll
可以看到,有一部分是直接使用的 slot(我们自己定义的元素)里面渲染之后的html,并没有绑定事件。
2.使用事件委托实现子元素的点击事件处理
1. 说明:
事件委托理解: https://cloud.tencent.com/developer/article/2434471
2. 知识简要回顾:
1)事件流:一个完整的事件流包括三个阶段:事件捕获、目标阶段和事件冒泡阶段。
2)事件冒泡:事件从目标元素接收,逐层往父组件传播直至 document。(有些事件不支持冒泡,如focus等等)
3)事件捕获:与冒泡相反,从document 往里直至目标元素接收到。
4)事件委托:就是利用事件流中的冒泡效应,将子元素的处理程序统一绑定到父元素上,针对动态渲染的子元素较为友好。
将事件统一放到外层的 div 上,点击之后,利用 composedPath 来获取到 子元素绑定的 data-index 数据,来触发点击事件。