国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序自定義底部導(dǎo)航欄

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序自定義底部導(dǎo)航欄。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概要

微信小程序自定義底部導(dǎo)航欄,原生實(shí)現(xiàn),不包含其他任何第三方組件,比較干凈,開箱即用
效果預(yù)覽:
微信小程序底部,微信小程序,小程序

功能

  1. 可自定義底部導(dǎo)航欄列表樣式
  2. 可自定義每個(gè)菜單的默認(rèn)、激活后的圖標(biāo)和文字樣式
  3. 可自定義是否添加中間的大圖標(biāo)菜單,當(dāng)然也可自定義大圖標(biāo)的默認(rèn)與激活樣式
  4. 可自定義激活動(dòng)畫,默認(rèn)這個(gè)心跳過(guò)渡動(dòng)畫
  5. 可獲取到底部導(dǎo)航欄高度,存在app全局變量中,其他頁(yè)面有特殊需求需要?jiǎng)討B(tài)計(jì)算頁(yè)面高度時(shí)可能需要用到此屬性
  6. 解決點(diǎn)擊導(dǎo)航菜單時(shí),激活的菜單貌似并不同步的問(wèn)題
  7. 底部根據(jù)是否有安全距離自動(dòng)調(diào)整

源碼

不廢話,直接貼上完整源碼

微信小程序底部,微信小程序,小程序
js

const app = getApp()
Component({
  /**
   * 組件的屬性列表
   */
  properties: {

  },

  /**
   * 組件的初始數(shù)據(jù)
   */
  data: {
    selected: 0, // 激活的tab
    // tabber列表,與app.json一致
    color: "#666666",
    selectedColor: "#ff0000",
    backgroundColor: "#ffffff",
    // 注: list中的pagePath需要加'/'開頭,否則在switchTab跳轉(zhuǎn)url時(shí)會(huì)自帶/src/pages開頭導(dǎo)致路徑錯(cuò)誤
    list: [{
      "pagePath": "/src/pages/home/home",
      "icon": "./images/home.png",
      "iconActive": "./images/home-a.png",
      "text": "首頁(yè)",
    }, {
      "pagePath": "/src/pages/monitor/monitor",
      "icon": "./images/relic.png",
      "iconActive": "./images/relic-a.png",
      "text": "文物監(jiān)測(cè)"
    }, {
      "pagePath": "/src/pages/map/map",
      "icon": "./images/map.png",
      "iconActive": "./images/map.png",
      "center": true, // 中間大圖標(biāo)的參數(shù),true時(shí)就會(huì)變大,默認(rèn)非大圖標(biāo)
    }, {
      "pagePath": "/src/pages/news/news",
      "icon": "./images/hot.png",
      "iconActive": "./images/hot-a.png",
      "text": "文博資訊"
    }, {
      "pagePath": "/src/pages/mine/mine",
      "icon": "./images/mine.png",
      "iconActive": "./images/mine-a.png",
      "text": "我的"
    }],
    tabbarHeight: 0
  },

  lifetimes: {
    attached: function () {
      // 獲取tab欄高度
      const query = wx.createSelectorQuery().in(this)
      query.select('#tabbar').boundingClientRect((res) => {
        // console.log('tab欄dom', res);
        this.setData({
          tabbarHeight: res.height
        })
        // 將tab欄高度設(shè)置進(jìn)全局?jǐn)?shù)據(jù)
        app.globalData.tabbarHeight = res.height
      }).exec()

      /**
       * 將初始化tabbar欄方法存入全局
       * @param {*} that 傳入當(dāng)前tab頁(yè)面的this實(shí)例
       * @param {*} index 傳入當(dāng)前tab頁(yè)面的索引
       * 若無(wú)該方法,會(huì)導(dǎo)致點(diǎn)擊tab時(shí)激活的tab順序錯(cuò)亂!
       * 例如在home首頁(yè)onShow的生命周期鉤子中,getApp().globalData.initTabbar(this, 0)
       */
      app.globalData.initTabbar = (that, index) => {
        if (typeof that.getTabBar === 'function' && that.getTabBar()) {
          that.getTabBar().setData({
            selected: index
          })
        }
      }
    }
  },

  /**
   * 組件的方法列表
   */
  methods: {
    switchTab(e) {
      // bind事件綁定不會(huì)阻止冒泡事件向上冒泡,catch事件綁定可以阻止冒泡事件向上冒泡
      const {
        index,
        url
      } = e.currentTarget.dataset
      if (this.data.selected !== index) {
        this.setData({
          selected: index
        })
        wx.switchTab({
          url: url,
        })
      }
    }
  }
})

wxml

<view class="tabbar" style="background-color: {{backgroundColor}};" id="tabbar">
  <view class="{{'tab'}} {{selected == index ? 'beat' : ''}}" wx:for="{{list}}" wx:key="item" catchtap="switchTab" data-index="{{index}}" data-url="{{item.pagePath}}">
    <view class="{{'tab-icon'}} {{item.center ? 'tab-icon-center' : ''}}" style="background-color: {{backgroundColor}};">
      <image style="width:100%;height:100%;" src="{{selected == index ? item.iconActive : item.icon}}" mode="" />
    </view>
    <view style="font-size:24rpx;color:{{selected == index ? selectedColor : color}}">
      {{item.text}}
    </view>
  </view>
</view>

wxss

.tabbar {
  position: fixed;
  bottom: 0;
  width: 100%;
  height: 120rpx;
  background: rgba(255, 255, 255, 1);
  box-shadow: 0 2px 16px rgba(184, 184, 210, 0.5);
  /* 利用ios新增的 env() 和 constant() 特性,自動(dòng)計(jì)算底部安全距離 */
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);

  display: flex;
  justify-content: space-evenly;
}

.tab {
  width: 100%;
  height: 100%;
  flex: 1;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  position: relative;
}

.tab-icon {
  width: 68rpx;
  height: 68rpx;
}

.tab-icon-center {
  width: 160rpx;
  height: 160rpx;
  position: absolute;
  top: -24rpx;
  padding: 12rpx;
  box-sizing: border-box;
  border-radius: 80rpx;
}

.beat {
  animation: beat 0.8s both;
}

@keyframes beat {
  0% {
    transform: scale3d(1, 1, 1);
  }
  30% {
    transform: scale3d(1.05, 0.95, 1);
  }
  40% {
    transform: scale3d(0.85, 1.15, 1);
  }
  50% {
    transform: scale3d(1.15, 0.85, 1);
  }
  65% {
    transform: scale3d(0.95, 1.05, 1);
  }
  75% {
    transform: scale3d(1.05, 0.95, 1);
  }
  100% {
    transform: scale3d(1, 1, 1);
  }
}

不要忘了在app.json文件中添加 tabBar 屬性

"tabBar": {
    "custom": true,
    "color": "#666666",
    "selectedColor": "#ff0000",
    "backgroundColor": "#000000",
    "list": [
      {
        "pagePath": "src/pages/home/home",
        "text": "首頁(yè)"
      },
      {
        "pagePath": "src/pages/monitor/monitor",
        "text": "監(jiān)測(cè)"
      },
      {
        "pagePath": "src/pages/map/map",
        "text": "地圖"
      },
      {
        "pagePath": "src/pages/news/news",
        "text": "資訊"
      },
      {
        "pagePath": "src/pages/mine/mine",
        "text": "我的"
      }
    ]
  }

細(xì)節(jié)

  • 注意上述js代碼塊中 initTabbar 方法,需要在每個(gè)tabbar頁(yè)面使用
    例如首頁(yè)是home,那么就在home.js中的onShow生命周期鉤子中,寫上getApp().globalData.initTabbar(this, 0)即可,參數(shù)中的0就是該tabbar的索引位置,第一個(gè)頁(yè)面就是0,第二個(gè)就是1,以此類推
  • 注意頁(yè)面路徑問(wèn)題,在代碼塊中有注釋
  • 注意這個(gè)custom-tab-bar組件要放在根目錄哦

改進(jìn)

有問(wèn)題和改進(jìn)建議還請(qǐng)?jiān)谠u(píng)論區(qū)留言,覺得代碼還不錯(cuò)的話,還望點(diǎn)個(gè)贊讓更多人看到哦文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732538.html

到了這里,關(guān)于微信小程序自定義底部導(dǎo)航欄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序01-底部導(dǎo)航欄設(shè)置

    微信小程序01-底部導(dǎo)航欄設(shè)置

    1 在app.json找到?pages,增加pages配置地址欄路徑,保存后會(huì)自動(dòng)生成相應(yīng)文件夾; 2,增加??tabBar? 參數(shù),“selectedColor” 參數(shù)是設(shè)置選中后文字的顏色;\\\"list\\\" 中放置導(dǎo)航數(shù)據(jù)。 ? ? ?list 中 相關(guān)參數(shù):?pagePath ---- 指向地址 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? text? ?----?

    2024年02月12日
    瀏覽(18)
  • 微信小程序底部導(dǎo)航跳轉(zhuǎn)tabBar頁(yè)不觸發(fā)onLoad

    微信小程序底部導(dǎo)航跳轉(zhuǎn)tabBar頁(yè)不觸發(fā)onLoad

    .js加上onTabItemTap();方法

    2024年02月09日
    瀏覽(33)
  • 【微信小程序-原生開發(fā)】實(shí)用教程02-添加全局頁(yè)面配置、頁(yè)面、底部導(dǎo)航

    【微信小程序-原生開發(fā)】實(shí)用教程02-添加全局頁(yè)面配置、頁(yè)面、底部導(dǎo)航

    開始前,請(qǐng)先完成項(xiàng)目創(chuàng)建,詳見 【微信小程序-原生開發(fā)】實(shí)用教程01-注冊(cè)登錄賬號(hào),獲取 AppID、下載安裝開發(fā)工具、創(chuàng)建項(xiàng)目、上傳體驗(yàn) 因我們的項(xiàng)目是根據(jù)模板創(chuàng)建的,需先清理掉無(wú)效的頁(yè)面代碼,具體操作方式如下: 刪除 pages 文件夾下的所有文件 用下方代碼替換掉

    2023年04月10日
    瀏覽(20)
  • 優(yōu)雅實(shí)現(xiàn)微信小程序動(dòng)態(tài)tabBar,根據(jù)不同用戶角色顯示不同底部導(dǎo)航

    優(yōu)雅實(shí)現(xiàn)微信小程序動(dòng)態(tài)tabBar,根據(jù)不同用戶角色顯示不同底部導(dǎo)航

    背景 在開發(fā)小程序過(guò)程中,有個(gè)需求是,小程序底部的tabBar需要根據(jù)不同用戶角色顯示不同底部導(dǎo)航。此時(shí)就需要用到自定義底部導(dǎo)航 custom-tab-bar。 上次發(fā)文是組合顯示4個(gè)底部tabBar導(dǎo)航,很多小伙伴評(píng)論說(shuō)組合超過(guò)5個(gè)怎么辦。他們的需求總數(shù)超過(guò)5個(gè)了。 現(xiàn)在我在這里更新

    2024年02月14日
    瀏覽(31)
  • 微信小程序——自定義底部tabBar

    微信小程序——自定義底部tabBar

    目錄 ?實(shí)現(xiàn)步驟 1、配置信息 2、添加代碼文件。 ?3、在該目錄下編寫代碼即可。 二、在app.json里面添加tabBar配置 三.、在custom-tab-bar添加配置 1. 在custom-tab-bar創(chuàng)建如下目錄 2.給index.wxml添加tabBar的結(jié)構(gòu)代碼 ? 3.?給index.js 添加數(shù)據(jù)配置 和 事件方法 4.?給index.wxss 添加樣式 四、

    2024年02月16日
    瀏覽(16)
  • 微信小程序底部tabbar自定義 實(shí)現(xiàn)凸起+透明底部效果

    微信小程序底部tabbar自定義 實(shí)現(xiàn)凸起+透明底部效果

    先上圖看效果: 步驟: 1、在文件根目錄下創(chuàng)建一個(gè)文件夾:custom-tab-bar并分別創(chuàng)建 (js,json,wxml,wxss)類型文件 2、在pages.json中設(shè)置tabbar中的custom為true(true自定義,false默認(rèn)系統(tǒng)) 3、index.js代碼如下:

    2024年02月09日
    瀏覽(26)
  • 微信小程序自定義 底部 tabbar (中間凸起)

    微信小程序自定義 底部 tabbar (中間凸起)

    在與 pages 文件夾同級(jí)的地方新建 custom-tab-bar 文件夾,并新建 index.wxml 、index.wxss 、index.js 、index.json 四個(gè)文件夾 注意路徑?。?! 復(fù)制后會(huì)報(bào)錯(cuò),把圖片和頁(yè)面路徑改掉就好了?。?! 提示: 不要無(wú)腦復(fù)制,復(fù)制到自己的項(xiàng)目中后記得更改圖片、頁(yè)面路徑!??! 如需自定義 頭

    2024年02月20日
    瀏覽(26)
  • 微信小程序自定義底部菜單設(shè)計(jì),固定在底部,并非使用tabBar設(shè)計(jì)

    微信小程序自定義底部菜單設(shè)計(jì),固定在底部,并非使用tabBar設(shè)計(jì)

    1.微信小程序自定義底部菜單設(shè)計(jì),并且固定在底部,并非tabBar設(shè)計(jì) 場(chǎng)景:比如加載詳情頁(yè)時(shí):底部需要加入購(gòu)物車、收藏、返回主頁(yè)等設(shè)計(jì) 效果圖: 點(diǎn)擊事件發(fā)生 xx.wxml 樣式設(shè)計(jì)xx.wxss js設(shè)計(jì)xx.js

    2024年02月16日
    瀏覽(37)
  • uniapp&&微信小程序底部彈窗自定義組件

    uniapp&&微信小程序底部彈窗自定義組件

    個(gè)人項(xiàng)目地址:?SubTopH前端開發(fā)個(gè)人站 ? (自己開發(fā)的前端功能和UI組件,一些有趣的小功能,感興趣的伙伴可以訪問(wèn),歡迎提出更好的想法,私信溝通,網(wǎng)站屬于靜態(tài)頁(yè)面) SubTopH前端開發(fā)個(gè)人站 https://subtop.gitee.io/subtoph.github.io/#/home ?基礎(chǔ)彈窗效果組件 在頁(yè)面使用 父組件

    2024年02月14日
    瀏覽(19)
  • 微信小程序自定義頂部導(dǎo)航,滾動(dòng)頁(yè)面頂部導(dǎo)航顏色漸變

    微信小程序自定義頂部導(dǎo)航,滾動(dòng)頁(yè)面頂部導(dǎo)航顏色漸變

    微信小程序自定義頂部導(dǎo)航欄,使背景圖置頂;當(dāng)向上滾動(dòng)頁(yè)面時(shí),實(shí)現(xiàn)頂部導(dǎo)航顏色漸變 實(shí)現(xiàn)方法 代碼如下(示例): 提示:由于不同的手機(jī)機(jī)型頂部導(dǎo)航高度不一樣,所有要獲取手機(jī)的信息 總共三步: 1、初始化獲取頂部導(dǎo)航信息 2、頂部導(dǎo)航文字上方通過(guò)view占位,同

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包