vue按住shift鍵多選方式(以element框架的table為例)
vue按住shift鍵多選
1、首先要在element組件中寫一個(gè)事件
@select = “pinSelect”,pinSelect是自定義命名
2、在data中添加兩個(gè)變量
自定義命名origin: -1是起點(diǎn)數(shù),pin:false是默認(rèn)不按住
3、在 mounted()寫鍵盤事件
keydown按住和keyup松開事件
4、在created()遍歷數(shù)據(jù)數(shù)組
并且賦值索引
5、然后在methods:中寫
完整的代碼
<template> <!-- 按住shift鍵選擇 --> <div> <!-- 這里添加element組件table的select觸發(fā)事件,用來(lái)實(shí)現(xiàn)按住shift多選的 --> <el-table :data="tableData" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange" @select = "pinSelect" ref="multipleTable" > <el-table-column type="selection" width="55"> </el-table-column> <el-table-column label="日期" width="120"> <template slot-scope="scope">{{ scope.row.date }}</template> </el-table-column> <el-table-column prop="name" label="姓名" width="120"> </el-table-column> <el-table-column prop="address" label="地址" show-overflow-tooltip> </el-table-column> </el-table> <div style="margin-top: 20px"> <el-button @click="toggleSelection([tableData[1], tableData[2]])">切換第二、第三行的選中狀態(tài)</el-button> <el-button @click="toggleSelection()">取消選擇</el-button> </div> </div> </template>
<script> export default { name:'ElementTable', data() { return { origin: -1, // 這里給一個(gè)變量作為起點(diǎn) pin: false, // 這里給一個(gè)變量,默認(rèn)為false,不按住 tableData: [{ date: '2016-05-01', name: '王幼虎', address: '上海市普陀區(qū)金沙江路 1511 弄' }, { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1512 弄' }, { date: '2016-05-03', name: '王中虎', address: '上海市普陀區(qū)金沙江路 1513 弄' }, { date: '2016-05-04', name: '王老虎', address: '上海市普陀區(qū)金沙江路 1514 弄' }, { date: '2016-05-05', name: '王死虎', address: '上海市普陀區(qū)金沙江路 1515 弄' }, { date: '2016-05-06', name: '王骨虎', address: '上海市普陀區(qū)金沙江路 1516 弄' }, { date: '2016-05-07', name: '王灰虎', address: '上海市普陀區(qū)金沙江路 1517 弄' }], multipleSelection: [] } }, methods: { toggleSelection(rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggleRowSelection(row); }); } else { this.$refs.multipleTable.clearSelection(); } }, handleSelectionChange(val) { this.multipleSelection = val; }, // 這里是select事件開始 pinSelect (item, index) { const data = this.$refs.multipleTable.tableData; // 獲取所以數(shù)據(jù) const origin = this.origin; // 起點(diǎn)數(shù) 從-1開始 const endIdx = index.index; // 終點(diǎn)數(shù) if (this.pin && item.includes(data[origin])) { // 判斷按住 const sum = Math.abs(origin - endIdx) + 1;// 這里記錄終點(diǎn) const min = Math.min(origin, endIdx);// 這里記錄起點(diǎn) let i = 0; while (i < sum) { const index = min + i; this.$refs.multipleTable.toggleRowSelection(data[index], true); // 通過(guò)ref打點(diǎn)調(diào)用toggleRowSelection方法,第二個(gè)必須為true i++; } } else { this.origin = index.index; // 沒(méi)按住記錄起點(diǎn) } } // 這里是select事件結(jié)束 }, // 這里是獲取鍵盤事件 mounted(){ window.addEventListener('keydown', code => { // 這個(gè)是獲取鍵盤按住事件 // console.log(code); // 這個(gè)是你按住鍵盤打印出鍵盤信息,在瀏覽器中自行查看 if (code.keyCode === 16 && code.shiftKey) { // 判斷是否按住shift鍵,是就把pin賦值為true this.pin = true; } }); window.addEventListener('keyup', code => { // 這個(gè)是獲取鍵盤松開事件 if(code.keyCode === 16){ // 判斷是否松開shift鍵,是就把pin賦值為false this.pin = false; } }); }, created(){ this.tableData.forEach((item, index) => {// 遍歷索引,賦值給data數(shù)據(jù) item.index = index; }) } } </script> <style scoped> </style>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue如何獲取url路由地址和參數(shù)簡(jiǎn)單示例
這篇文章主要給大家介紹了Vue如何獲取url路由地址和參數(shù)的相關(guān)資料,通過(guò)簡(jiǎn)單的代碼示例,幫助讀者快速掌握Vue路由的基本用法,需要的朋友可以參考下2023-03-03vue3的父?jìng)髯訂?wèn)題(單項(xiàng)數(shù)據(jù)流)
這篇文章主要介紹了vue3的父?jìng)髯訂?wèn)題(單項(xiàng)數(shù)據(jù)流),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Vue+java實(shí)現(xiàn)時(shí)間段的搜索示例
本文主要介紹了Vue+java實(shí)現(xiàn)時(shí)間段的搜索示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06vue中使用sass及解決sass-loader版本過(guò)高導(dǎo)致的編譯錯(cuò)誤問(wèn)題
這篇文章主要介紹了vue中使用sass及解決sass-loader版本過(guò)高導(dǎo)致的編譯錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue 動(dòng)態(tài)設(shè)置img的src地址無(wú)效,npm run build 后找不到文件的解決
這篇文章主要介紹了vue 動(dòng)態(tài)設(shè)置img的src地址無(wú)效,npm run build 后找不到文件的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Vue3中虛擬dom轉(zhuǎn)成真實(shí)dom的過(guò)程詳解
Vue.js?在其運(yùn)行過(guò)程中會(huì)將模板編譯成虛擬?DOM?(VNode),然后再將?VNode?渲染成實(shí)際的?DOM?節(jié)點(diǎn),這個(gè)過(guò)程是由?Vue?內(nèi)部的編譯器和渲染系統(tǒng)完成的,本文給大家介紹了Vue3中虛擬dom轉(zhuǎn)成真實(shí)dom的過(guò)程,需要的朋友可以參考下2024-09-09