欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序自定義導(dǎo)航欄 膠囊菜單按鈕高度適配 原理簡單 賽過一些大廠的完美適配 媽媽再也不用擔(dān)心我強 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

微信小程序自定義導(dǎo)航欄 膠囊菜單按鈕高度適配 原理簡單 賽過一些大廠的完美適配 媽媽再也不用擔(dān)心我強

發(fā)表時間:2020-10-18

發(fā)布人:葵宇科技

瀏覽次數(shù):226

在自定義小程序?qū)Ш綑跁r,右上角的膠囊(MenuButton)在不同機型測試,會發(fā)現(xiàn)很難適配。

實測中 不同的手機,膠囊高度不一樣、狀態(tài)欄高度不一樣。與模擬器顯示的情況是不一樣的。

完全需要根據(jù)手機,動態(tài)的計算高度。

先看一些小程序頂部導(dǎo)航欄適配的情況

圖一 某團 圖二 某乎 圖三 某東 圖四 某拉

上圖適配做的最好的是某東,但仔細(xì)看仍會有一點錯位,但輸入框的顏色,淡化了這種不和諧感。


為解決這個問題就要搞清楚原理

這是在沒有設(shè)置自定義時的原生導(dǎo)航欄,我們發(fā)現(xiàn)整體的高度就是 (狀態(tài)欄高度 + 導(dǎo)航欄高度)

狀態(tài)欄高度可以通過 wx.getSystemInfo()獲取,現(xiàn)在就只用解決導(dǎo)航欄高度了

觀察發(fā)現(xiàn),膠囊頂部高度距導(dǎo)航欄頂部高度的高度差 和 膠囊底部高度距導(dǎo)航欄底部高度的高度差,是一樣的

也就是說 導(dǎo)航欄高度 = 膠囊高度 +(高度差)x 2

膠囊信息可以通過 wx.getMenuButtonBoundingClientRect() 獲取,現(xiàn)在就只用解決高度差了

wx.getMenuButtonBoundingClientRect() 中也返回了膠囊頂部距屏幕頂部距離的信息(top)

所以知 高度差 = 膠囊頂部距屏幕頂部距離 - 狀態(tài)欄高度


用這兩個API 我們可以得到如下的數(shù)據(jù)

導(dǎo)航欄整體高度 偽呆🐎

menu = wx.getMenuButtonBoundingClientRect()

system = wx.getSystemInfo

導(dǎo)航欄高度 = menu.statusBarHeight + menu.height + (menu.top - menu.statusBarHeight) * 2

到此我們就完美解決了導(dǎo)航欄高度的問題

導(dǎo)航欄內(nèi)容就是

內(nèi)容標(biāo)簽的view高度等于menu.height并且垂直居中


效果

真機效果

最終效果

講完了 上呆🐎


注: 一般需將自定義導(dǎo)航欄單獨出來為組件

app.js 呆🐎

//app.js
App({
  globalData: {},
 >//獲取應(yīng)用實例
const app = getApp()

Component({
  /**
   * 組件的屬性列表
   */
  properties: {
    //導(dǎo)航欄顏色
    navColor: {
      type: String,
      value: '#fff'
    }
  },

  /**
   * 組件的初始數(shù)據(jù)
   */
  data: {
    s: app.system.statusBarHeight, //狀態(tài)欄高度
    n: (app.menu.top - app.system.statusBarHeight) * 2 + app.menu.height, //導(dǎo)航欄高度
    h: app.menu.height //膠囊高度
  }
})

組件.wxml 呆🐎

<cover-view class='nav_box' style='background:{{navColor}}'>
  <cover-view style='height:{{s}}px' />
  <cover-view class='navBar' style='height:{{n}}px'>
    <cover-view class='content' style='height:{{h}}px'>

      <!-- 導(dǎo)航自定義內(nèi)容 -->
      <!-- 1. 插槽 可在使用頁面插入所需內(nèi)容 -->
      <slot></slot>

      <!-- 2. 選擇渲染 可在js頁面 設(shè)置渲染type屬性 不同場景傳不同值 -->
      <block wx:if='{{type == 0}}'>
        導(dǎo)航一
      </block>
      <block wx:if='{{type == 1}}'>
        導(dǎo)航二
      </block>
      <block  wx:else>
        導(dǎo)航三
      </block>

    </cover-view>
  </cover-view>
</cover-view>
<view style='height:{{s+n}}px' /> <!-- 注:占位用 -->

組件. wxss 呆🐎

.nav_box {
  position: fixed;
  width: 100%;
  font-size: 15px;
  z-index: 999;
}

.navBar {
  display: flex;
  align-items: center;
  padding: 0 10px;
}

.content {
  width: 100%;
  display: flex;
  align-items: center;
  background: green;
}

組件使用頁面.json 呆🐎

{
  "navigationStyle": "custom", //設(shè)置自定義導(dǎo)航
  "usingComponents": {
    "navBar": "../../組件/navBar/navBar" //自己的路徑
  }
}

相關(guān)案例查看更多