elementui和vue详解(Vue+Element UI实现概要小弹窗的全过程)
类别:编程学习 浏览量:326
时间:2022-01-20 00:25:56 elementui和vue详解
Vue+Element UI实现概要小弹窗的全过程场景:一个巡检单据有n个巡检明细,一个巡检明细有n个巡检项目。
实现效果:当鼠标移到明细行的概要图标时显示当前行的巡检项目卡片弹窗,移出弹窗时关闭弹窗
巡检单据详情
鼠标移到项目概要图标
效果实现
data里面声明的变量
// 概要弹窗 outlineDialog: false, // 当前行标准概要 standSummary: [], // 概要弹窗位置控制 outlineCard: { pageY: null, pageX: null, display: "none" }
1、弹窗代码
outlineDialog:默认false,概要弹窗显示标志
outlineStyle:弹窗的动态样式设置,在computed进行监控和进行双向数据绑定展示
leave:鼠标离开弹窗卡片的事件
<!-- 项目概要 --> <li class="summary-li" v-show="outlineDialog" ref="box-cardli" :style="outlineStyle" @mouseleave="leave"> <li class="summary-title">项目概要</li> <ul class="summary-ul"> <li class="summary-li"><span>标准名称</span><span>是否必填</span><span>是否显示</span></li> <li v-for="(item, index) in standSummary" :key="index" class="summary-li"><span>{{item.inspectdetailName}}</span><span>{{item.isRequired ? '是':'否'}}</span> <span>{{item.isDisplay ? '是':'否'}}</span> </li> </ul> </li>
2、弹窗样式代码
<style lang="scss"> #box-cardli { position: absolute; } .summary-li { border: solid 1px #eee; background-color: #fff; border-radius: 4px; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1); padding: 10px 10px 0 10px; width: 300px; position: absolute; font-size: 13px; } .summary-ul { list-style: none; padding-left: 0; max-height: 350px; overflow-x: hidden; overflow-y: auto; } .summary-li { margin: 10px 10px 15px 10px; width: 250px; text-overflow: ellipsis; overflow: hidden; /* white-space: nowrap; */ display: flex; span { margin: auto; width: 55px; } } .summary-li:first-child span:not(:first-child) { margin-left: 40px; } .summary-li:not(:first-child) span:nth-child(1) { width: 90px; } .summary-li:not(:first-child) span:nth-child(2) { width: 50px; margin-left: 45px; } .summary-li:not(:first-child) span:nth-child(3) { margin-left: 60px; } .summary-title { color: #cccccc; margin-left: 10px; } </style>
3、明细表格的项目概要列代码
checkStandSunmmary:鼠标移到概要图标的事件
<el-table-column label="项目概要" align="center" width="500"> <template slot="header"> <span>项目概要</span> <span class="vertical"></span> </template> <template slot-scope="scope"> <li class="col-summmary-li"> <span class="col-summmary-format"><span>{{scope.row.firstListItem}}</span></span> <span> 等 {{scope.row.equInspectplanItemList.length}} 项 </span> <i class="el-icon-arrow-down" @mouseenter="checkStandSunmmary(scope.row)"></i> </li> </template> </el-table-column>
4、outlineStyle 弹窗卡片动态样式控制
明细在页面底端的时候卡片照旧展示会被盖掉一部分,需要根据概要图标的位置动态计算卡片打开的位置,如果在底端就把卡片往上边打开
computed: { outlineStyle() { let h = 45 * this.standSummary.length; let browser = document.body.clientHeight - 50; let pageY = this.outlineCard.pageY - 50; let pageX = this.outlineCard.pageX - 280; if (pageY + h > browser) { return `left: ${ pageX }px; top: ${ (pageY-h) }px; position: absolute; display: ${ this.outlineCard.display }`; } else { return `left: ${ pageX }px; top: ${ (pageY-60) }px; position: absolute; display: ${ this.outlineCard.display }`; } } },
5、leave 鼠标离开弹窗卡片的事件
当鼠标移出卡片把卡片display
样式设置为none同时设置v-show
为false弹窗不展示
/** * 鼠标离开标准概要 */ leave() { this.outlineCard.display = "none"; this.outlineDialog = false; },
6、checkStandSunmmary 鼠标移到概要图标的事件
打开弹窗卡片
获取当前行的检验项目集合
获取当前鼠标在浏览器的X轴Y轴位置
动态设置弹窗卡片样式为null(display除了写none为不显示其他值都是显示)
/** * 当前行标准概要 */ checkStandSunmmary(row) { this.outlineDialog = true; this.standSummary = row.equInspectplanItemList; this.outlineCard.pageY = window.event.clientY; this.outlineCard.pageX = window.event.clientX; this.outlineCard.display = null; },
总结
到此这篇关于Vue+Element UI实现概要小弹窗的文章就介绍到这了,更多相关Vue+Element UI小弹窗内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- elementuivue使用技巧(Vue Element前端应用开发之常规Element界面组件)
- vueelementui左侧菜单(Vue Element前端应用开发之动态菜单和路由的关联处理)
- vue3.0全家桶教程elementui学习(vite+vue3.0+ts+element-plus快速搭建项目的实现)
- element-ui 菜单悬停样式(js如何构造elementUI树状菜单的数据结构详解)
- vue element 表格上拉加载数据(Vue组件库ElementUI实现表格加载树形数据教程)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- elementui多个组件怎么使用(ElementUI在实际项目使用步骤详解)
- element-ui如何关闭表单验证(ElementUI实现el-form表单重置功能按钮)
- elementui下拉框联动(Element树形控件整合带图标的下拉菜单tree+dropdown+input)
- vue按需引入elementui组件(vue ElementUI实现异步加载树)
- vue加element ui弹窗(Vue中ElementUI分页组件Pagination的使用方法)
- elementui的el-popover修改样式不生效的解决(elementui的el-popover修改样式不生效的解决)
- vueelementui三级菜单(vue+element ui实现锚点定位)
- vue加element ui开发项目(Vue+ElementUI之Tree的使用方法)
- vueelementui组件生成页面(Vue Element前端应用开发之树列表组件)
- vue elementui 按钮样式修改(vue+elementui 实现新增和修改共用一个弹框的完整代码)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
- 朱鹤松被不断认可,凤凰传奇玲花喊话岳云鹏,索要老朱演出门票(朱鹤松被不断认可)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
热门推荐
- centos如何安装mysql8.0版本(Centos7下安装MySQL8.0.23的步骤小白入门级别)
- 面试时紧张该怎么办
- 小程序scroll-view自适应高度(小程序瀑布流解决左右两边高度差距过大的问题)
- 查看SQL SERVER中某个查询用了多少TempDB空间
- css实现动画的方法(CSS实现悬停过渡动画三部曲)
- idea里面怎么配置tomcat(intellij idea 使用Tomcat部署的项目位置在哪)
- 服务器租用教程(如何选择租用网站服务器?)
- linux如何查看apache日志(限制 Apache日志文件大小的方法)
- udp协议可提供简单的无连接服务吗(UDP连接对象原理解析及使用实例)
- mysql8修改默认端口(MySQL 8.0新特性 — 管理端口的使用简介)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9