導航:橫向導航 豎嚮導航 在很多業務場景中都會用到,那今天我們今天基於微信小程式平臺,分析下導航的製作處理
先看例子
平臺都是大家常用的平臺
首先呢,導航 確實方便了使用者更快更準確的獲取需求資訊,使整個產品 有一個很清晰的 互動流程導航需要手動滑動切換,小程式的操作流程度只能說優與 瀏覽器,還是比不上native
,有時候滑動出現卡頓,最可怕的是出現滾動條,頓時會覺得有點 low
言歸正傳,直接看demo
利用 scroll-view
監聽更新 滾動條的位置,讓選中模組自動滾動進入檢視,同時開啟scroll-with-animation
達到緩動的動畫效果
wxml
<scroll-view class="navBar-box" scroll-x="true"
scroll-with-animation="true" scroll-left="{{scrollL}}">
<view class="cate-item {{curIndex == index ? 'active':''}}"
wx:for="{{category}}" wx:key="{{item.id}}" data-id="{{item.id}}"
data-index="{{index}}" bindtap="switchCategory">
{{item.name}}
</view>
</scroll-view>
複製程式碼
資料解釋:
scrollL
滾動條滾動位置,用於更新滾去距離,達到導航模組 檢視進入視口curIndex
當前選中的導航子類,用於定位當前模組的active
樣式區分category
導航子類陣列,遍歷展示switchCategory
捕獲點選導航子類的位置等相關資訊
data 資料
data: {
title: 'NavBar',
curIndex:0, // 當前選中的索引值
category:[ // 導航集合資料資訊
{
name:'推薦',
id:1,
},
******
],
wWidth: 0, // 視口寬度
wHeight:0, // 視口高度
scrollL: 0, // 導航滾動的數值
},
複製程式碼
初始化 獲取視口資訊
show(){
let wData = wx.getSystemInfoSync();
this.setData({
wWidth:wData.windowWidth,
wHeight:wData.windowHeight,
})
},
複製程式碼
即時捕獲更新導航位置
switchCategory:function(e){
let idx = e.currentTarget.dataset.index; // 獲取點選元素的索引
this.setData({curIndex:idx})
let offsetL = e.target.offsetLeft; // 點選的item距離適口view左邊界距離
/**
* 獲取點選元素距離中心的偏移量
* 滾動距離 = 偏移數值 - 視口/2 (稍微增加一些元素的中間數值)
*/
let scrollL = offsetL - this.data.wWidth/2 + 20;
scrollL = scrollL > 0 ? scrollL : 0;
this.setData({ scrollL:scrollL })
},
複製程式碼
具體偏移資料目前還不能達到一個自動化計算的程度,當然可以按照當前item
中的 (字數 * 字型大小 + 左右偏移)/2 達到一個準確的資料,使得 導航選中的子類如有條件居中時,更加準確
ps: 隱藏滾動條
::-webkit-scrollbar{
width: 0;
height: 0;
color: transparent;
}
複製程式碼
開啟彈性滾動
page{
-webkit-overflow-scrolling: touch;
}
複製程式碼