最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序自定義navigationBar頂部導(dǎo)航欄適配所有機型(附完整案例)

 更新時間:2020年04月26日 09:22:38   作者:FaxMiao  
這篇文章主要介紹了微信小程序自定義navigationBar頂部導(dǎo)航欄適配所有機型(附完整案例),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

navigationBar相信大家都不陌生把?今天我們就來說說自定義navigationBar,把它改變成我們想要的樣子(搜索框+膠囊、搜索框+返回按鈕+膠囊等)。

思路

  • 隱藏原生樣式
  • 獲取膠囊按鈕、狀態(tài)欄相關(guān)數(shù)據(jù)以供后續(xù)計算
  • 根據(jù)不同機型計算出該機型的導(dǎo)航欄高度,進行適配
  • 編寫新的導(dǎo)航欄
  • 引用到頁面

正文

一、隱藏原生的navigationBar

window全局配置里有個參數(shù):navigationStyle(導(dǎo)航欄樣式),default=默認樣式,custom=自定義樣式。

"window": {
	"navigationStyle": "custom"
}

讓我們看看隱藏后的效果:

可以看到原生的navigationBar已經(jīng)消失了,剩下孤零零的膠囊按鈕,膠囊按鈕是無法隱藏的。

二、準備工作

1.獲取膠囊按鈕的布局位置信息

我們用wx.getMenuButtonBoundingClientRect() 【官方文檔】 獲取膠囊按鈕的布局位置信息,坐標信息以屏幕左上角為原點:

const menuButtonInfo = wx.getMenuButtonBoundingClientRect();

width height top right bottom left
寬度 高度 上邊界坐標 右邊界坐標 下邊界坐標 左邊界坐標

下面是官方給的示意圖,方便大家理解幾個坐標。

2.獲取系統(tǒng)信息

用wx.getSystemInfoSync() 【官方文檔】 獲取系統(tǒng)信息,里面有個參數(shù):statusBarHeight(狀態(tài)欄高度),是我們后面計算整個導(dǎo)航欄的高度需要用到的。

const systemInfo = wx.getSystemInfoSync();

三、計算公式

我們先要知道導(dǎo)航欄高度是怎么組成的, 計算公式: 導(dǎo)航欄高度 = 狀態(tài)欄到膠囊的間距(膠囊距上距離-狀態(tài)欄高度) * 2 + 膠囊高度 + 狀態(tài)欄高度 。

實例 【源碼下載

自定義導(dǎo)航欄會應(yīng)用到多個、甚至全部頁面,所以封裝成組件,方便調(diào)用;下面是我寫的一個簡單例子:

app.js

App({
 onLaunch: function(options) {
  const that = this;
  // 獲取系統(tǒng)信息
  const systemInfo = wx.getSystemInfoSync();
  // 膠囊按鈕位置信息
  const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
  // 導(dǎo)航欄高度 = 狀態(tài)欄到膠囊的間距(膠囊距上距離-狀態(tài)欄高度) * 2 + 膠囊高度 + 狀態(tài)欄高度
  that.globalData.navBarHeight = (menuButtonInfo.top - systemInfo.statusBarHeight) * 2 + menuButtonInfo.height + systemInfo.statusBarHeight;
  that.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right;
  that.globalData.menuBotton = menuButtonInfo.top - systemInfo.statusBarHeight;
  that.globalData.menuHeight = menuButtonInfo.height;
 },
 // 數(shù)據(jù)都是根據(jù)當前機型進行計算,這樣的方式兼容大部分機器
 globalData: {
  navBarHeight: 0, // 導(dǎo)航欄高度
  menuRight: 0, // 膠囊距右方間距(方保持左、右間距一致)
  menuBotton: 0, // 膠囊距底部間距(保持底部間距一致)
  menuHeight: 0, // 膠囊高度(自定義內(nèi)容可與膠囊高度保證一致)
 }
})

app.json

{
 "pages": [
  "pages/index/index"
 ],
 "window": {
  "navigationStyle": "custom"
 },
 "sitemapLocation": "sitemap.json"
}

下面為組件代碼: /components/navigation-bar/navigation-bar.wxml

<!-- 自定義頂部欄 -->
<view class="nav-bar" style="height:{{navBarHeight}}px;">
 <input class="search" placeholder="輸入關(guān)鍵詞!" style="height:{{menuHeight}}px; min-height:{{menuHeight}}px; line-height:{menuHeight}}px; left:{{menuRight}}px; bottom:{{menuBotton}}px;"></input>
</view>

<!-- 
 內(nèi)容區(qū)域:
 自定義頂部欄用的fixed定位,會遮蓋到下面內(nèi)容,注意設(shè)置好間距
-->
<view class="content" style="margin-top:{{navBarHeight}}px;"></view>

/components/navigation-bar/navigation-bar.json

{
 "component": true
}

/components/navigation-bar/navigation-bar.js

const app = getApp()
Component({
 properties: {
  // defaultData(父頁面?zhèn)鬟f的數(shù)據(jù)-就是引用組件的頁面)
  defaultData: {
   type: Object,
   value: {
    title: "我是默認標題"
   },
   observer: function(newVal, oldVal) {}
  }
 },
 data: {
  navBarHeight: app.globalData.navBarHeight,
  menuRight: app.globalData.menuRight,
  menuBotton: app.globalData.menuBotton,
  menuHeight: app.globalData.menuHeight,
 },
 attached: function() {},
 methods: {}
})

/components/navigation-bar/navigation-bar.wxss

.nav-bar{ position: fixed; width: 100%; top: 0; color: #fff; background: #000;}
.nav-bar .search{ width: 60%; color: #333; font-size: 14px; background: #fff; position: absolute; border-radius: 50px; background: #ddd; padding-left: 14px;}

以下是調(diào)用頁面的代碼,也就是引用組件的頁面: /pages/index/index.wxml

navigation-bar default-data="{{defaultData}}"></navigation-bar>

/pages/index/index.json

{
 "usingComponents": {
  "navigation-bar": "/components/navigation-bar/navigation-bar"
 }
}

/pages/index/index.js

const app = getApp();
Page({
 data: {
  // 組件參數(shù)設(shè)置,傳遞到組件
  defaultData: {
   title: "我的主頁", // 導(dǎo)航欄標題
  }
 },
 onLoad() {
  console.log(this.data.height)
 }
})

效果圖:

好了,以上就是全部代碼了,大家可以文中復(fù)制代碼,也可以 【下載源碼

,直接到開發(fā)者工具里運行,記得appid用自己的或者測試哦!

下面附幾張其它小程序的效果圖,大家也可以嘗試照著做:

總結(jié)

本文寫了自定義navigationBar的一些基礎(chǔ)性東西,里面涉及組件用法、參數(shù)傳遞、導(dǎo)航欄相關(guān)。

由于測試環(huán)境有限,大家在使用時如果發(fā)現(xiàn)有什么問題,希望及時反饋,以供及時更新幫助更多的人!

到此這篇關(guān)于微信小程序自定義navigationBar頂部導(dǎo)航欄適配所有機型(附完整案例)的文章就介紹到這了,更多相關(guān)小程序navigationBar頂部導(dǎo)航欄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript深拷貝的幾種實現(xiàn)方法實例

    JavaScript深拷貝的幾種實現(xiàn)方法實例

    javascript深拷貝是初學者甚至有經(jīng)驗的開發(fā)著,都會經(jīng)常遇到問題,下面這篇文章主要給大家介紹了關(guān)于JavaScript深拷貝的幾種實現(xiàn)方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • js 自定義個性下拉選擇框示例

    js 自定義個性下拉選擇框示例

    下拉選擇框想必大家并不陌生,一邊情況下都是使用默認的,為了打破傳統(tǒng),下面與大家分享下使用js自定義下拉選擇框示例代碼,感興趣的朋友可以參考下
    2013-08-08
  • JavaScript逆向案例之如何破解登錄密碼

    JavaScript逆向案例之如何破解登錄密碼

    這篇文章主要介紹了JavaScript逆向案例之如何破解登錄密碼,文章通過12306的登陸方法展開用戶登錄密碼的參數(shù)破解辦法,感興趣的小伙伴可以參考一下
    2022-06-06
  • 詳解JavaScript執(zhí)行模型

    詳解JavaScript執(zhí)行模型

    這篇文章主要介紹了JavaScript執(zhí)行模型的相關(guān)資料。幫助大家更好的理解和學習JavaScript,感興趣的朋友可以了解下
    2020-11-11
  • 向左滾動文字 js代碼效果

    向左滾動文字 js代碼效果

    本文章來給大家介紹一個javascript中向左滾動文字效果。有需要使用的朋友可參考,這里面我們需要注意下面的css必須強制white-space:nowrap;overflow:hidden;不換行才行哦
    2013-08-08
  • 用簡單的腳本實現(xiàn)一款漂亮的下拉菜單

    用簡單的腳本實現(xiàn)一款漂亮的下拉菜單

    用簡單的腳本實現(xiàn)一款漂亮的下拉菜單...
    2006-12-12
  • js操作二級聯(lián)動實現(xiàn)代碼

    js操作二級聯(lián)動實現(xiàn)代碼

    網(wǎng)上二級(多級)聯(lián)動的例子也不少,有各種不同的操作方法。我所采用的方法網(wǎng)上也應(yīng)該有的,不過我還沒有看到過。
    2010-07-07
  • Javascript的異步函數(shù)和Promise對象你了解嗎

    Javascript的異步函數(shù)和Promise對象你了解嗎

    這篇文章主要為大家詳細介紹了Javascript異步函數(shù)和Promise對象,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaScript高階函數(shù)_動力節(jié)點Java學院整理

    JavaScript高階函數(shù)_動力節(jié)點Java學院整理

    這篇文章主要介紹了JavaScript高階函數(shù),詳細講解了什么是高階函數(shù)和高階函數(shù)的用法,有興趣的可以了解下
    2017-06-06
  • JavaScript實現(xiàn)快速排序的方法分析

    JavaScript實現(xiàn)快速排序的方法分析

    這篇文章主要介紹了JavaScript實現(xiàn)快速排序的方法,結(jié)合實例形式分析了快速排序的原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-01-01

最新評論

平果县| 静宁县| 福清市| 壶关县| 定边县| 利津县| 澄城县| 皋兰县| 吉林市| 延吉市| 镇原县| 三河市| 白玉县| 和硕县| 竹北市| 望都县| 临朐县| 柯坪县| 清水县| 泰来县| 甘南县| 永清县| 鹤峰县| 金阳县| 犍为县| 德庆县| 宝鸡市| 丽江市| 阳城县| 淳化县| 澄江县| 美姑县| 潞城市| 涿州市| 沂南县| 上蔡县| 同仁县| 阿拉尔市| 手游| 浦江县| 昆明市|