微信小程序 自定義導航欄


看着原博文https://www.cnblogs.com/sese/p/9761713.html簡單的練習。

1.在app.json中     window配置navigationStyle

 

 

 2.計算相關值

 

 

 

1. 整個導航欄的高度;

2. 膠囊按鈕與頂部的距離;

3. 膠囊按鈕與右側的距離。

小程序可以通過 wx.getMenuButtonBoundingClientRect() 獲取膠囊按鈕的信息  和 wx.getSystemInfo() 獲取設備信息

 

通過這些信息我們可以計算出上面說的3個值:

1. 整個導航欄高度 = statausBarHeight + height + (top-statausBarHeight )*2;

2. 膠囊按鈕與頂部的距離 = top;

3.膠囊按鈕與右側的距離 = windowWidth - right。

App.js 代碼如下:

3.頭部組件navBar

 

 

 navBar.wxml

<view class="navbar" style="height:{{navHeight}}px;">

  <!-- 左上角 返回按鈕 和 home按鈕 wx:if="{{showNav}}" 是控制左上角按鈕的顯示隱藏,首頁不顯示 -->
  <view class="navbar_left" style="top:{{navTop}}px;" wx:if="{{showNav}}">

    <!-- 控制返回按鈕的顯示 -->
    <view bindtap="navBack"><image src="/image/back.png"></image></view>

    <!-- home按鈕 wx:if="{{showHome}}" 是控制左上角 home按鈕的顯示隱藏-->
    <view class="nav_line" bindtap="navHome" wx:if="{{showHome}}"><image src="/image/home.png"></image></view>
  </view>

  <!-- 中間標題 -->
  <view class="navbar_title" style="top:{{navTop}}px;">{{pageName}}</view>

</view>

 

navBar.wxss

.navbar {
  width: 100%;
  overflow: hidden;
  position: relative;
  top: 0;
  left: 0;
  z-index: 10;
  flex-shrink: 0;
  background: #fff;
}
.navbar_left{
  display: -webkit-flex;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  position: absolute;
  left: 10px;
  z-index: 11;
  line-height: 1;
  padding: 3px;
  border:1rpx solid #f0f0f0;
  border-radius: 40rpx;
  overflow: hidden;
  background: rgba(255,255,255,0.6);
}
.navbar_left view{
  width: 50rpx;
  height: 50rpx;
  margin-right: 10rpx;
}
.navbar_left view image{
  width: 100%;
  height: 100%;
}
.nav_line{
  border-left: 1rpx solid #f0f0f0;
  padding-left: 8px; 
}
.navbar_title{
  width: 100%;
  box-sizing: border-box;
  padding-left: 115px;
  padding-right: 115px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  position: absolute;
  left: 0;
  z-index: 10;
  color: #333;
  font-size: 16px;
  font-weight: bold;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

 

navBar.js

const App = getApp();
Component({

  /**
   * 組件的屬性列表
   */
  properties: {
    pageName: String,  //中間的title
    showNav: {         //判斷是否顯示左上角的按鈕    
      type: Boolean,    
      value: true
    },
    showHome: {         //判斷是否顯示左上角的home按鈕
      type: Boolean,
      value: true
    }
  },

  /**
   * 組件的初始數據
   */
  data: {
    showNav: true,     //判斷是否顯示左上角的home按鈕
    showHome: true,     //判斷是否顯示左上角的按鈕
  },
  lifetimes: {
    // 生命周期函數,可以為函數,或一個在methods段中定義的方法名
    attached: function () {
      this.setData({
        navHeight: App.globalData.navHeight,
        navTop: App.globalData.navTop
      })
    }
  },
  /**
   * 組件的方法列表
   */
  methods: {
    //回退
    navBack: function () {
      wx.navigateBack()
    },
    //回主頁
    navHome: function () {
      wx.navigateTo({
        url: '/pages/home/home'
      })
    },
  }
})

 

navBar.json

 

4.index中

index.json

 index.wxml

<view class="view-page">
  <navbar page-name="你當前頁面的名字" show-nav="{{showNav}}" show-home="{{showHome}}"></navbar>
  <view class='page-content'>
    <!--這里放你的內容-->
    <navigator url="../demo1/demo1">跳轉</navigator>
  </view>
</view>

index.js

 

 5.demo1中

demo1.wxml

 

 demo.js

 

 6.home頁

home.wxml

 

home.js

 最后效果圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM