el-tree双向内容滚动选中,不使用插件
时间: 2023-08-16 18:06:59 浏览: 130
要实现el-tree的双向内容滚动选中功能,可以通过以下步骤进行操作:
1. 在el-tree的配置项中设置highlightCurrent属性为true,这样在选中某个节点时,该节点会被高亮显示。
2. 在el-tree的样式中添加以下代码,来设置高亮显示时的样式:
```css
.el-tree-node.is-highlight-current > .el-tree-node__content {
background-color: #f5f7fa; /* 设置高亮背景色 */
}
```
3. 在el-tree的mounted钩子函数中,监听树节点的点击事件,并获取点击的节点对应的dom元素。
```javascript
mounted() {
this.$nextTick(() => {
const treeEl = this.$el.querySelector('.el-tree')
treeEl.addEventListener('click', this.handleTreeClick)
})
},
methods: {
handleTreeClick(event) {
const target = event.target.closest('.el-tree-node')
if (target) {
// 处理节点选中逻辑
}
}
}
```
4. 在处理节点选中逻辑时,需要将当前选中的节点滚动到可视区域内。可以通过以下代码实现:
```javascript
const treeEl = this.$el.querySelector('.el-tree')
const nodeRect = target.getBoundingClientRect()
const treeRect = treeEl.getBoundingClientRect()
if (nodeRect.bottom > treeRect.bottom) {
treeEl.scrollTop = treeEl.scrollTop + nodeRect.bottom - treeRect.bottom
} else if (nodeRect.top < treeRect.top) {
treeEl.scrollTop = treeEl.scrollTop - treeRect.top + nodeRect.top
}
```
5. 同时,当树节点滚动时,也需要将当前可视区域内的节点高亮显示。可以通过以下代码实现:
```javascript
const treeEl = this.$el.querySelector('.el-tree')
const nodes = treeEl.querySelectorAll('.el-tree-node')
const visibleNodes = Array.from(nodes).filter(node => {
const nodeRect = node.getBoundingClientRect()
const treeRect = treeEl.getBoundingClientRect()
return nodeRect.bottom > treeRect.top && nodeRect.top < treeRect.bottom
})
visibleNodes.forEach(node => {
node.classList.add('is-highlight-current')
})
```
6. 最后,还需要在节点取消选中时,将该节点的高亮样式移除。
```javascript
handleTreeClick(event) {
const target = event.target.closest('.el-tree-node')
if (target) {
const selectedNodes = this.$refs.tree.getCheckedNodes()
selectedNodes.forEach(node => {
node.$el.classList.remove('is-highlight-current')
})
target.classList.add('is-highlight-current')
this.scrollIntoView(target)
}
}
```
通过以上步骤,即可实现el-tree的双向内容滚动选中功能。
阅读全文