vue-seamless-scroll使用中遇到关于click的问题

6 篇文章 1 订阅

使用vue-seamless-scroll实现数据无缝连续滚动

原理

基本原理是把要滚动的部分复制一份,滚动这两部分相同的内容,进而实现无缝连续滚动
在这里插入图片描述

遇到的问题

当ul1中的数据未滚动完时,ul2 部分的click事件不起作用,无法实现功能

(此时可见区域内一部分数据为ul1,一部分数据为ul2)
在这里插入图片描述

简单分析

第二部分无法操作和js的运行机制有关,需要重新绑定事件,具体原理也是一知半解,但是大致感觉问题是由于重复渲染,相同的部分绑定的事件不能同时运行,需要换个思路。当时同学提到了 js事件委托,需要好好了解一下。
事件委托
事件委托
阮一峰老师的js运行机制了解一下
事件委托依靠的就是事件冒泡和事件捕获的机制

事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。

所谓的事件委托就是通过监听一个父元素,来给不同的子元素绑定事件,减少监听次数,从而提升速度。

解决问题

1.给外层div加点击事件,通过event.target获取到点击的dom元素
在这里插入图片描述
获取到event 和 event.target如下
在这里插入图片描述

获取到了button之后,因为接下来的操作还需要用到ID和name,所以要给button绑定属性

id和name是button自带的属性,vue中自定义属性时还需要添加前缀 data- 获取时要加 dataset
在这里插入图片描述
在这里插入图片描述

控制台打印数据如下
在这里插入图片描述

现在获取到了所有想要的数据 和 要响应的事件,接下来执行事件即可。

代码如下:

 <div class="m_tableContent m_gasMonitoring" @click="handleClick($event)">
    <div class="m_tableTitle">
      <ul>
        <li>编号</li>
        <li>员工姓名</li>
        <li>一氧化碳(ppm)</li>
        <li>甲烷(%)</li>
        <li>氧气(%)</li>
        <li>温度(℃)</li>
        <li>湿度(%)</li>
        <li style="width: 30%">地点</li>
        <li>操作</li>
      </ul>
    </div>
    <vue-seamless-scroll :data="listData" :class-option="classOption" class="seamless-warp">
      <ul v-loading="loading" class="item seamless-table">
        <li v-for="(item,index) in listData" :key="index" class="seamless-row">
          <p class="m_rowItem ">{{ item.sequenceId }}</p>
          <p class="m_rowItem">{{ item.staffName }}</p>
          // 部分省略
           <p class="m_rowItem">
            <button :id="item.staffId" :name="item.staffName" :data-dept="item.deptName" type="danger" class="el-button el-button--danger el-button--mini is-plain" plain size="mini">呼叫</button>
          </p>
        </li>
      </ul>
    </vue-seamless-scroll>
      </div>
</template>
<script>
export default {
name: 'GasMonitorTable',
  methods: {
    handleClick(event) {
      console.log(event)
      console.log(event.target)
      this.staffInfo.staffId = event.target.id
      this.staffInfo.staffName = event.target.name
      this.staffInfo.deptName = event.target.dataset.dept
      this.handlePhoneStaff()
    }
}
}
</script>
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值