148 lines
2.5 KiB
Vue
148 lines
2.5 KiB
Vue
|
<template>
|
|||
|
<view :style="mixinVariableStr" >
|
|||
|
<view class="placeholder"
|
|||
|
v-if="fixedTop"
|
|||
|
:class="{
|
|||
|
'safe-area':safeAreaTop
|
|||
|
}"
|
|||
|
></view>
|
|||
|
<view class="container"
|
|||
|
:class="{
|
|||
|
'safe-area':safeAreaTop,
|
|||
|
'fixed':fixedTop
|
|||
|
}"
|
|||
|
>
|
|||
|
<view class="nav-bar h-flex-x" :class="{
|
|||
|
'show-line':showBottomLine
|
|||
|
}">
|
|||
|
<view class="side h-flex-x h-flex-left">
|
|||
|
<view class="block minor" v-if="showLeft"></view>
|
|||
|
</view>
|
|||
|
<view class="h-flex-item-grow h-flex-x h-flex-center">
|
|||
|
<view class="block general"></view>
|
|||
|
</view>
|
|||
|
<view class="side h-flex-x h-flex-right">
|
|||
|
<view class="block general" v-if="showRight"></view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
/**
|
|||
|
* NavBar 顶部导航
|
|||
|
* @description 页面顶部的导航栏。
|
|||
|
* @tutorial 待完善
|
|||
|
*
|
|||
|
* @property {Boolean} safeAreaTop 是否开启顶部安全区域 (默认 false )
|
|||
|
* @property {Boolean} fixedTop 是否开启顶部固定(默认 false )
|
|||
|
* @property {String | Number} zIndex 固定定位显示层级 (默认 1 )
|
|||
|
* @example <sk-nav-bar></sk-nav-bar>
|
|||
|
*/
|
|||
|
|
|||
|
import cssVariable from "../mixin/css-variable.js";
|
|||
|
|
|||
|
export default {
|
|||
|
mixins:[cssVariable],
|
|||
|
props:{
|
|||
|
safeAreaTop:{
|
|||
|
type: Boolean,
|
|||
|
default:false
|
|||
|
},
|
|||
|
fixedTop:{
|
|||
|
type: Boolean,
|
|||
|
default:false
|
|||
|
},
|
|||
|
zIndex:{
|
|||
|
type: Number | String,
|
|||
|
default:"1"
|
|||
|
},
|
|||
|
showBottomLine:{
|
|||
|
type: Boolean,
|
|||
|
default:false
|
|||
|
},
|
|||
|
showLeft:{
|
|||
|
type: Boolean,
|
|||
|
default:true
|
|||
|
},
|
|||
|
showRight:{
|
|||
|
type: Boolean,
|
|||
|
default:false
|
|||
|
},
|
|||
|
},
|
|||
|
computed:{
|
|||
|
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
|
|||
|
};
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
@import "../libs/global.scss";
|
|||
|
|
|||
|
.placeholder{
|
|||
|
box-sizing: content-box;
|
|||
|
width: 100%;
|
|||
|
height: 88rpx;
|
|||
|
}
|
|||
|
|
|||
|
.container{
|
|||
|
background-color: var(--background);
|
|||
|
}
|
|||
|
|
|||
|
.safe-area{
|
|||
|
padding-top: var(--status-bar-height);
|
|||
|
}
|
|||
|
|
|||
|
.nav-bar{
|
|||
|
width: 100%;
|
|||
|
padding: 0 30rpx;
|
|||
|
height: 88rpx;
|
|||
|
position: relative;
|
|||
|
|
|||
|
&.show-line::after{
|
|||
|
content: '';
|
|||
|
display: block;
|
|||
|
position: absolute;
|
|||
|
left: 0;
|
|||
|
bottom: 0;
|
|||
|
height: 1px;
|
|||
|
background-color: var(--general);
|
|||
|
width: 100%;
|
|||
|
z-index: 1;
|
|||
|
transform: scaleY(.5);
|
|||
|
}
|
|||
|
|
|||
|
.side{
|
|||
|
width: 100rpx;
|
|||
|
}
|
|||
|
|
|||
|
.block{
|
|||
|
border-radius: 0;
|
|||
|
height: 24rpx;
|
|||
|
width: 70%;
|
|||
|
}
|
|||
|
|
|||
|
.general{
|
|||
|
background-color: var(--general);
|
|||
|
}
|
|||
|
|
|||
|
.minor{
|
|||
|
background-color: var(--general);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.fixed{
|
|||
|
position: fixed;
|
|||
|
z-index: var(--zIndex);
|
|||
|
top: 0;
|
|||
|
top:var(--window-top);
|
|||
|
left: 0;
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
</style>
|