vue传送门组件实现分类树的聚焦编辑

大家好!咱们已经学习过了spring boot小卷生鲜电商项目实战中商品分类的后台接口开发,再借助咱们前面介绍的juan-admin后台管理平台来开发商品分类树组件,就可以实现前后端的交互啦!在实现前端组件开发与后台接口对接的过程中,小卷会以把每个知识点拆解开来,单独成篇的介绍其在实际项目中的应用,让小伙伴们每天收获多一点点。

传送门组件Teleport

所谓的传送门组件------Teleport,就是用户只用关心vue html模板中的数据绑定以及事件等操作,而html内容的渲染结果可以通过一个传送门组件"传送"到其他的html容器元素内。通过它我们可以实现基于数据模型渲染出来的html内容的移动。

Vue3中提供的传送门Teleport组件API的使用,小伙伴们可以参考官方文档 - Teleport

demo演示

除了官方的遮罩层的demo外,我们主要来看下传送门组件在咱们电商后台商品分类树的高亮编辑,先看下实现的效果:

再切换到暗黑模式下来看看效果:

在编辑分类树中一个节点名称的时候,整个树用一个遮罩层,而惟独这个编辑区域不遮盖,可以操作,以达到高亮聚焦的效果。

实现思路

现在,小伙伴们知道了传送门组件的作用,结合我们上面实现的demo,咱们一起来理一理具体的实现思路,看到渲染出来的html内容(这里为方便看,手动删除了部分分类html内容):

当点击编辑后,再看看html内容:

很显然,原先新鲜水果这一个条目的html内容根据数据状态的改变而进行了视图的刷新,通过传送门技术将内容从原来的区域挪到了与外层遮罩层div元素同级的<div class="item-edit-cont"></div>元素中了。

而要让编辑状态下的分类条目在页面上看起来依然处于原来的位置,即纹丝不动,只是内层多了一层蒙版把整棵树给盖住了,而自身位于蒙版之上,以达到被聚焦的效果,最主要的问题就是如何获取被点击条目原来位于tree容器中的相对定位以及初始的宽度。

这里我们使用了原生dom元素提供的相关api来实现的:

js 复制代码
const calcEditInfo = id => {
  const itemCont = document.querySelector('.category-tree-cont #item-cont-' + id)
  const rect = itemCont.getBoundingClientRect()
  const rectTree = document.querySelector('.category-tree-cont').getBoundingClientRect()
  editModel.value = {
    top: rect.top - rectTree.top,
    left: rect.left - rectTree.left,
    width: itemCont.clientWidth
  }
}

通过它们的getBoundingClientRect()方法来获取其客户端模型的位置信息,相减从而得到其相对位置。

剩下的咱们就用vue3中数据双向绑定机制,基于编辑状态来刷新蒙版和传送放置容器的激活样式即可:

vue 复制代码
<div class="mask" :class="{active: editing}"></div>
<div class="item-edit-cont" :class="{active: editing}" :style="{ width: editModel.width + 'px', top: editModel.top + 'px', left: editModel.left + 'px' }"></div>

通过这样的思路点拨,相信小伙伴们在今后的前端学习实践中遇到类似的需要对容器中部分元素进行聚焦编辑时,可以来参考下即可,可不要忘了点赞和收藏哈,大家加油!

相关推荐
zhengxianyi51520 小时前
只需3句让Vue3 打包部署后通过修改配置文件修改全局变量——实时生效
vue.js·前后端分离·数据大屏·ruoyi-vue-pro优化
QQ4022054961 天前
python基于vue的大学生课堂考勤系统设计与实现django flask pycharm
vue.js·python·django
WX-bisheyuange1 天前
基于SpringBoot的交通管理在线服务系统
前端·javascript·vue.js·毕业设计
+VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue校园实验室管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
烤麻辣烫1 天前
Web开发概述
前端·javascript·css·vue.js·html
计算机程序设计小李同学1 天前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
干前端1 天前
Message组件和Vue3 进阶:手动挂载组件与 Diff 算法深度解析
javascript·vue.js·算法
zhengxianyi5151 天前
Vue2 打包部署后通过修改配置文件修改全局变量——实时生效
前端·vue.js·前后端分离·数据大屏·ruoyi-vue-pro
灵犀坠1 天前
Vue3 实现音乐播放器歌词功能:解析、匹配、滚动一站式教程
开发语言·前端·javascript·vue.js
Mo_jon1 天前
vite + vue 快速构建 html 页面 (舒适编写html文件)
前端·vue.js·html