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

小程序自定義導(dǎo)航欄中使用粘性布局無(wú)效的解決辦法 - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

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

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >

小程序自定義導(dǎo)航欄中使用粘性布局無(wú)效的解決辦法

發(fā)表時(shí)間:2021-1-4

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

瀏覽次數(shù):259

一、引言

最近公司在做一個(gè)類似購(gòu)物商城的小程序項(xiàng)目,那就不免要自定義導(dǎo)航欄,但是我發(fā)現(xiàn)了一個(gè)問(wèn)題,就是在使用自定義導(dǎo)航欄的頁(yè)面中再次使用粘性布局是混亂的,它會(huì)粘在屏幕的最上面,這樣就會(huì)覆蓋導(dǎo)航欄的內(nèi)容。

二、自定義導(dǎo)航欄

如果需要自定義導(dǎo)航欄并且適配所有手機(jī)型號(hào)就得知道導(dǎo)航欄的高度,而導(dǎo)航欄的高度是由手機(jī)設(shè)備狀態(tài)欄的高度、膠囊的高度、膠囊距離狀態(tài)欄的上下邊距,這三者之和才是真正的導(dǎo)航欄的高度。


三、粘性布局

如果你在小程序中自定義了導(dǎo)航欄,這時(shí)候你需要在標(biāo)簽欄中使用粘性布局,不管是使用Vant UI組件庫(kù)中的sticky屬性或者van-sticky組件還是用CSS的position:sticky屬性都無(wú)法達(dá)到預(yù)期的效果,原因是默認(rèn)將top的值設(shè)置為了0像素,這就需要將top的值設(shè)置為導(dǎo)航欄的高度,先來(lái)看一張圖:

由此可知,導(dǎo)航欄的高度=狀態(tài)欄的高度+膠囊的高度+膠囊的上下邊距 x 2

那么怎么拿到不同型號(hào)手機(jī)的狀態(tài)欄高度和膠囊高度以及膠囊的上下邊距呢?

狀態(tài)欄的高度和膠囊信息可以使用微信自定義的方法wx.getSystemInfo()和wx.getMenuButtonBoundingClientRect()獲取,分別得到如下信息:

由第一張圖可知狀態(tài)欄(statusBarHeight)的高度是44,由第二張圖可知膠囊的高度(height)是32,top是膠囊頂部距離屏幕頂部的距離,那么膠囊距離狀態(tài)欄的上邊距就是top值減去狀態(tài)欄的高度,也就是48 - 44 = 4,那么上下邊距加起來(lái)就是4 x 2 = 8,所以整個(gè)導(dǎo)航欄的高度就是:statusBarHeight + height + (top - statusBarHeight) x 2,即 44 + 32 + ( 48 - 44 ) x 2 = 88px

當(dāng)然不同的手機(jī)型號(hào)會(huì)得到不同的值。


四、具體用法

根據(jù)需求如果需要在多個(gè)頁(yè)面中使用就可以在app.js中調(diào)用以上兩種方法并賦值

//獲取系統(tǒng)信息
    wx.getSystemInfo({
      success: res => {
        this.system = res
      }
    })
//獲取膠囊信息
   this.menu = wx.getMenuButtonBoundingClientRect()

然后在具體某個(gè)頁(yè)面的js文件中獲取值:

//獲取應(yīng)用實(shí)例
const app = getApp();
Page({
    data: {
        navHeight: ((app.menu.top - app.system.statusBarHeight) * 2 + app.menu.height + app.system.statusBarHeight + 1), //導(dǎo)航欄高度
    }
})

之后可以在wxss文件中設(shè)置樣式:

.tabs_title{
    position: sticky;
    z-index: 99999;
}

top值在wxml中用模板語(yǔ)法綁定:

    class="tabs_title" style="top: {{navHeight}}px">
        <scroll-view scroll-x="true">
           ......
        scroll-view>
    </view>

大功告成,這樣既可以在微信小程序中使用自定義導(dǎo)航欄也可以使用粘性布局了。大家也可以自行封裝組件以備在多個(gè)頁(yè)面中用到或者日后使用。

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