1. 程式人生 > >【小程式】自定義導航欄

【小程式】自定義導航欄

這個需求要不是UI和我講有其他小程式實現了,我都還以為小程式還不能做到自定義導航。還好是在設計階段給出的需求,不然。。。

先看看效果吧
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

微信小程式自定義導航欄

開始接介紹用法:

1:配置app.json

掃碼都別管,先檢視文件window配置
在這裡插入圖片描述然後在app.json設定navigationStylecustom(自定義導航欄)

注意!: 如果這裡設定為自定義導航,那麼所有頁面都會變成自定義導航;想在其他頁面的.json檔案配置自定義導航是沒用的,所以後面需要用到template模板或者component元件

2:瞭解下原導航在各個手機型號的高度(適配)

導航欄高度

wx.getSystemInfo 和 wx.getSystemInfoSync 獲取機器資訊
screenHeight - windowHeight 計算標題欄高度
標題欄高度:
‘iPhone’: 64,
‘iPhone X’: 88,
‘android’: 68

小程式部分真機裝置資訊採集
在這裡插入圖片描述

3:編寫component或者template

這裡app.json配置影響的全域性配置,所以其他頁面都成了自定義導航,只有寫一個公共元件或者模板套用了(隨你挑選一個),這裡我選擇component構造器。

Component構造器可用於定義元件,呼叫Component構造器時可以指定元件的屬性、資料、方法等。

JSON

一開始就貼出JSON,是為了提醒某些忘記配置json得人(為啥沒效果!什麼鬼東西!垃圾元件!cao):
建立component,先在json配置好component
使用component,先在json配置component的名稱和引用路徑

{
  "component": true,
  "usingComponents": {}
}

wxml

 <view class='status-bar'>
    <view class='goBack' bindtap='goBack' style="padding-top:{{bar_Height}}px;"  hidden='{{show_bol}}'>			/*返回按鈕*/
      <image src='/images/back.png'></image>
    </view>
    <view class="tabar {{my_class ? '
tabar2':''}}"
style="padding-top:{{bar_Height}}px;">
<text class="red">{{title}}</text> /*標題*/ </view> </view>
  1. hidden='{{show_bol}}'
    這裡的show_bol就是用來控制是否顯示返回標籤(說白了就是是內頁還是首頁,該不該有返回功能)這裡的show_bol就是用來控制是否顯示返回標籤(說白了就是是內頁還是首頁,該不該有返回功能)
  2. padding-top:{{bar_Height}}px
    bar_Height為獲取到的手機狀態列的高度;

js

Component({
  /* 元件的屬性列表 */
  properties: {
    title: {			// 設定標題
      type: String,
      value: ''	
    },
    show_bol: {			// 控制返回箭頭是否顯示
      type: Boolean,
      value: false
    },
    my_class: {			// 控制樣式
      type: Boolean,
      value: false
    }
  },
  /* 元件的初始資料 */
  data: {
    type: "元件",
    bar_Height: wx.getSystemInfoSync().statusBarHeight		// 獲取手機狀態列高度
  },
  /* 元件的方法列表 */
  methods: {
    goBack: function () {					// 返回事件
      console.log("退後")
      wx.navigateBack({
        delta: 1,
      })
    }
  }
})

wxss

/* 頂部導航 */
.status-bar {
  width: 100%;
  z-index: 99999;
  position: fixed;
  top: 0;
}
.goBack{
  position: absolute;
  top: 15rpx;
  font-size:12pt;
}
.goBack image{
  width: 21rpx;
  height: 40rpx;
  padding: 12rpx 20px 0 30rpx;
}
.tabar {
  display: flex;
  justify-content: center;
  background-color: #fff;
}
.tabar2{
  background: transparent !important;
}
.tabar2 text{
  color: #fff !important;
  font-weight: lighter !important;
}
.tabar text {
  padding: 20rpx 30rpx;
  color: #353535;
  font-size: 12pt;
  font-weight: bold;
}
.tabar .active {
  color: #fff;
}

4:使用元件(一般都在內頁才用到)

json

{
  "usingComponents": {
    "component": "/component/component"    //component自定義名稱 後面為元件路徑
  }
}

wxml

<component title='我是tabbar的頁面' show_bol='{{false}}'></component>   //show_bol為false  就是沒有返回箭頭

<component title='我是帶返回的頁面' show_bol='{{true}}'></component>   //show_bol為false  就是沒有返回箭頭

問題:
這裡導航是出來了,但是會有個問題,導航嘛肯定是要固定定位的,所以他就脫離了文件流,元件放進去後,會懸浮在上面,遮擋了下面的內容,這時候就需要給父元素加個padding-top了

// e:1
<view class='box-detail' style="padding-top:{{bar_Height  + 45}}px;">
  <component title='EatUp趣味食光' show_bol='{{false}}'></component>
  ...
  ..
  .
</view>
// e:2
<view class='box-detail' style="padding-top:{{widnowH <=568 ?bar_Height + 40:bar_Height + 45}}px;">			
  <component title='EatUp趣味食光' show_bol='{{false}}'></component>
  ...
  ..
  .
</view>

bar_Height: wx.getSystemInfoSync().statusBarHeight   (狀態列的高度)
widnowH : wx.getSystemInfoSync().screenHeight       (螢幕高度)

這裡的padding-top的距離,就是狀態列的高度+ 導航欄的高度了,然後就可以很愉快的使用了,不過不同的機型還需要不同的適配,如果有更好的辦法,可以給我講解下,感謝大佬!

5:最終效果

在這裡插入圖片描述
在這裡插入圖片描述

相關推薦

程式定義導航

這個需求要不是UI和我講有其他小程式實現了,我都還以為小程式還不能做到自定義導航。還好是在設計階段給出的需求,不然。。。 先看看效果吧 微信小程式自定義導航欄 開始接介紹用法: 1:配置app.json 掃碼都別管,先檢視文件window配置 然後在ap

微信程式定義模態框例項

原文連結:https://mp.weixin.qq.com/s/23wPVFUGY-lsTiQBtUdhXA1概述由於官方API提供的顯示模態彈窗,只能簡單地顯示文字內容,不能對對話方塊內容進行自定義,欠缺靈活性,所以自己從模態彈窗的原理角度來實現了自定義的模態對話方塊。今天

微信程式定義元件

微信小程式中的元件前言之前做小程式開發的時候,對於開發來說比較頭疼的莫過於自定義元件了,當時官方對這方面的文件也只是寥寥幾句,一筆帶過而已,所以寫起來真的是非常非常痛苦!!好在微信小程式的庫從 1.6.3 開始,官方對於自定義元件這一塊有了比較大的變動,首先比較明顯的感覺就是文件比以前全多了,有木有!(小程式

微信程式定義抽屜式選單(底部,從下向上拉出)

微信提供了動畫api,就是下面這個通過使用這個建立動畫的api,可以做出很多特效出來下面介紹一個抽屜選單的案例實現程式碼:wxml:<!--button--> <view class="btn" bindtap="powerDrawer" data-stat

微信程式開發筆記2——定義導航元件

本文主要是熟悉微信小程式自定義元件的開發,以一個常見的導航欄(Tabbar)需求為例。 官方文件:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 首先我們先看一

微信程式定義導航 navigation bar 返回鍵 首頁

微信小程式自定義導航欄(wx_custom_navigation_bar) 自定義返回鍵、首頁鍵,動態設定標題,響應式元件 版本號:1.0.0 作者:chen-yt github: https://github.com/chen-yt/wx_custom_navigation

程式定義導航

將app.json裡的navigationStyle設定為navigationStyle:custom。可以在.wxss裡通過margin和padding來自定義導航欄。 例如在.wxml裡寫 <view class="nav">我是汽車維修技師</view>

程式獲取定義屬性

<view bindtap="getDataAttr" data-postId="{{postId}}" data-id="id" class="div"> </view> getDataAttr:function(e){ console.log(e.currentTa

微信程式微信程式掃描定義二維碼到指定頁面的坑

重點 測試版本不需要釋出也可以進行測試 測試階段不釋出,只能掃描測試連結中的地址中的二維碼,其他的就算符合規範也不可以 如果是要動態匹配引數,那麼動態部分必定是/後面的字串 如果是要動態匹配引數,那

Taro 程式 定義導航

在小程式中,有的頁面需求可能需要我們做一個自定義的導航欄, 今天就來踩一踩坑 首先需要在app.js 中給全域性的導航欄隱藏, 1 // app.js 2 3 window: { 4 navigationStyle: 'custom', 5 }, 6 // navigationSt

微信程式適應Canvas 帶跑馬燈的辛運大轉盤 內附程式碼和詳解

第一篇關於Canvas環形進度條的博文獲得不少關注度,時隔這麼多日才發出第二篇關於Canvas的博文,並不是我懈怠了,而是最近公司比較忙,寫好的demo一直沒機會發,今天公司終於閒下來了,把我做好的demo整理一下發上來,給喜歡canvas的初學者看看,因為本人也是初學者,所

Android定義標題,底部

為了簡化起見,只寫關鍵屬性,具體需要可以自己慢慢調 頂部標題title_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:backg

.net 深呼吸定義應用程序配置節

system 深呼吸 進行 eve none 價值 判斷 發現 debug 實際上,應用程序配置文件 App.config,是由各個節(Configuration Section)組成的,通常,配置節是按功能劃分的,比如我們很熟悉的 appSettings、connecti

程式分頁載入資料,下拉載入更多,上拉重新整理

【 小程式】分頁載入資料,下拉載入更多,上拉重新整理 分頁載入的優點就不多說了,下面主要記錄一下幾個問題點。 scroll-view元件不能用在頁面根佈局中,不然觸發不了系統的onPullDownRefresh()、onReachBottom()回撥。 在Page頁

程式解決 Android機型上button按鈕出現邊框

【小程式】解決 Android機型上button按鈕出現邊框 問題描述: 在Android機型上出現button按鈕元件,在四個角上出現邊框。在模擬器、iPhone手機上沒有邊框。 問題原因: button控制元件上有一個偽元素(::after),雖然

程式開發 JS知識總結

JS知識總結 js判斷字元是否為空的方法: //判斷字元是否為空的方法 function isEmpty(obj){ if(typeof obj == "undefined" || obj == null || obj == ""){ ret

微信程式--15定義元件

關於自定義元件有兩個知識點需要說一下: 1.子元件向父元件傳引數 在子元件內部,這樣觸發事件,傳遞引數 在父元件內部這樣接收引數 2. 父元件向子元件傳引數 在父元件這裡定義一個now-in 在子元件這裡引入 這樣的話,nowIn就相當於data裡

CSS實現定義導航帶二級選單

程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> &

TP5.1定義初始化方法

author:咔咔 wechat:fangkangfk   初始化方法 平時在做專案的時候會用到的初始化方法initialize()這個方法   我們可以檢視一下原始碼: 通過方法的追蹤,我們在controller這個類找到了這個方法 這也就是

TP5.1樹狀導航(無極限分類)

author:咔咔 wechat:fangkangfk   業務場景: 使用無限極分類來做   我們還是需要將資料查出來 然後使用我們的單元測試看一下資料 很明顯這不是我們需要的資料結構   下來們需要引入一