iview中轮播图组件在loop自动播放时,添加的点击事件有时不触发

问题描述:使用iview中的Carousel组件并开启循环属性loop时,点击每个轮播图片时进行对应事件处理;但是轮播循环一周后,点击轮播图片时点击事件并没有触发;

问题产生原因:

        因为开启loop循环属性后,生成的HTML代码里有两个一模一样的div节点,但是点击事件只绑定在了第一个div里的子节点上;第二个div中的子节点没有该点击事件;所以导致循环播放第二个div中的内容时,是触发不了我们绑定的点击事件;

第一个div中子节点的点击事件:该事件就是我们手动添加的事件;

 第二个div中的子节点没有我们手动添加的事件;

刚开始时点击事件添加在每个轮播块CarouselItem上;代码如下:

<Carousel class="Carousel-list" :autoplay="getAuto" loop :radius-dot="false" 
:autoplay-speed="2500" arrow="always">
   <CarouselItem v-for="(item, index) in bannerItem.data" :key="index" 
       @click.native="pushRouter(item.pathType, item.path)">
      <img :src="item.pic" alt="">
    </CarouselItem>
 </Carousel>

解决方案:

       方案1: 去掉loop循环属性;

       方案2:点击事件添加到父节点上,通过事件委托的方式进行子节点事件的处理,代码如下:

        在Carousel外层添加一个div标签,将点击事件绑在该标签上; (注意:如果直接将点击事件绑在Carousel标签上,还是会有问题;)然后在img标签上通过data-*的方式嵌入自定义数据,用于标识当前点击的子节点;

data-*的用法可参考链接:HTML data-* 属性

<div @click="pushRouter($event)">
  <Carousel class="Carousel-list" :autoplay="getAuto" loop :radius-dot="false" 
      :autoplay-speed="2500" arrow="always" :ref="bannerItem.id" >
      <CarouselItem v-for="(item, index) in bannerItem.data" :key="index">
          <img :src="item.pic" alt="" :data-id="item.id" :data-path="item.path" 
            :data-path-type="item.pathType">
      </CarouselItem>
   </Carousel>
</div>

<script>
 private pushRouter (e) {
    const { path, pathType: type, id} = e.target.dataset 
    if(e.target.type === 'button' || !id) return
    if (+type === 0) {
      return false
    } else {
      this.handleLink(+type, path)
    }
  }
</script>
iview轮播图组件Carousel)是一个常用的 UI 组件,它可以帮助你在前端展示一系列图片并提供自动切换的功能。以下是基本的使用步骤: 1. 首先,你需要安装 iView 框架和相关的依赖。如果是 Vue.js 开发环境,可以使用 npm 或 yarn 进行安装: ```bash npm install iview axios # 或者 yarn add iview axios ``` 2.Vue 文件中引入 Carousel 组件和样式: ```html <template> <div> <carousel :autoplay="true" v-model="activeIndex"> <carousel-item v-for="(item, index) in items" :key="index"> <img :src="item.src" alt="Slide {{ index + 1 }}"> </carousel-item> </carousel> </div> </template> <script> import { Carousel, CarouselItem } from 'iview'; export default { components: { Carousel, CarouselItem, }, data() { return { activeIndex: 0, items: [ // 图片数组,每项包含 src 属性 { src: 'image1.jpg' }, { src: 'image2.jpg' }, { src: 'image3.jpg' }, // 如果你想在切换显示过渡效果,添加其他页面,可以创建一个占位元素 // 当前页是第 4 张,那么过渡到第 5会先显示这个占位元素 { src: 'placeholder.jpg' }, { src: 'image5.jpg' }, ], }; }, }; </script> ``` 在这个例子中,`autoplay="true"` 表示轮播图默认开启自动切换模式,`v-model="activeIndex"` 将当前活动的索引绑定到数据中的 `activeIndex`。 如果你想要在切换显示一个过渡效果,比如让其他页面快速闪过,这通常需要配合 CSS 动画来实现,而是直接在 Carousel 组件内部设置。你可以创建一个占位元素,当切换到下一张,将它显示出来,然后立即隐藏上一张,这样用户可能会觉得有一种“闪烁”的效果。具体的CSS动画部分需要根据你的实际需求来编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wen_文文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值