小程序 swiper 組件默認高度150px,而且若是子元素太高,swiper不會自適應高度javascript
若是不是滿屏的狀態,用scroll-view IOS滑動兼容性很差,在IOS會有沒法滑動的狀況html
<swiper class="content" style="height:{{height}}px" bindchange="change" current-item-id="{{docid}}" duration="100" > <swiper-item data-key="{{item.id}}" wx:for="{{title}}" wx:key="index" item-id="{{item.id}}" > <scroll-view data-id="{{item.id}}" style='height:100%;' scroll-y bindscrolltolower="scrolltolower" data-left="51" scroll-top="{{top}}" bindscroll="scroll" > <!--單條新聞start --> <navigator url="/pages/detail/detail?id={{item.docid}}" class="item" wx:for="{{item.id==docid?news:''}}" wx:key="index"> </navigator> <!--單條新聞end --> <view class='loading'>加載中...</view> </scroll-view> </swiper-item> </swiper>
適應場景:java
適合這種滿屏滑動的,嵌套 scroll-view 小程序
注意:
橫向滑動 scroll-x white-space:nowrap;ui
而後在上滑過程當中,導航欄還須要吸頂,而後滑動下方tab欄的內容url
其實若是不是基於小程序,咱們能夠很直接用swiper插件,操做起來簡直方便,小程序因爲 swiper 高的限制,真是走了很多彎路,若是下面的列表高度同樣,咱們即可以算出一個的高度,而後乘以個數便可,可是這樣只能求出每個個數spa
<swiper current="{{current}}" bindchange="change" duration="300" style="height:{{swiper_height + 80}}px;min-height:50%vh;"> <swiper-item class="swiper-item" wx:for="{{channel_list}}" wx:key="{{item.id}}"> <!-- navigator 的類名很重要,雖然一個循環用統同樣式,可是咱們基於不一樣的tab 取了不用的類名 ,由於小程序沒法操做DOM元素,雖然封裝的API 能夠獲取,可是隻能獲取第一個和全部,咱們每一個tab的內容個數不同,因此須要基於每一個tab欄求,item.channelId 是圖2標註吸頂效果的channelId, --> <navigator class="column-list column-list{{item.channelId}}" url="" wx:for="{{item.viewLessonList}}" wx:for-item="lesson" wx:key="{{index}}" wx:key-item="lesson-item"> 這裏面即是一個一個不一樣高度的列表 </navigator> <!-- 這下面就是weui的一個加載樣式,基於分頁加載作的不一樣樣式 --> <view class="weui-loadmore" hidden="{{is_loadmore}}"> <view class="weui-loading"></view> <view class="weui-loadmore__tips">正在加載</view> </view> <view class="weui-loadmore weui-loadmore_line" hidden="{{!is_loadmore}}"> <text class="weui-loadmore__tips">左右滑動,查看更多</text> </view> </swiper-item> </swiper>
// 獲取wxml的節點信息 function get_wxml(className, callback) { wx.createSelectorQuery().selectAll(className).boundingClientRect(callback).exec() } onReady: function() { let column_all = that.data.column_list[that.data.current].viewLessonList, // 這個是基於java端返回的tab欄的接口,大體樣式如上圖,也就是每一個列表, channel_id = that.data.column_list[that.data.current].channelId // 咱們這個就是求出目前的channelId,好區分不一樣的類名 that.setData({ swiper_length: column_all.length // 算出當前tab欄有多少個列表 }) get_wxml(`.column-list${channel_id}`, (rects) => { let sum_heigth = 0 for (let i = 0; i < that.data.swiper_length; i++) { sum_heigth += rects[i].height } that.setData({ swiper_height: sum_heigth }) // 就是循環相加每一個列表的高度,而後賦值給swiper_height,即可以求出當前tab欄的高度,賦值給swiper 即可以swiper高度自適應 }) }