vue:左右過渡展開折疊的組件
前言:
在網(wǎng)上找了好久關(guān)于左右過渡動畫折疊的組件,沒有合適的代碼,效果類似于element UI中的Drawer抽屜組件,只不過ele中的都是懸浮的組件,工作中遇到的很多都是占用空間的展開折疊,網(wǎng)上很多也是上下展開收起的組件,于是就自己寫了一個。
1.整個應(yīng)用頁面采用彈性盒布局,左邊容器的寬度固定px,右邊容器寬度為 flex:1。
html:
<div class="current-page">
// 引入組件
<pack-up>
<div>我是文字文字文字</div>
</pack-up>
<div class="right">
右邊的數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)
</div>
</div>css:
.current-page{
width: 100%;
height: 100%;
display: flex;
}
.left{
width: 500px;
}
.right{
flex: 1;
}2.關(guān)于組件
html:
.current-page{
width: 100%;
height: 100%;
display: flex;
}
.left{
width: 500px;
}
.right{
flex: 1;
}css:
.curr-contents{
width: 500px;
height: 100%;
position: relative;
background: lightpink;
transition: all .5s ease-in-out;
padding: 0 10px;
/* transition: height .3s; */
}
.curr-contents .pack-ups{
height: 100%;
background: lightcyan;
position: absolute;
right: 0;
top: 0;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
transition: all .5s ease-in-out;
}
.show-areas{
transition: all .5s ease-in-out;
}核心js代碼:
// 點(diǎn)擊展開 折疊
handlePack(){
this.openflags=!this.openflags
const liCon = this.$refs.outerDiv
let packUps=this.$refs.packUps
if (this.openflags) { // 展開
liCon.style.width = 'auto'
liCon.style.width = this.liConWidth + 'px'
packUps.style.position='absolute'
packUps.style.left='auto'
packUps.style.right='0'
} else { // 收起
liCon.style.width = 0 + 'px'
packUps.style.position='absolute'
packUps.style.right='auto'
packUps.style.left='0'
}
}利用v-show使得被折疊的內(nèi)容不被銷毀,緩存之前的數(shù)據(jù)
也可以用font-size:0來隱藏內(nèi)容區(qū)
3.完整代碼:
父組件:
<template>
<div class="current-page">
<pack-up>
<div>我是文字文字文字</div>
</pack-up>
<div class="right">
右邊的數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)
</div>
</div>
</template>
<script>
import packUp from "./component/packUp"
export default {
name:'',
components:{ packUp },
data(){
return{}
},
mounted(){},
methods:{}
}
</script>
<style scoped>
.current-page{
width: 100%;
height: 100%;
display: flex;
}
.left{
width: 500px;
}
.right{
flex: 1;
}
</style>子組件:
<template>
<div class="curr-contents" ref="outerDiv">
<div class="show-areas" v-show="openflags">
<!-- 內(nèi)容插槽 -->
<slot></slot>
</div>
<div class="pack-ups" ref="packUps" @click="handlePack">
<i class="el-icon-arrow-right"></i>
</div>
</div>
</template>
<script>
export default {
name:'',
data() {
return {
liConWidth:500, // 左邊容器的寬度
openflags:true,
}
},
methods: {
// 點(diǎn)擊展開 折疊
handlePack(){
this.openflags=!this.openflags
const liCon = this.$refs.outerDiv
let packUps=this.$refs.packUps
if (this.openflags) { // 展開
liCon.style.width = 'auto'
liCon.style.width = this.liConWidth + 'px'
packUps.style.position='absolute'
packUps.style.left='auto'
packUps.style.right='0'
} else { // 收起
liCon.style.width = 0 + 'px'
packUps.style.position='absolute'
packUps.style.right='auto'
packUps.style.left='0'
}
}
}
}
</script>
<style scoped>
.curr-contents{
width: 500px;
height: 100%;
position: relative;
background: lightpink;
transition: all .5s ease-in-out;
padding: 0 10px;
/* transition: height .3s; */
}
.curr-contents .pack-ups{
height: 100%;
background: lightcyan;
position: absolute;
right: 0;
top: 0;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
transition: all .5s ease-in-out;
}
.show-areas{
transition: all .5s ease-in-out;
}
</style>相關(guān)文章
vue2使用element-ui,el-table不顯示,用npm安裝方式
這篇文章主要介紹了vue2使用element-ui,el-table不顯示,用npm安裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Vue數(shù)據(jù)與事件綁定以及Class和Style的綁定詳細(xì)講解
這篇文章主要介紹了Vue數(shù)據(jù)與事件綁定以及Class和Style的綁定,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Vue 解決通過this.$refs來獲取DOM或者組件報錯問題
這篇文章主要介紹了Vue 解決通過this.$refs來獲取DOM或者組件報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
vue+elementUI實(shí)現(xiàn)表格的增刪改過程
文章介紹了一個使用Vue和Element UI僅在前端實(shí)現(xiàn)增刪改功能的示例,未涉及后端知識,主要分為編輯、新增和刪除方法,并提供了全部代碼2026-03-03
前端利用vue實(shí)現(xiàn)導(dǎo)入和導(dǎo)出功能詳細(xì)代碼
最近項(xiàng)目中讓實(shí)現(xiàn)一個導(dǎo)入導(dǎo)出Excel的功能,下面這篇文章主要給大家介紹了關(guān)于前端利用vue實(shí)現(xiàn)導(dǎo)入和導(dǎo)出功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
vue前端開發(fā)輔助函數(shù)狀態(tài)管理詳解示例
vue的應(yīng)用狀態(tài)管理提供了mapState、mapGetters、mapMutations、mapActions四個輔助函數(shù),所謂的輔助函數(shù)分別對State、Getters、Mutations、Actions在完成狀態(tài)的使用進(jìn)行簡化2021-10-10

