微信小程序 导航tab切换,跟随滚动置顶

<view class="small_nav {{tabFixed?‘small_navFix‘:‘‘}}" id="tab-con">
    <scroll-view scroll-x="true" scroll-left="{{scrollLeft}}">
      <view class="small_nav_scroll">
        <view class="{{id==‘‘?‘cur‘:‘ ‘}}"   data-id=""  bindtap="switchNav">全部</view>
        <view class="{{id==item.categoryId?‘cur‘:‘ ‘}}"  wx:for="{{typeList}}" wx:key="index" data-id="{{item.categoryId}}" data-index="{{index}}" bindtap="switchNav">{{item.categoryName}}</view>
      </view>
    </scroll-view>
</view>
<view style="height:3000rpx;">
  这是内容
</view>
.small_nav{width:100%; background: #fff; font-size: 26rpx;margin-bottom:20rpx;}
.small_nav_scroll{ display: flex; height:80rpx;line-height:80rpx; flex-direction: column; flex-wrap: wrap;  }
.small_nav_scroll>view{  padding:0 5rpx; margin:0 25rpx;text-align: center; position:relative;}
.small_nav_scroll>view.cur{ color:#000;}
.small_nav_scroll>view.cur:after{content: " ";position: absolute;left:0; bottom:0; width:100%;height:5rpx; background: #36ccf9}
.small_navFix{width:100%;height:auto; position: fixed;top:0; left:0; z-index: 20}
// pages/test/test.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    scrollLeft: 0,
    id: "",
    typeList: [
      {
        categoryId: 1,
        categoryName: "分类1"
      },
      {
        categoryId: 2,
        categoryName: "分类2"
      },
      {
        categoryId: 3,
        categoryName: "分类3"
      },
      {
        categoryId: 4,
        categoryName: "分类4"
      },
      {
        categoryId: 5,
        categoryName: "分类5"
      },
      {
        categoryId: 6,
        categoryName: "分类6"
      },
      {
        categoryId: 7,
        categoryName: "分类7"
      },
      {
        categoryId: 8,
        categoryName: "分类8"
      },
      {
        categoryId: 9,
        categoryName: "分类9"
      }
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    var that = this;
    var query = wx.createSelectorQuery()
    query.select(‘#tab-con‘).boundingClientRect(function (res) {
      that.setData({
        tabScrollTop: res.top + 100   //根据实际需求加减值
      })
    }).exec()
  },
  onPageScroll: function (e) { // 获取滚动条当前位置
    if (e.scrollTop > this.data.tabScrollTop) {
      this.setData({
        tabFixed: true
      })
    } else {
      this.setData({
        tabFixed: false
      })
    }
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  //切换产品类别
  switchNav: function (e) {
    const { offsetLeft } = e.currentTarget;
    const { id, index } = e.currentTarget.dataset;
    var clientX = e.detail.x;
    if (this.data.id == e.currentTarget.dataset.id) {
      return false;
    }
    if (clientX < 60) {
      this.setData({
        scrollLeft: offsetLeft - 60
      });
    } else if (clientX > 330) {
      this.setData({
        scrollLeft: offsetLeft
      });
    }
    this.setData({
      id: id
    });
  },
})

原文地址:https://www.cnblogs.com/xiao-ling-zi/p/9512031.html

时间: 2024-10-08 01:22:19

微信小程序 导航tab切换,跟随滚动置顶的相关文章

微信小程序开发--路由切换,页面重定向

这段时间开发了一个微信小程序,虽然小程序的导航API 官方文档写得很详细,但是在具体开发过程中还是会遇到很多不明白,或者一时转不过弯的地方. 1.页面切换传参,参数读取 1.1  wx.navigateTo(Object) 功能:保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面.使用 wx.navigateBack 可以返回到当前页面. wx.navigateTo({ //当前页面对应的JS文件内 控制模板 url: 'test?id=1' //需要切换到的页面路劲,此处为

微信小程序导航:官方工具+精品教程+DEMO集合+最新资讯

10月15日更新: 官方手册在线版及本地版 W3C微信小程序使用手册:http://www.w3cschool.cn/weixinapp/wgt21q8k.html微信小程序官方开发文档chm版下载 :http://wxapp.dreawer.com/forum.php?mod=viewthread&tid=44微信小程序开发帮助手册:http://wxapp.dreawer.com/forum.php?mod=viewthread&tid=45 10月14日更新: 免费视频集合: 微信小

微信小程序左右滑动切换图片酷炫效果(附效果)

开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. 1 <scroll-view class="scroll-view_H" scroll-x scroll-with-animation style="width: 100%;height:{{windowHeight}}px" bindscroll="getSe

小程序之Tab切换(二)

之前写的那个Tab切换是常规逻辑写的,接下来我会列出小程序api自带的写法,当然了 这个写法更加简单,实用.我们只需要配置app.json这个文件即可. 先看效果图: app.json代码:(有木有感觉很简单的样子哈哈) "tabBar": { "color":"#fff", "selectedColor":"#1296db", "backgroundColor":"#ccc&

小程序之 tab切换(选项卡)

好久没有写东西了   今天写一个简单的东西 小程序tab切换 (选项卡功能) .wxml <view class="swiper-tab"> <view class="swiper-tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="clickTab">111</view> <view class=&quo

小程序之Tab切换

小程序越来越火了,作为一名,额  有理想的攻城狮,当然要紧跟互联网时代的步伐啦,于是我赶紧抽时间学习了一下小程序的开发,顺便把经验分享给大家. 对于申请账号以及安装开发工具等,大家可以看官网:https://mp.weixin.qq.com/debug/wxadoc/dev/. ●先上成果 .wxml代码: <view class='container'> <!-- 底部导航 --> <view class='bottom-nav'> <view class='t

微信小程序配置tab栏

"tabBar": { "color":"#333", // 文字颜色 "selectedColor": "#666", // tab被选中后的颜色 "backgroundColor":"#fff", // tab背景颜色 "position":"bottom", // tab的位置 "list": [ {

微信小程序——点击切换样式scroll-view

scroll-view滚动视图点击切换样式 *.wxml <view class="content"> <view class="navbg"> <view class="nav"> <scroll-view class="scroll-view_H" scroll-x="true"> <view class="scroll-view_H&qu

微信小程序之 catalog 切换

组件名称:catalog 组件属性:catalogData,type:String 组件描述:这是一个子组件,数据从父组件中传递 效果图: catalog 目录为多个,使用 scroll-view 容器.但是在当前组件中,只写每个 catalog 数据展示并实现 catalog 切换效果,这样会保证当前组件的最小粒度. 分析当前组件可能用到的属性为:组件名称,切换状态,未选中状态,切换点击方法. <block wx:for="{{catalogData}}" wx:key=&qu