微信小程序根据页面滚动距离固定分类导航

方法一:


1,wxml

<view wx:if="{{ scrollTop >= 300 }}" class='itemBox'></view>

<view class="{{scrollTop >= 300 ? 'topnavFixed' : 'proItem'}}">

    <!-- 内容 -->

</view>

.proItem {

  background: #ffffff;

  z-index: 111;

  padding-left: 35rpx;

  height: 75rpx;

  border-top: 1rpx solid #f5f5f5;

  border-bottom: 1rpx solid #f5f5f5;

  box-sizing: border-box;

}

.itemBox{

  height: 75rpx;

}

.topnavFixed{

  background: #ffffff;

  z-index: 1111111;

  position: fixed;

  top: 0;

  height: 75rpx;

  width: 100%;

  padding-left: 35rpx;

  border-top: 1rpx solid #f5f5f5;

  border-bottom: 1rpx solid #f5f5f5;

}

2,js

onPageScroll(e) {

console.log(e);

vartop = e.scrollTop;

this.setData({

scrollTop:top

    })

  },

注意:

此方法只适用于分类部分在顶部的位置,因为300是具体值,所以做不到兼容各个型号;

方法二:

1,整体布局代码

<scroll-view scroll-y='true' style='height:100%;' bindscroll="scroll">

  <view>

    <view class="container">

      <view class='box' hidden='{{!hidFirstView}}'>

        <view class='boxHeight'>

          <!-- 轮播图 -->

          <view class='banner'></view>

          <!-- 四个大按钮 -->

          <view class='buttonView'></view>

        </view>

        <!-- 商品分类 -->

        <view wx:if="{{ scrollTop >= boxHeight }}" class='itemBox'></view>

        <view class="{{scrollTop >= boxHeight ? 'topnavFixed' : 'proItem'}}">


        </view>

        <!-- 商品列表 -->

        <view class='proList' data-id='{{ item.id }}' bindtap='a' wx:for="{{productList}}">


        </view>

      </view>

    </view>

</scroll-view>

2,js代码

scroll:function(e){

  this.setData({

    scrollTop: e.detail.scrollTop

  })

},

//根据元素id获取元素高度,若此处元素是数据渲染生成的,则需要在页面渲染完成之后执行此方法,不然页面没渲染完成获取的这个元素高度会是0

var query = wx.createSelectorQuery();

    //选择id

    query.select('.boxHeight').boundingClientRect(function (rect) {

    that.setData({

      boxHeight: rect.height

    })

}).exec();

注意:

页面有的模块是经过请求数据后渲染出来的,此时若每个元素外层已经套了一层有固定高度的父元素,则  wx.createSelectorQuery 获取到 boxHeight 的高度就不会受渲染前后的影响;

若没有在外层套固定高度的父元素,此时 boxHeight 的高度就会受数据渲染速度影响。

建议:

要么,外层套一个有固定高度的父元素;

要么,在该请求数据接口成功的回调函数里使用 wx.createSelectorQuery;

文章来源:https://blog.csdn.net/weixin_42157001/article/details/93166305

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容