= 300 }}" class='i...">
美文网首页
微信小程序根据页面滚动距离固定分类导航

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

作者: Litzy_b986 | 来源:发表于2019-10-12 10:22 被阅读0次

    方法一:

    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

    相关文章

      网友评论

          本文标题:微信小程序根据页面滚动距离固定分类导航

          本文链接:https://www.haomeiwen.com/subject/pakxmctx.html