vue el-checkbox按下shift键实现批量选择数据

1.先看下效果

在这里插入图片描述
在这里插入图片描述

2.代码分析

1.添加html代码,先将列表写出来
<el-button @click="checkAll(true)">全选</el-button>
 <el-button @click="checkAll(false)">全不选</el-button>
 <el-button @click="checkInvert">反选</el-button>
<el-checkbox-group v-model="selectData" class="checkbox-group" @change="selectionChange">
    <el-checkbox
    	v-for="(val, key) in tableData"
    	:key="key"
    	:label="val"
    	@click.native="itemClick(val)"
    >
    	{
  { val.name }}
    </el-checkbox>
</el-checkbox-group>
2.初始化数据:给原数据添加index属性
created() {
   
   this.tableData.forEach((item, index) => {
    // 遍历索引,赋值给data数据
     item.index = index
   })
 },
3.设置一个flag记录是否按下了shift键,通过监听键盘按下和松开给flag赋值
window.addEventListener('keydown', code => {
   
 if (code.keyCode === 16 && code.shiftKey) {
    // 判断是否按住shift键,是就把pin赋值为true
     this.pin = true
   }
 })
window.addEventListener('keyup', code => {
   
  if(code.keyCode === 16){
    // 判断是否松开shift键,是就把pin赋值为false
    this.pin = false
  }
 })
4.el-checkbox勾选会触发change事件,所以在change绑定的selectionChange函数进行操作:当按住shift键时,将起止区间内的数据都选上
// 多选框勾选触发
selectionChange(item) {
   
 const data = this.tableData // 获取所有数据
 const origin = this.origin // 起点数 从-1开始
 const endIdx = item.length === 0 ? -1 : item[item.length - 1].index // 终点数
 if (this.pin && item.includes(data[origin])) {
    // 判断按住
   const sum = Math.abs(origin - endIdx) + 1 // 这里记录终点
   const min = Math.min(origin, endIdx) // 这里记录起点
   let i = 0
   while (i < sum) {
   
     const index = min + i
     const flagIdx = this.selectData.indexOf(data[index]) // 判断区间内的数据是否已选中
     if (flagIdx === -1) {
    // 值为-1表示未选中
       this
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值