vue按住shift鍵多選方式(以element框架的table為例)
vue按住shift鍵多選

1、首先要在element組件中寫一個事件
@select = “pinSelect”,pinSelect是自定義命名

2、在data中添加兩個變量
自定義命名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ā)事件,用來實(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, // 這里給一個變量作為起點(diǎn)
pin: false, // 這里給一個變量,默認(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); // 通過ref打點(diǎn)調(diào)用toggleRowSelection方法,第二個必須為true
i++;
}
} else {
this.origin = index.index; // 沒按住記錄起點(diǎn)
}
}
// 這里是select事件結(jié)束
},
// 這里是獲取鍵盤事件
mounted(){
window.addEventListener('keydown', code => { // 這個是獲取鍵盤按住事件
// console.log(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;
}
});
},
created(){
this.tableData.forEach((item, index) => {// 遍歷索引,賦值給data數(shù)據(jù)
item.index = index;
})
}
}
</script>
<style scoped>
</style>總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue實(shí)現(xiàn)動態(tài)查詢規(guī)則生成組件
今天我們來給大家介紹下在Vue開發(fā)中我們經(jīng)常會碰到的一種需求場景,本文主要介紹了Vue動態(tài)查詢規(guī)則生成組件,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Vue+Element UI+vue-quill-editor富文本編輯器及插入圖片自定義
這篇文章主要為大家詳細(xì)介紹了Vue+Element UI+vue-quill-editor富文本編輯器及插入圖片自定義,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08
vue-router如何實(shí)現(xiàn)history模式配置
這篇文章主要介紹了vue-router如何實(shí)現(xiàn)history模式配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
解決betterScroll在vue中存在圖片時,出現(xiàn)拉不動的問題
今天小編就為大家分享一篇解決betterScroll在vue中存在圖片時,出現(xiàn)拉不動的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue3中Slot插槽透傳,二次封裝Arco的table組件詳解
這篇文章主要介紹了Vue3中Slot插槽透傳,二次封裝Arco的table組件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
vue讀取本地的excel文件并顯示在網(wǎng)頁上方法示例
這篇文章主要介紹了vue讀取本地的excel文件并顯示在網(wǎng)頁上方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
vue中el-form-item展開項(xiàng)居中的實(shí)現(xiàn)方式
這篇文章主要介紹了vue中el-form-item展開項(xiàng)居中的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

