Vue+Element UI實現(xiàn)概要小彈窗的全過程
場景:一個巡檢單據(jù)有n個巡檢明細(xì),一個巡檢明細(xì)有n個巡檢項目。
實現(xiàn)效果:當(dāng)鼠標(biāo)移到明細(xì)行的概要圖標(biāo)時顯示當(dāng)前行的巡檢項目卡片彈窗,移出彈窗時關(guān)閉彈窗
巡檢單據(jù)詳情

鼠標(biāo)移到項目概要圖標(biāo)


效果實現(xiàn)
data里面聲明的變量
// 概要彈窗
outlineDialog: false,
// 當(dāng)前行標(biāo)準(zhǔn)概要
standSummary: [],
// 概要彈窗位置控制
outlineCard: {
pageY: null,
pageX: null,
display: "none"
}
1、彈窗代碼
outlineDialog:默認(rèn)false,概要彈窗顯示標(biāo)志
outlineStyle:彈窗的動態(tài)樣式設(shè)置,在computed進(jìn)行監(jiān)控和進(jìn)行雙向數(shù)據(jù)綁定展示
leave:鼠標(biāo)離開彈窗卡片的事件
<!-- 項目概要 -->
<div class="summary-div" v-show="outlineDialog" ref="box-cardDiv" :style="outlineStyle" @mouseleave="leave">
<div class="summary-title">項目概要</div>
<ul class="summary-ul">
<li class="summary-li"><span>標(biāo)準(zhǔn)名稱</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>
</div>
2、彈窗樣式代碼
<style lang="scss">
#box-cardDiv {
position: absolute;
}
.summary-div {
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、明細(xì)表格的項目概要列代碼
checkStandSunmmary:鼠標(biāo)移到概要圖標(biāo)的事件
<el-table-column label="項目概要" align="center" width="500">
<template slot="header">
<span>項目概要</span>
<span class="vertical"></span>
</template>
<template slot-scope="scope">
<div class="col-summmary-div">
<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>
</div>
</template>
</el-table-column>
4、outlineStyle 彈窗卡片動態(tài)樣式控制
明細(xì)在頁面底端的時候卡片照舊展示會被蓋掉一部分,需要根據(jù)概要圖標(biāo)的位置動態(tài)計算卡片打開的位置,如果在底端就把卡片往上邊打開
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 鼠標(biāo)離開彈窗卡片的事件
當(dāng)鼠標(biāo)移出卡片把卡片display樣式設(shè)置為none同時設(shè)置v-show為false彈窗不展示
/**
* 鼠標(biāo)離開標(biāo)準(zhǔn)概要
*/
leave() {
this.outlineCard.display = "none";
this.outlineDialog = false;
},
6、checkStandSunmmary 鼠標(biāo)移到概要圖標(biāo)的事件
打開彈窗卡片
獲取當(dāng)前行的檢驗項目集合
獲取當(dāng)前鼠標(biāo)在瀏覽器的X軸Y軸位置
動態(tài)設(shè)置彈窗卡片樣式為null(display除了寫none為不顯示其他值都是顯示)
/**
* 當(dāng)前行標(biāo)準(zhǔn)概要
*/
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;
},
總結(jié)
到此這篇關(guān)于Vue+Element UI實現(xiàn)概要小彈窗的文章就介紹到這了,更多相關(guān)Vue+Element UI小彈窗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue.js每天必學(xué)之計算屬性computed與$watch
Vue.js每天必學(xué)之計算屬性computed與$watch,為大家詳細(xì)講解計算屬性computed與$watch,感興趣的小伙伴們可以參考一下2016-09-09
Vue?中ref()和?reactive()響應(yīng)式數(shù)據(jù)的使用方法
article介紹Vue3中ref()和reactive()函數(shù)的使用方法,ref()用于創(chuàng)建基本數(shù)據(jù)類型的響應(yīng)式引用,reactive()用于創(chuàng)建響應(yīng)式對象,本文介紹Vue中ref()和reactive()響應(yīng)式數(shù)據(jù)的使用方法,感興趣的朋友一起看看吧2025-01-01
Vue項目打包并部署nginx服務(wù)器的詳細(xì)步驟
vue項目開發(fā)好之后需要部署到服務(wù)器上進(jìn)行外網(wǎng)訪問,下面這篇文章主要給大家介紹了關(guān)于Vue項目打包并部署nginx服務(wù)器的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
vue使用localStorage保存登錄信息 適用于移動端、PC端
這篇文章主要為大家詳細(xì)介紹了vue使用localStorage保存登錄信息 適用于移動端、PC端,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05

