使用 vux 中的 Drawer 以及一些坑

最近做demo 的时候用到了 vux  里的 drawer ,遇到了很多问题,这里主要记录一下(新手,勿喷)

 主要是为了点击那个 三个横线之后会出现


首先,使用 drawer 中 主体内容插槽 中写东西的时候,发现原来定位 

position : fixed

失效了,wtf 凸(艹皿艹 ),找半天找不到问题,后来去查资料,发现

fixed 在 父元素有 transform 的时候会失效

这样就很明显了,由于 drawer 组件有 transform ,导致了 fixed 失效。这是很头痛的事情。

主要有两种解决办法:①使用 position:absolute 来代替 fixed  ②不让 drawer 和页面实现父子关系

我采用了 方法 ②

so   当时的 结构就是这样(使用了  vuex 来作为组件间的值传递)

home.vue

< template > // 使用了 vuex 来传递 状态值,可以使用 data 的 变量来代替
< div class = " home " :class = " { fix : this . $store . getters . drawer } " >
< my-drawer ></ my-drawer > // drawer 组件(我又封装了一下)
< home-h ></ home-h > // 自己封装的头部标签(就是前文提到的三条横线所在的组件)
< router-view ></ router-view >
< home-f ></ home-f > // 自己封装的尾部标签
</ div >
</ template >

< style lang= " stylus " >
.fix // 这个属性主要是为了 让 drawer 显示的时候阻止屏幕滚动
position fixed
top 0
bottom 0
left 0
right 0
</ style >
myDrawer.vue

< template >
< div :class = " { dra : showDrawer } " >
< drawer :show.sync = " showDrawer " show-mode = " overlay " placement = " right " >
< div slot = " drawer " class = " dcontent " >
< div class = " head " > // 这里是我自己加的一点 节点,无视就好
< img src = " ../assets/drawer/headlogo.png " alt = "" >
< div class = " login " >
< p class = " log1 " >点击登录 </ p >
< p class = " log2 " >即刻开启您的尊贵之旅 </ p >
</ div >
</ div >
</ div >
</ drawer >
</ div >
</ template >
< style lang= " stylus " >
.dra // 这个是为了 能在 drawer 出现的 能充满整个屏幕
top 0
bottom 0
left 0
right 0
z-index 99999
position absolute
.dcontent
background-color # efefef
height 100 %
.head
background url ( '../assets/drawer/headbck.png' )
height 3.466667 rem /* 260/75 */
width 8 rem /* 600/75 */
background-size 8 rem 3.466667 rem /* 260/75 */
display flex
justify-content center
align-items center
img
width 1.733333 rem /* 130/75 */
height 1.733333 rem /* 130/75 */
border-radius 50 %
margin-right .266667 rem /* 20/75 */
.login
color white
.log1
font-size 28 px ; /*px*/
.log2
font-size 25 px ; /*px*/
</ style >

< script >
import { Drawer } from ' vux '
export default {
components : {
Drawer
},
computed : { // 通过 vuex 来设置、获取 进行组件之间的值传递,可以使用 data props
showDrawer : { // 使用了 计算属性来设置 showDrawer
get () { // 值变化了通过这个获取
return this . $store . getters . drawer
},
set () { // 值变化了 通过这个设置
return this . $store . dispatch( ' changeDrawer ') . then( () => {
console . log( this . $store . getters . drawer)
})
}
}
}
}
</ script >

store.js

import Vue from ' vue '
import Vuex from ' vuex '

Vue . use( Vuex)

export const store = new Vuex . Store( {
state : {
drawerOpened : false
},
getters : {
drawer : state => {
return state . drawerOpened // 让外界能获取 drawerOpened
}
},
mutations : {
changeDrawer ( state ) { // 让外界能改变drawerOpened
state . drawerOpened = ! state . drawerOpened
}
},
actions : { // 让外界能通过异步调用的方式 改变drawerOpened
changeDrawer ({ commit }) {
commit( ' changeDrawer ')
}
}
})


homeH.vue

< template >
< header >
.......
< div class = " right " >
< span class = " thline " @click = " showDrawer " ></ span >
</ div >
</ header >
</ template >


< script >
export default {
methods : {
// 调用 store 中的 actions 中的 changeDrawer 来改变drawerOpened
showDrawer : function () {
this . $store . dispatch( ' changeDrawer ') . then( () => {
console . log( this . $store . getters . drawer)
})
}
}
}
</ script >
< style lang= " stylus " >
header
height 1.2 rem /* 90/75 */
background-color # f6f6f6
width 100 %
box-sizing border-box
padding .266667 rem /* 20/75 */
display flex
justify-content space-between
position fixed
z-index 999
top 0
left 0
.right
.thline
vertical-align top
display inline-block
height .026667 rem /* 2/75 */
padding .266667 rem /* 20/75 */ 0
margin-left .4 rem /* 30/75 */
width .666667 rem /* 50/75 */
background-clip content-box
background-color main-color
border-top .026667 rem /* 2/75 */ solid main-color
border-bottom .026667 rem /* 2/75 */ solid main-color
.thline ::before
content ''
display inline-block
background-color red
width .186667 rem /* 14/75 */
height .186667 rem /* 14/75 */
border-radius 50 %
position relative
top -. 6 rem /* 45/75 */
left .533333 rem /* 40/75 */
</ style >


到这里就结束了,好想讲的有点多,又没什么用的样子,但还是谢谢能看到这里的人




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值