使用el-table,做一个方向键控制列表选中项,上下移动的效果
时间: 2024-03-15 17:43:57 浏览: 62
在List Control中实现列表项目的上下移动
5星 · 资源好评率100%
好的,这个可以通过监听键盘事件来实现。你可以在el-table组件上添加@keydown.native事件监听,然后在事件回调函数中判断按下的键盘方向键,根据方向键的不同来决定选中项的移动方向。
具体实现可以参考以下代码:
```html
<template>
<el-table
:data="tableData"
:row-class-name="rowClassName"
@keydown.native="handleKeyDown"
ref="table"
highlight-current-row
:current-row-key="currentRow"
>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '张三', age: 18, address: '北京市' },
{ name: '李四', age: 20, address: '上海市' },
{ name: '王五', age: 22, address: '广州市' },
{ name: '赵六', age: 24, address: '深圳市' }
],
currentRow: null
}
},
methods: {
rowClassName({ row, rowIndex }) {
return this.currentRow === row ? 'selected-row' : ''
},
handleKeyDown(event) {
const keyCode = event.keyCode
const table = this.$refs.table
const currentRow = table.currentRow
let index = table.store.states.data.indexOf(currentRow)
if (keyCode === 38) { // 上箭头
index = index === 0 ? 0 : index - 1
} else if (keyCode === 40) { // 下箭头
index = index === this.tableData.length - 1 ? index : index + 1
}
this.currentRow = this.tableData[index]
}
}
}
</script>
<style scoped>
.selected-row {
background-color: #ebebeb;
}
</style>
```
这里我们通过在el-table组件上添加@keydown.native事件监听,然后在handleKeyDown方法中判断按下的键盘方向键。如果是上箭头,就将选中项移动到上一行;如果是下箭头,就将选中项移动到下一行。最后更新currentRow的值,使得选中项随之更新,并且通过rowClassName方法给选中的行添加样式。
阅读全文