微信小程序页面-筛选栏固定定位,以及使用Vant中TreeSelect控件遇到的问题

这篇具有很好参考价值的文章主要介绍了微信小程序页面-筛选栏固定定位,以及使用Vant中TreeSelect控件遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序筛选组件,微信小程序,微信小程序,前端

 布局思路:

        1、顶部是状态栏,接着筛选栏。

        2、点击【选择年份】和【选择月份】,会从底部弹出picker;点击【筛选】,则会出现遮罩层,并显示侧边导航(会议类型筛选项),和按钮。

       3、 因筛选项也要固定定位,接在状态栏下面,因此可以用一个div将筛选栏div和状态栏div一起包裹起来。

        4、侧边导航是点击【筛选】后展示的,而且是出现在遮罩层中,因此可以将遮罩层的div与顶部栏同级,侧边导航写在遮罩层里

 <!-- 包裹 状态栏和筛选栏 -->
  <view class="zindex_9999">
    <!-- 状态栏 -->
    <view class="tab_box">
      <view class="tab {{currentTab=='0'? 'active' : ''}}" id="0" bindtap="tab">
        <view>正在进行</view>
      </view>
      <view class="tab {{currentTab=='1'? 'active' : ''}}" id='1' bindtap="tab">
        <view>待开始</view>
      </view>
      <view class="tab {{currentTab=='2'? 'active' : ''}}" id="2" bindtap="tab">
        <view>已结束</view>
      </view>

    </view>

    <!-- 筛选栏 -->
    <view class="filterBox" wx:if="{{showFilter}}">
      <view class="filter">
        <picker class="filterText" bindchange="selectDataTime" value="{{yearIndex}}" id="year" range="{{yearList}}">
          <view class="date"> {{chooseYear||'选择年份'}}</view>
        </picker>
      </view>
      <view class="filter">
        <picker class="filterText" id="month" value="{{monthIndex}}" range="{{monthList}}" bindchange="selectDataTime">
          <view class="date">{{chooseMonth || '选择月份'}}</view>
        </picker>
      </view>
      <view class="filter {{choosefilter=='filter_type'?'active':''}}" id="filter_type" bindtap="choosefilter">
        <view class="filterText ">筛选</view>
        <image class="filterIcon" src="../../../images/filter.png"></image>
      </view>
    </view>
  </view>

 相关样式

.zindex_9999{
  z-index: 9999;
  position: fixed;
}

// 状态栏样式
.tab_box {
  left: 0;
  top: 0;
  right: 0;
  height: 88rpx;
  background: #fff;
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  align-items: center;
}

.tab {
  height: 88rpx;
  border-bottom: 1rpx solid #F2F5FA;
  line-height: 88rpx;
  flex: 33%;
  text-align: center;
}

// 筛选栏
.filterBox {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  width: 750rpx;
  padding: 14rpx 30rpx;
  box-sizing: border-box;
  overflow-y: auto;
  background: #FFFFFF;
  z-index: 99999;

    .filter {
      height: 60rpx;
      padding: 10rpx 0rpx;
      box-sizing: border-box;
      display: flex;
      flex-direction: row;
      /* 子元素横向排列 */
      justify-content: center;
      /* 相对父元素水平居中 */
      font-size: 28rpx;
      font-family: PingFangSC-Medium, PingFang SC;
      font-weight: 500;
      color: #999999;
      margin-right: 16rpx;
      margin-left: 15rpx;

        .filterText {
            max-width: 200rpx;
            height: 40rpx;
            text-align: center;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
        }
        .filterText.checked {
          color: #0C9DF2;
        }
        .filterIcon {
              width: 20rpx;
              height: 20rpx;
              margin-top: 10rpx;
              margin-left: 8rpx;
        }
    }
   &.active {
      color: #0580B4;
     
    }
}

// 遮罩层内容div
.wrapper {
  display: flex;
  flex-direction: column;
  height: 100%;
  margin-top: 280rpx;
}

// 改变组件的原本样式--遮罩层
.tree_select .van-tree-select{
  margin-top: -114rpx;
  height:682rpx;
}

.tree_select  .van-tree-select__item {
  position: relative;
  padding: 0 6rpx 0 var(--padding-md,0px);
  font-weight: var(--van-font-weight-bold);
  line-height:var(--tree-select-item-height, 88rpx);
  user-select: none;
  cursor: pointer;
  width: 200rpx;
  display: inline-block;
  margin: 10rpx 0 0 26rpx;
  border-radius: 10px;
  height: 88rpx;
  box-shadow: 0px 0 2rpx 0 rgb(156 175 201);
  background: #f7f7f7;
  box-sizing: border-box;
  text-align: center;
}

.tree_select .van-tree-select__selected{
  right: var(--padding-md, -30rpx); 
  position: absolute;
  top: 50%;
  transform: translateY(-50%)
}

.tree_select .van-tree-select__item--active {
  color: var(--tree-select-item-active-color, #19A2F3);
  background-color:var(--tree-select-nav-background-color, #eaf4fe);
}

// 底部按钮
filterBtns{
  height: 128rpx;
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  padding: 20rpx 20px 0 20rpx;
  margin-top: 28rpx;
  z-index: 99;
  background-color: #FFFFFF;
}

.filterBtns .btn{
  width: 332rpx;
  height: 86rpx;
  line-height: 86rpx;
  text-align: center;
  border-radius: 24px;
  background: #F7F7F7;
  font-size: 32rpx;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: #333333;
}

.filterBtns .end{
  background: linear-gradient(321deg, #0C9DF2 0%, #38AFF5 100%);
  color:#fff;
}

 筛选功能用到的是vant组件库的treeSelect组件,支持多选模式。然而在使用的时候,虽然是支持多选,但是在选中会议类型下的某个元素,比如id为3(id是后台返回,每组一级类型下的数据都不一样,但是id会一样,且不是唯一的),选择了这个元素后,【作物】和【产品】类型的二级元素下,包含id为3的元素也同样被选中了;在【作物】或【产品】取消选中id为3的元素后,【会议类型】下原本被选中的元素,也被取消了。这就会导致,如果在切换左侧一级类型的时候,如果要进行重置(清空)操作,那么在进行选择完后,用户即使不继续做任何选择,就只是来回切换选项,数据全部会被清空。

因此为了让每个type下,用户的操作不被覆盖,可以在最开始分别请求3个接口的时候,存储数据的时候,给每个id加一个标识。

// 获取会议类型
  async getMeetTypes() {
    let result = await getMeetTypes();
    if ((result.code = 200001)) {
      let data = result.data.map((item) => {
        return {
          id: 'type_'+item.id,   // 给各一级数据里的id加上标识,以免选择互相影响
          text: item.name,
        };
      });
      this.setData({
        "alltype[0].children": data,
        max: result.data.length,
      });
    }
  },

这样子,用户在【会议类型】下选择的元素,在【作物】和【产品】里,同样的id也不会同时被选中。

 文章来源地址https://www.toymoban.com/news/detail-545416.html

到了这里,关于微信小程序页面-筛选栏固定定位,以及使用Vant中TreeSelect控件遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序路由以及跳转页面传递参数

    路由 在app.json的pages里面写 \\\"pages/页面/页面\\\" 直接保存pages直接生成非常方便  跳转页面 wx.navigateTo() 保留当前页面,跳转到应用内的某个非tabBar页面。 text bindtap=\\\"daka\\\"点击/text 会保留返回箭头 底部导航跳转在app.json写入即可 传参以及接收参数 1、本地存储 使用方法:和js差不

    2024年02月11日
    浏览(41)
  • uni-app微信小程序结合腾讯地图获取定位导航以及城市选择器

    目录 第一步:登录小程序公众平台==设置==第三方设置  第二步:登录腾讯地图申请属于自己小程序的key  第三步:找到腾讯地图的插件​​​​​​​  第四步:添加插件与允许授权  第五步:使用    腾讯地图后台:https://lbs.qq.com/dev/console/application/mine    添加key,授权使

    2023年04月12日
    浏览(57)
  • 微信小程序隐私协议自定义页面(弹窗)开发流程以及低版本兼容

    这里我选择的是全局监听,进入小程序就会监控用户有没有同意,没有则进行弹窗,不同意则关闭,这个逻辑可以根据自己需要随便修改。 发现有很多人根据自己调试基础库来排查自己涉不涉及,你的小程序是否涉及隐私协议整改,还是看有没有调用涉及隐私接口,如果有,

    2024年01月16日
    浏览(43)
  • 微信小程序自定义底部菜单设计,固定在底部,并非使用tabBar设计

    1.微信小程序自定义底部菜单设计,并且固定在底部,并非tabBar设计 场景:比如加载详情页时:底部需要加入购物车、收藏、返回主页等设计 效果图: 点击事件发生 xx.wxml 样式设计xx.wxss js设计xx.js

    2024年02月16日
    浏览(36)
  • 微信小程序使用高德地图获取当前定位

    1.在腾讯地图官网注册一个key(创建一个应用会自动生成一个key,详细步骤如图) 腾讯位置服务 - 立足生态,连接未来 注意点:开通webserviceAPI服务:控制台 -应用管理 - 我的应用 -添加key- 勾选WebServiceAPI - 保存 (小程序SDK需要用到webserviceAPI的部分服务,所以使用该功能的KEY需

    2024年02月06日
    浏览(37)
  • 微信小程序的跨页面传参以及data-方法的相关细节

    🙂博主:小猫娃来啦 🙂文章核心: 微信小程序的跨页面传参以及data-方法的相关细节 其实在学习新东西的过程中,最快速的方式就是多看官方文档。 很多技术层面的东西,官方文档其实讲的很清楚了。 vue这个渐进式框架在很久以前,是没有多少官方文档供人学习的,但现

    2024年02月11日
    浏览(45)
  • 微信小程序实现下拉筛选

    不多说直接上代码 1、WXML代码: 2、 WXSS代码: 3、JS代码:

    2024年02月16日
    浏览(39)
  • 微信小程序实现筛选的功能

    在页面加载的时候,显示最原始的数据,当我们点击按钮的时候,触发筛选的功能,只显示符合条件的数据,再次点击的时候取消筛选的功能,显示原本的数据 在数据的显示过程中,可以设置一个临时的数组,在筛选的时候将临时数组清空,取消筛选的时候再将数值重新赋值

    2024年02月14日
    浏览(31)
  • 使用百度地图坐标在微信小程序中定位显示

    一.需求描述:设备在上线时需要在上线点记录所在地点的坐标和位置描述信息 分别需要实现三个功能 1. 根据坐标点显示位置信息 , 图1 中的红色坐标点跳转到 图2 时,在腾讯地图上标出所在坐标点,并显示地点信息; 2. 定位当前所在位置 :点击蓝色图标,会定位当前所在位

    2024年02月09日
    浏览(53)
  • 在微信小程序使用fixed布局固定input 输入框,iPhone ios系统无法获取焦点问题解决。

    问题 微信小程序 是fixed布局后 ios版本 input 输入框 无法选中 但是长按可以获取焦点 。 解决 查看微信小程序开发文档 对input的介绍 https://developers.weixin.qq.com/miniprogram/dev/component/input.html 发现了 always-embed 属性 强制 input 处于同层状态,默认 focus 时 input 会切到非同层状态 (仅在

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包