溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用vant時 tab欄中出現(xiàn) van-tabs怎么解決

發(fā)布時間:2020-11-05 15:10:03 來源:億速云 閱讀:4691 作者:Leah 欄目:開發(fā)技術

本篇文章為大家展示了使用vant時 tab欄中出現(xiàn) van-tabs怎么解決,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

話不多說,先看下問題描述:

我的需求:(和頭條的tab欄類似 ,單擊查看頭條tab欄)

點擊tab欄,下方展示出來當前tab欄下的內容列表(A頁面),點擊列表進入詳情內容(B頁面),但是返回(A頁面)的時候,需要顯示剛才被點擊的tab欄高亮顯示。(如果tab欄橫向有滾動條,那也得讓被選中的高亮顯示)。

所以,大部分人的解決辦法就是將當前選中的tab的索引緩存起來,等回到該頁面的時候,讓被緩存的那個高亮顯示出來。

坑的問題在于:van-tabs,里面的v-model默認值是0,但是類型卻寫著 number | string 。

使用vant時 tab欄中出現(xiàn) van-tabs怎么解決

但是,在此時用緩存賦值給 v-model = " active " 的時候,active的值需要是number類型,才有效,否則再怎么設置都是無效的。

【代碼放入項目可直接執(zhí)行】

<template>
  <div>
    <van-tabs v-model="active" 
      @click="tabHandler"
      :ellipsis="false"
      :border="false"
      >
      <van-tab v-for="(tabname,idx) in tabList" :key="idx" :title="tabname"></van-tab>
    </van-tabs>
    <van-button @click="toDetailHandler">去詳情頁</van-button>
  </div>
</template>
<script>
export default{
  data(){
    return{
      active: Number(localStorage.getItem('activeIdx'))&#63;Number(localStorage.getItem('activeIdx')):0,
      tabList:['111111','2222222','3333333','44444444','55555','666666','7777777','88888','999999999'],
    }
  },
  methods:{
    // tab點擊事件
    tabHandler(idx){
      this.active = idx;
      localStorage.setItem('activeIdx',idx)  // 將選中的tab緩存起來
    },
    // 去詳情頁
    toDetailHandler(){
      this.$router.push('/tab1')
    }
  }
}
</script>

最終的效果圖是這樣的,和頭條的tab欄的效果是一樣的。點擊查看 頭條tab效果

使用vant時 tab欄中出現(xiàn) van-tabs怎么解決

補充知識:vue移動端框架van-sticky粘性布局,實現(xiàn)原理和失效原因及注意點

說到粘性布局,我們最常見的就算在app tab選項卡隨頁面滾動到頂部后懸停在那,看效果

使用vant時 tab欄中出現(xiàn) van-tabs怎么解決

要實現(xiàn)這個效果,最簡單的辦法就是在css樣式里添加position:sticky就可以實現(xiàn),就這么簡單,比用js監(jiān)聽頁面滾動,然后達到一定高度樣式變?yōu)閒ixed,簡單且性能好。

vue 的van-sticky組件實現(xiàn)粘性的原理就是通過添加position:sticky實現(xiàn)的,但是如果你使用了position:sticky后失效,并沒有效果的原因有:

1.父元素高度沒子元素高,通常為父元素設置height:100%;

2:父元素設置了overflow:hidden,overflow-x:hidden,overflow-y:hidden,或者overflow:auto屬性都能影響到

其中父元素是指所有父元素,不單單是上一級父元素,在vue中如果失效了別忘了看app.vue組件里是不是設置了這些。

解決好失效問題后,我們再看van-sticky的其中一個懸停的時候距離頂部的距離offset-top

offset-top單位為px,在pc端沒問題,但在移動端就有問題了,比如你設計稿距離頂部的距離為90px,如果你直接offset-top=90,那么在手機上就會距離很遠,

用window.devicePixelRatio獲取設備的像素,然后再進行換算,說實話不同手機上還是有差別,有的手機達到效果,有的沒達到

目前我是用了獲取元素offsetHeight在賦值回去,如this.$refs.getheight.offsetHeight,經(jīng)測試能準確達到固定的位置,

上述內容就是使用vant時 tab欄中出現(xiàn) van-tabs怎么解決,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI