【CSS】類似淘寶金剛區(qū)的滾動(dòng)條效果-vue版本

html部分

<div class="container">
  <!-- 金剛區(qū),兩行-->
  <div class="king-area" @scroll="scroll}">
    <!-- rowMap:{first:[],second:[]  -->
    <div class="row" v-for="(items, key) in rowMap" :key="key">
      <!-- 上下結(jié)構(gòu)的icon和文字-->
      <div class="icon"
         v-for="(item, index) in items" :key="index">
        <!-- img如果有icon,用icon更佳 -->
        <img class="img" :src="item.icon" alt="" srcset="" />
        <div class="text">{{ item.text}}</div>
      </div>
    </div>    
  </div>
  <!-- 滾動(dòng)條|進(jìn)度條部分,這里直接套用vant-progress的效果 -->
  <div class="van-progress progress">
    <span class="van-progress__portion portion" :style="progressStyle"></span>
  </div>
</div>

兩行,可能會(huì)前后對(duì)齊有些問(wèn)題,看了下淘寶是每列2個(gè)icon, 根據(jù)總數(shù)分成n列
len: icon的個(gè)數(shù);list:icon對(duì)應(yīng)的列表;奇數(shù)時(shí),考慮最后一個(gè)沒(méi)有的處理,這里不說(shuō)明了

<div class="container">
  <div class="king-area"  @scroll="scroll">
    <div v-for="i in Math.ceil(len/2)" :key="i" class="col">
      <!-- rowIndex:[2,1] -->
      <div class="icon"
          v-for="j in rowIndex" :key="j">
          <img class="img" :src="list[2*i - j].icon" alt="" srcset="" />
          <div class="text">{{ list[2*i - j].title }}</div>
       </div>
    </div>    
  </div>
  <div class="van-progress progress">
    <span class="van-progress__portion portion" :style="progressStyle"></span>
  </div>
</div>

金剛區(qū)樣式部分這里就不具體介紹了,滾動(dòng)條部分可以如下:

.progress {
  top: 0.1rem;
  width:50px;
  left: 40%;
  .portion {
    background: rgb(242, 130, 106); width: 25px;
  }
}

下面直接寫(xiě)金剛區(qū)滾動(dòng)事件改變滾動(dòng)條(進(jìn)度條)的樣式
left,也可以用transform: translate(?);

export default {
    name:'XXX',
    data() {
        return {
            progressStyle:''
    }
    methods: {
        scroll(e) { 
            let {scrollWidth, clientWidth, scrollLeft} = e.target
            var maxScrollLeft = scrollWidth - clientWidth  //最大scrollLeft值
            let ratio = maxScrollLeft/50
            //用left,也可以用transform: translate(10px);
            this.progressStyle = `left: ${scrollLeft/ratio}%;`
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容