移动端开发案例【2】头部组件开发

本期直接实例演示,直接分享代码

标签块:

<template>

        <view>

                 <view  :class="getClass">

                         <!--  状态栏 -->

                         <view  :style="'height:'+statusBarHeight+'px'"></view>

                         <!--  导航 -->

                         <view  class="w-100 flex align-center justify-between" style="height:  90rpx;">

                                  <!--  左边 -->

                                  <view  class="flex align-center">

                                          <!--  返回按钮 -->

                                          <free-icon-button  v-if="showBack" @click="back"

                                          :icon="'\ue60d'"></free-icon-button>

                                          <!--  标题 -->

                                          <slot>

                                                  <text  v-if="title" class="font-md  ml-3">{{getTitle}}</text>

                                          </slot>

                                  </view>

                                  <!--  右边 -->

                                  <view  class="flex align-center" v-if="showRight">

                                          <slot  name="right">

                                                  <free-icon-button  @click="search"

                                                  :icon="'\ue6e3'"></free-icon-button>

                                                 

                                          </slot>

                                 </view>

                         </view>

                 </view>

                 <!-- 占位 -->

                 <view  v-if="fixed" :style="fixedStyle"></view>

                

                 <!-- 扩展菜单 -->

                 <free-popup  v-if="showRight" ref="extend" :bodyWidth="320"  :bodyHeight="525"

                 bodyBgColor="bg-dark"  transformOrigin="right top">

                         <view  class="flex flex-column"

                         style="width:  320rpx;height: 525rpx;">

                                  <view  class="flex-1 flex align-center"

                                  hover-class="bg-hover-dark"

                                  v-for="(item,index)  in menus"

                                  :key="index"

                                  @click="clickEvent(item.event)">

                                          <text  class="iconfont pl-3 pr-2 font-md  text-white">{{item.icon}}</text>

                                          <text  class="font-md text-white">{{item.name}}</text>

                                  </view>

                         </view>

                 </free-popup>

                

                

        </view>

</template>

js板块:

<script>

        import freeIconButton  from "./free-icon-button.vue"

        import freePopup from  "./free-popup.vue"

        export default {

                 props: {

                         showBack:{

                                  type:Boolean,

                                  default:false

                         },

                         backEvent:{

                                  type:Boolean,

                                  default:true

                         },

                         title:  {

                                  type:  [String,Boolean],

                                  default:false  

                         },

                         fixed:{

                                  type:Boolean,

                                  default:true

                         },

                         noreadnum:{

                                  type:[Number,String],

                                  default:0

                         },

                         bgColor:{

                                  type:String,

                                  default:"bg-light"

                         },

                         showRight:{

                                  type:Boolean,

                                  default:true

                         }

                 },

                 components:{

                         freeIconButton,

                         freePopup

                 },

                 data() {

                         return  {

                                  statusBarHeight:0,

                                  navBarHeight:0,

                                  //  menus:[

                                  //     {

                                  //             name:"发起群聊",

                                  //             event:"",

                                  //             icon:"\ue633"

                                  //     },

                                  //     {

                                  //             name:"添加好友",

                                  //             event:"",

                                  //             icon:"\ue65d"

                                  //     },

                                  //     {

                                  //             name:"扫一扫",

                                  //             event:"",

                                  //             icon:"\ue614"

                                  //     },

                                  //     {

                                  //             name:"收付款",

                                  //             event:"",

                                  //             icon:"\ue66c"

                                  //     },

                                  //     {

                                  //             name:"帮助与反馈",

                                  //             event:"",

                                  //             icon:"\ue66c"

                                  //     }

                                  //  ],

                         }

                 },

                 mounted() {

                         //  #ifdef APP-PLUS-NVUE

                         this.statusBarHeight  = uni.getSystemInfoSync().statusBarHeight

                         //  this.statusBarHeight = plus.navigator.getStatusbarHeight()

                         //  #endif

                         this.navBarHeight  = this.statusBarHeight + uni.upx2px(90)

                 },

                 computed: {

                         fixedStyle()  {

                                  return  `height:${this.navBarHeight}px`

                         },

                         getTitle(){

                                  let  noreadnum = this.noreadnum > 0 ? '('+this.noreadnum+')' : ''

                                  return  this.title + noreadnum

                         },

                         getClass(){

                                  let  fixed = this.fixed?'fixed-top':''

                                  return  `${fixed} ${this.bgColor}`

                         }

                 },

                 methods: {

                         openExtend()  {

                                 this.$refs.extend.show(uni.upx2px(415),uni.upx2px(150))

                         },

                         // 返回

                         back(){

                                  if(this.backEvent){

                                          return  uni.navigateBack({

                                                  delta:  1

                                          });

                                  }

                                  this.$emit('back')

                         },

                         search(){

                                  uni.navigateTo({

                                          url:  '/pages/common/search/search'

                                  });

                         }

                 },

        }

</script>

以上样式库都是公共样式,公共样式引用查看系列更新《移动端【1】全局配置》

 

效果演示

posted @ 2020-03-22 23:44  蓝博科技  阅读(295)  评论(0编辑  收藏  举报