<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
專案要在多個頁面上加自定義導航欄,還要有漸變效果,就是隨著頁面上滑,導航欄透明度由0逐漸變為1。這裡面有幾個基本點需要注意下。
page 不能是height: 100%
,可以設定height: auto
,這樣才可以觸發 onPageScroll。
只有 page 才有 onPageScroll 事件。試驗發現,mixin 和頁面內都寫了 onPageScroll 的話,都會觸發。
如果把它放在 mixin 中,寫成下面這樣,可能會有問題:
data() { return { pageScrollTop: 0, }; }, onPageScroll({ scrollTop }) { this.pageScrollTop = scrollTop || 0; },
因為自定義導航欄不一定要在頁面級元件上,很多頁面都是寫在子元件裡,而 mixin 是各個元件各自維護了一份data,所以無法傳遞。這也是Vue元件和小程式元件的不同之處。
解決方法有多個:
這裡面還有兩個效能相關的點要注意下:
綜上,目前採用的方案是:
mixin中,監聽 onPageScroll,因為這個在只會在當前頁面觸發,子元件會被忽略,所以寫在這裡並不影響效能。
vuex 中儲存 pageScrollTop、mpHeaderHeight,及一個衍生變數 mpHeaderBg。
然後,需要使用 mpHeaderBg 的頁面,去參照 vuex 中的變數。
如果想要在一個新頁面加上漸變導航,只需要參照 vuex 中的 mpHeaderBg 即可。
// 某個頁面 <template> <MatchHeaderMp :header-bg="mpHeaderBg" /> </template> <script> computed: { mpHeaderBg() { // getMpHeaderBg 方法來自於 mixin return this.getMpHeaderBg(); }, } </script>
// mixin export const uniSystemInfoMixin = { data() { return { // page-meta上設定的根標籤字型大小 mixinRootFontSize: 50, }; }, mounted() { // 設定根字型大小 this.onSetFontSize(); }, onPageScroll({ scrollTop }) { const mpHeaderHeight = this.$store.state.wxHeader.mpHeaderHeight || 44; const pageScrollTop = this.$store.getters.['wxHeader/pageScrollTop'] || 44; const parsedScrollTop = scrollTop > mpHeaderHeight ? mpHeaderHeight : scrollTop; // 如果滑動值大於 mpHeaderHeight,就不再更新 data if (parsedScrollTop === mpHeaderHeight && pageScrollTop === mpHeaderHeight) { return; } this.$store.commit('wxHeader/setPageScrollTop', parsedScrollTop); }, beforeDestroy() { if (this.mpType === 'page') { this.$store.commit('wxHeader/setPageScrollTop', 0); } }, methods: { getMpHeaderBg() { const pageScrollTop = this.getMpPageScrollTop(); const mpHeaderHeight = this.$store.state.wxHeader.mpHeaderHeight || 44; return `rgba(255, 255, 255, ${Math.min(1, pageScrollTop / mpHeaderHeight)})`; }, getMpPageScrollTop() { const curPageName = this.getCurPageName(); const pageScrollTopMap = this.$store.state.wxHeader.pageScrollTopMap || {}; return pageScrollTopMap[curPageName] || 0; }, getCurPageName() { const pages = getCurrentPages(); return pages[pages.length - 1].route; }, onSetFontSize() { // 寬度 375 時(iphone6),rootFontSize為50,則一份為 375/50=7.5 const screenNumber = 7.5; const that = this ; if (that.mpType === 'page') { // 表單改變大小觸發事件 uni.onWindowResize((res) => { if (res.size.windowWidth) { that.mixinRootFontSize = parseFloat(res.size.windowWidth) / screenNumber; } }); // 開啟獲取螢幕大小 uni.getSystemInfo({ success(res) { const fontsize = res.screenWidth / screenNumber; that.mixinRootFontSize = fontsize; const mpHeaderHeight = res.statusBarHeight + 44; that.$store.commit('wxHeader/setMpHeaderHeight', mpHeaderHeight); }, }); } }, }, };
// store/modules/wx-header.js const wxHeaderStore = { namespaced: true, state: () => ({ // 存放多個頁面的pageScrollTop pageScrollTopMap: {}, // 狀態列高度 mpHeaderHeight: 44, }), mutations: { setPageScrollTop(state, pageScrollTop = 0) { const curPageName = getCurPageName(); state.pageScrollTopMap = { ...state.pageScrollTopMap, [curPageName]: pageScrollTop, }; }, setMpHeaderHeight(state, mpHeaderHeight) { state.mpHeaderHeight = mpHeaderHeight; }, }, };
page
和所有scroll view
,所以要在beforeDestroy
中重置pageScrollTop
。到此這篇關於uni-app小程式沉浸式導航實現的文章就介紹到這了,更多相關uni-app小程式沉浸式導航內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45