-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
jry
committed
Aug 8, 2024
1 parent
94839a6
commit eb82053
Showing
4 changed files
with
203 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
src/uni_modules/uview-plus/components/u-navbar-mini/props.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import { defineMixin } from '../../libs/vue' | ||
|
||
export const props = defineMixin({ | ||
props: { | ||
// 是否开启顶部安全区适配 | ||
safeAreaInsetTop: { | ||
type: Boolean, | ||
default: () => true | ||
}, | ||
// 是否固定在顶部 | ||
fixed: { | ||
type: Boolean, | ||
default: () => true | ||
}, | ||
// 左边的图标 | ||
leftIcon: { | ||
type: String, | ||
default: 'arrow-leftward' | ||
}, | ||
// 背景颜色 | ||
bgColor: { | ||
type: String, | ||
default: () => 'rgba(0,0,0,.15)' | ||
}, | ||
// 导航栏高度 | ||
height: { | ||
type: [String, Number], | ||
default: () => '32px' | ||
}, | ||
// 图标的大小 | ||
iconSize: { | ||
type: [String, Number], | ||
default: '20px' | ||
}, | ||
// 图标的颜色 | ||
iconColor: { | ||
type: String, | ||
default: '#fff' | ||
}, | ||
// 点击左侧区域(返回图标),是否自动返回上一页 | ||
autoBack: { | ||
type: Boolean, | ||
default: () => true | ||
}, | ||
// 首页路径 | ||
homeUrl: { | ||
type: [String], | ||
default: '' | ||
} | ||
} | ||
}) |
148 changes: 148 additions & 0 deletions
148
src/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
<template> | ||
<view class="u-navbar-mini" :class="[customClass]"> | ||
<view | ||
class="u-navbar-mini__placeholder" | ||
v-if="fixed" | ||
:style="{ | ||
height: addUnit(getPx(height) + sys().statusBarHeight,'px'), | ||
}" | ||
></view> | ||
<view class="u-navbar-mini__inner" :class="[fixed && 'u-navbar-mini--fixed']"> | ||
<u-status-bar | ||
v-if="safeAreaInsetTop" | ||
:bgColor="bgColor" | ||
></u-status-bar> | ||
<view | ||
class="u-navbar-mini__content" | ||
:class="[border && 'u-border-bottom']" | ||
:style="{ | ||
height: addUnit(height), | ||
backgroundColor: bgColor, | ||
}" | ||
> | ||
<view | ||
class="u-navbar-mini__content__left" | ||
hover-class="u-navbar-mini__content__left--hover" | ||
hover-start-time="150" | ||
@tap="leftClick" | ||
> | ||
<slot name="left"> | ||
<up-icon | ||
:name="leftIcon" | ||
:size="iconSize" | ||
:color="iconColor" | ||
></up-icon> | ||
</slot> | ||
</view> | ||
<view style="padding: 10px 10px;"> | ||
<up-line direction="col" color="#fff" length="16px"></up-line> | ||
</view> | ||
<view | ||
class="u-navbar-mini__content__center" @tap="homeClick"> | ||
<slot name="center"> | ||
<up-icon name="home" :size="iconSize" :color="iconColor"></up-icon> | ||
</slot> | ||
</view> | ||
</view> | ||
</view> | ||
</view> | ||
</template> | ||
|
||
<script> | ||
import { props } from './props'; | ||
console.log(props) | ||
import { mpMixin } from '../../libs/mixin/mpMixin'; | ||
import { mixin } from '../../libs/mixin/mixin'; | ||
import { addUnit, addStyle, getPx, sys } from '../../libs/function/index'; | ||
/** | ||
* NavbarMini 迷你导航栏 | ||
* @description 此组件一般用于在全屏页面中,典型的如微信小程序左上角。 | ||
* @tutorial https://ijry.github.io/uview-plus/components/navbar-mini.html | ||
* @property {Boolean} safeAreaInsetTop 是否开启顶部安全区适配 (默认 true ) | ||
* @property {Boolean} placeholder 固定在顶部时,是否生成一个等高元素,以防止塌陷 (默认 false ) | ||
* @property {Boolean} fixed 导航栏是否固定在顶部 (默认 false ) | ||
* @property {String} leftIcon 左边返回图标的名称,只能为uView自带的图标 (默认 'arrow-left' ) | ||
* @property {String} title 导航栏标题,如设置为空字符,将会隐藏标题占位区域 | ||
* @property {String} bgColor 导航栏背景设置 (默认 '#ffffff' ) | ||
* @property {String | Number} height 导航栏高度(不包括状态栏高度在内,内部自动加上)(默认 '44px' ) | ||
* @property {String | Number} iconSize 左侧返回图标的大小(默认 20px ) | ||
* @property {String | Number} leftIconColor 左侧返回图标的颜色(默认 #303133 ) | ||
* @property {Boolean} autoBack 点击左侧区域(返回图标),是否自动返回上一页(默认 false ) | ||
* @property {Object | String} titleStyle 标题的样式,对象或字符串 | ||
* @event {Function} leftClick 点击左侧区域 | ||
* @event {Function} rightClick 点击右侧区域 | ||
* @example <u-navbar-mini @click-left="onClickBack"></u-navbar-mini> | ||
*/ | ||
export default { | ||
name: 'u-navbar-mini', | ||
mixins: [mpMixin, mixin, props], | ||
data() { | ||
return { | ||
} | ||
}, | ||
emits: ["leftClick", "homeClick"], | ||
created() { | ||
}, | ||
methods: { | ||
addStyle, | ||
addUnit, | ||
sys, | ||
getPx, | ||
// 点击左侧区域 | ||
leftClick() { | ||
// 如果配置了autoBack,自动返回上一页 | ||
this.$emit('leftClick') | ||
if(this.autoBack) { | ||
uni.navigateBack() | ||
} | ||
}, | ||
homeClick() { | ||
if (this.homeUrl) { | ||
uni.reLaunch({ url: this.homeUrl }) | ||
} | ||
} | ||
} | ||
} | ||
</script> | ||
|
||
<style lang="scss" scoped> | ||
@import "../../libs/css/components.scss"; | ||
.u-navbar-mini { | ||
&__inner { | ||
width: 180rpx; | ||
border-radius: 20px; | ||
overflow: hidden; | ||
} | ||
&--fixed { | ||
position: fixed; | ||
left: 20px; | ||
right: 0; | ||
top: 10px; | ||
z-index: 11; | ||
} | ||
&__content { | ||
@include flex(row); | ||
padding: 0 15px; | ||
align-items: center; | ||
height: 44px; | ||
background-color: #9acafc; | ||
position: relative; | ||
justify-content: space-between; | ||
&__left { | ||
@include flex(row); | ||
align-items: center; | ||
} | ||
&__left { | ||
&--hover { | ||
opacity: 0.7; | ||
} | ||
} | ||
} | ||
} | ||
</style> |