微信小程序菜单栏滑动定位

需求:类似淘宝、京东的商品页,滑动到一定距离,菜单栏固定

html:

<view>
    <view class="text">顶部区域</view>
    <view id="main">
        <view id="nav" class="column {{isFixedTop?'fixed':''}}">
            <view class="swiper-tab-list active">美甲</view>
            <view class="swiper-tab-list">美发</view>
        </view>
        <view id="content" class="{{isFixedTop?'hasTop':''}}">
            内容区
        </view>
    </view>
</view>

css:


.text{
  height: 300rpx;
  text-align: center;
  line-height: 300rpx;
  background: #e0e0e0;
}
/* 导航 */

#nav {
  background: #fff;
  padding-top: 36rpx;
  width: 100%;
  border-bottom: 2rpx solid #f5f5f5;
}

#nav view {
  display: inline-block;
  font-size: 30rpx;
  font-weight: 500;
  margin: 0 8rpx 0 30rpx;
  color: #666a72;
  padding: 0 30rpx 12rpx;
}

#nav view.active {
  color: #000a2d;
  border-bottom: 8rpx solid #ffcf00;
  font-weight: bolder;
}

#main .column {
  width: 100%;
  height: 50rpx;
  left: 0;
  z-index: 100;
}

#main .column {
  top: 0;
}

.column.fixed {
  position: fixed;
  top: 0;
  left: 0;
}

#nav view.active {
  color: #000a2d;
  border-bottom: 8rpx solid #ffcf00;
  font-weight: bolder;
}
#content{
  height: 1700rpx;
  background: #EFEFEF;
  text-align: center;
  z-index: 7777;
}
.hasTop {
  margin-top: 86rpx;
}

js:

// pages/scrollToCeiling/scrollToCeiling.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isFixedTop: false, //是否固定顶部
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 粘性顶部  //获取节点距离顶部的距离
    let that = this,
    // 获取SelectorQuery 对象实例
      query = wx.createSelectorQuery();
    if (!that.data.navbarInitTop) {
      // 获取#nav的页面位置
      query.select('#nav').boundingClientRect(function (rect) {
        //rect.top 节点的上边界坐标
        if (rect && rect.top > 0) {
          var navbarInitTop = parseInt(rect.top);
          that.setData({
            navbarInitTop: navbarInitTop
          });
        }
      }).exec();
      //exec() 执行所有的请求。请求结果按请求次序构成数组,在 callback 的第一个参数中返回
    }
  },
  /**
   * 监听页面滑动事件
  */
  onPageScroll: function (e) {
    var that = this;
    var scrollTop = parseInt(e.scrollTop); //滚动条距离顶部高度
    //判断'滚动条'滚动的距离 和 '元素在初始时'距顶部的距离进行判断
    var isSatisfy = scrollTop >= that.data.navbarInitTop ? true : false;
    //为了防止不停的setData, 这儿做了一个等式判断。 只有处于吸顶的临界值才会不相等
    if (that.data.isFixedTop === isSatisfy) {
      return false;
    }
    that.setData({
      isFixedTop: isSatisfy
    });
    console.log(isSatisfy,scrollTop)
  },
})

要实现微信小程序菜单栏横向滑动,可以使用scroll-view组件。以下是实现步骤: 1. 在wxml文件中,使用scroll-view组件包裹菜单栏。设置scroll-x属性为true,表示横向滑动。 ``` <scroll-view class="menu" scroll-x="true"> <view class="menu-item">菜单项1</view> <view class="menu-item">菜单项2</view> <view class="menu-item">菜单项3</view> <view class="menu-item">菜单项4</view> <view class="menu-item">菜单项5</view> </scroll-view> ``` 2. 在wxss文件中,设置scroll-view和菜单项的样式。 ``` .menu { white-space: nowrap; /* 防止菜单项换行 */ overflow-x: auto; /* 横向滑动 */ -webkit-overflow-scrolling: touch; /* iOS平台优化 */ } .menu-item { display: inline-block; /* 菜单项横向排列 */ padding: 10rpx 20rpx; /* 菜单项样式 */ } ``` 3. 在js文件中,为菜单项添加点击事件。 ``` Page({ onTapMenuItem: function(event) { console.log(event.currentTarget.dataset.index); /* 获取菜单项索引 */ } }) ``` 4. 在wxml文件中,为菜单项绑定点击事件。 ``` <scroll-view class="menu" scroll-x="true"> <view class="menu-item" bindtap="onTapMenuItem" data-index="0">菜单项1</view> <view class="menu-item" bindtap="onTapMenuItem" data-index="1">菜单项2</view> <view class="menu-item" bindtap="onTapMenuItem" data-index="2">菜单项3</view> <view class="menu-item" bindtap="onTapMenuItem" data-index="3">菜单项4</view> <view class="menu-item" bindtap="onTapMenuItem" data-index="4">菜单项5</view> </scroll-view> ``` 这样就可以实现微信小程序菜单栏横向滑动了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值