微信小程序自定义多项内容的下拉选项框——2023.06.08

这篇具有很好参考价值的文章主要介绍了微信小程序自定义多项内容的下拉选项框——2023.06.08。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实现效果如图

微信小程序下拉多选框,微信小程序,微信小程序,小程序文章来源地址https://www.toymoban.com/news/detail-631909.html

2、WXML代码

<!--component/dropDownMenu/index.wxml-->
<view>
    <view class='search-area area-flex' wx:if="{{isShowInput}}">
        <view class="area-right">
            <view class="weui-search-bar-1">
                <view class="search-form">
                    <!--搜索框-->
                    <view class="weui-search-bar__box">
                        <icon class="searchIcon" type="search" size="18"></icon>
                        <input type="text" class="searchInput" placeholder="{{searchText}}"  value="{{inputVal}}"
                               focus="{{inputShowed}}" bindinput="inputTyping" bindconfirm="search" />
                        <view class="delsearchIcon" bindtap="clearInput" wx:if="{{inputVal.length > 0}}">
                            <icon type="clear" size="18"></icon>
                        </view>
                    </view>
                    <!--input搜索框结束-->
                    <label class="weui-search-bar__label" hidden="{{inputShowed}}" bindtap="showInput">
                        <icon class="weui-icon-search" type="search" size="18"></icon>
                        <view class="weui-search-bar__text">{{searchText}}</view>
                    </label>
                </view>
                <view class="weui-search-bar__cancel-btn" hidden="{{!inputShowed}}" bindtap="search">搜索</view>
            </view>
        </view>
    </view>
    <!-- 下拉菜单 -->
    <view class="menuC" wx:if="{{isShowMenu}}">
        <view class="flex">
            <view wx:for="{{arr}}" wx:key="key" data-id='{{item.id}}' bindtap='showKindsOf' class="title-wrap" style="width:{{item_Width}}">
                <view class="showFourSize">{{item.content?item.content:item.title}}</view>
                <image wx:if="{{isShowMask && item.id==tempid}}" src="../../static/images/upPath@2x.png" class="arrow_down"></image>
                <image wx:else src="../../static/images/Path@2x.png" class="arrow_down"></image>
            </view>
        </view>
        <!-- mask -->
        <view bindtap='closeKindOf' class="mask" wx:if="{{isShowMask}}" catchtouchmove='{{true}}'></view>
        <!-- select -->
        <view class="select" style="height:{{select_height}}" catchtouchmove='{{true}}'>
            <view bindtap='confirm' wx:for="{{select_content}}" wx:for-item="item1" wx:key="key1" data-fatherId='{{item1.fatherId}}'
            class="select-item" data-name='{{item1.name}}' data-id="{{item1.id}}">{{item1.name}}</view>
        </view>
    </view>
</view>

3、JS代码

Component({
  lifetimes: {
    attached: function() {
      this.setData({
        item_Width:100/this.data.arr.length + '%'
      },()=>{
        // console.log(this.data.item_Width)
      })
    }
  },
  /**
   * 组件的属性列表
   */
  properties: {
    //input数据
    inputShowed: { // 属性名
      type: Boolean,
      value: false
    },
    searchText: {
      type: String,
      value: ''
    },
    isShowInput: { //是否显示input
      type: Boolean,
      value: true
    },
    isShowMenu: { //是否显示下拉选项
      type: Boolean,
      value: true
    },
    arr:{
      type: Array,
      value: [],
    },
  },
  
  /**
   * 组件的初始数据
   */
  data: {
    item_Width: '',
    select_height: '0rpx',
    isShowMask: false,
    select_content: [],
  
    filterItem: {}, //请求条件 数据
    inputVal: "",
  },
  
  /**
   * 组件的方法列表
   */
  methods: {
    //显示搜索框
    showInput: function (e) {
      this.setData({
        inputShowed: true
      })
    },
    //获取输入的值
    inputTyping: function (e) {
      this.setData({
        inputVal: e.detail.value
      });
    },
    //取消
    clearInput: function () {
      this.setData({
        inputShowed: false,
        inputVal: ""
      });
      this.triggerEvent('cancelSearch', {})
    },
    //搜索
    search: function(){
      var filterItem = {};
      filterItem.Filter = this.data.inputVal;
      this.triggerEvent('getSearchResult', filterItem);
    },
    //选择具体事项
    confirm(options){
      let temparr = this.data.arr;
      let id = options.currentTarget.dataset.id;
      let fatherId = options.currentTarget.dataset.fatherid;
      let name = options.currentTarget.dataset.name;
      temparr.forEach((value, key)=>{
        if (key == fatherId){
          value.arr.forEach((v, k)=>{
            if(v.id == id){
              if(name == '全部'){
                value.content = '';
                value.value = '';
                return value;
              }
              value.content = name;
              value.value = id;
              return value;
            }else {
              return value;
            }
          });
        }
      });
      this.setData({
        arr: temparr,
        select_height: '0rpx',
        isShowMask: false
      },()=>{
        //调用外部方法
        var filterItem = {};
        temparr.forEach((value, key)=>{
          filterItem[value.code] = value.value;
        });
        filterItem.Filter = this.data.inputVal;
        this.setData({
          filterItem: filterItem
        });
        this.triggerEvent('getSearchResult', filterItem);
      })
    },
    //显示内容
    showKindsOf(options){
      let tempid = options.currentTarget.dataset.id;
      let temp = this.data.arr;
      let temparr = [];
      temp.forEach(value => {
        if(tempid == value.id){
          temparr = value.arr;
        }
      });
      this.closeKindOf(tempid);
      this.setData({
        select_content: temparr
      },()=>{
        // console.log(this.data.select_content);
      })
    },
    //隐藏内容
    closeKindOf(tempid){
      if(this.data.isShowMask){
        this.setData({
          select_height: '0rpx',
          isShowMask: false,
          tempid: tempid,
        })
      }else{
        this.setData({
          isShowMask: true,
          select_height: '300rpx',
          tempid: tempid,
        })
      }
    },
  }
});

4、WXSS代码

/* component/dropDownMenu/index.wxss */
@import "../../Iconfont.wxss";
.search-area {
    padding: 20rpx 20rpx 0 20rpx;
}
.arrow_down {
    height: 16rpx;
    width: 25rpx!important;
    margin-left: 10rpx!important;
    vertical-align: middle;
}

.area-flex {
    display: -webkit-box;
    display: -webkit-flex;
    display: flex;
}

.area-right {
    flex: 1;
}
.arrow_down {
    height: 16rpx;
    width: 25rpx;
    margin-left: 20rpx;
    vertical-align: middle;
}

.selected-item {
    width: 72rpx;
    display: inline-block;
    font-size: 36rpx;
    color: #fff;
    vertical-align: middle;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

/**搜索框***/
.weui-search-bar-1 {
    display: -webkit-box;
    display: -webkit-flex;
    display: flex;
    box-sizing: border-box;
}

.search-form {
    position: relative;
    -webkit-box-flex: 1;
    -webkit-flex: 1;
    flex: 1;
    border: 1px solid #ccc;
    border-radius: 5px;
    background-color: #dfdfdf;
    box-sizing: border-box;
}

.searchIcon {
    position: absolute;
    top: 24rpx;
    left: 12rpx;
}

.searchInput {
    height: 80rpx;
    padding: 0 10px;
    margin-left: 40rpx;
}

.delsearchIcon {
    position: absolute;
    top: 12rpx;
    right: 10px;
    z-index: 1111;
}

.weui-search-bar__cancel-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-left: 12rpx;
    color: #09bb07;
}
.weui-search-bar__label {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 2;
    text-align: center;
    color: #9b9b9b;
    line-height: 40px;
    border-radius: 5px;
    background-color: #dfdfdf;
}
.weui-icon-search {
    display: inline-block;
    vertical-align: middle;
    font-size: 18px;
    margin-top:12rpx;
    margin-right:20rpx;
}
.weui-search-bar__text {
    font-size: 18px;
    display: inline-block;
    vertical-align: middle;
}



/*下拉菜单开始*/
.menuC {
    position: relative;
    width: 100%;
}
.menuC .flex {
    width: 100%;
    display: flex;
    justify-content: space-around;
    align-items: center;
    font-size: 28rpx;
}
.menuC .title-wrap {
    flex-grow: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 20rpx 0;
    color: white;
}
.menuC .mask {
    width: 100%;
    height: 100vh;
    position: absolute;
    background-color: black;
    opacity: .3;
    z-index:99;
}
.menuC .select {
    width: 100%;
    /* height: 300rpx; */
    position: absolute;
    background-color: white;
    z-index: 100;
    border-top: 1rpx solid #E6E6E6;
    overflow: auto;
    transition: all .3s ease;
}
.menuC .select-item {
    font-size:30rpx;
    padding:12rpx 0 12rpx 30rpx;
    border-bottom: 1rpx solid #eeeeee;
}
.showFourSize{
    /*max-width: 100px;*/
    text-overflow:ellipsis;
    overflow:hidden;
    white-space:nowrap;
}

到了这里,关于微信小程序自定义多项内容的下拉选项框——2023.06.08的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android点选下拉列表框选项,获取选项内容

    的作者做的一个项目,通过app来监测设备是否在线状态,这时就需要实现分别查询“在线”、“离线”、“全部”三种选项的设备情况。也就是要能实现根据在线与否的状态来对设备进行筛选。 要对数据表中数据进行筛选,经常用到下拉列表框来设定选项,当点选不同选项时

    2023年04月08日
    浏览(28)
  • 微信小程序自定义弹窗阻止滑动冒泡catchtouchmove之后弹窗内部内容无法滑动

    如图所示: 自定义弹窗内部有带滚动条的盒子区域 在盒子上滑动,页面如果超出一屏的话,也会跟着一起上下滚动 解决方案:给自定义弹窗 添加 catchtouchmove 事件,阻止冒泡即可 网上不少人说什么 catchtouchmove=\\\"true\\\" 这样,可以没问题,其实 catchtouchmove=\\\"任何内容\\\" 都行,只要

    2024年02月06日
    浏览(33)
  • 微信小程序——自定义组件组件的创建和引用,修改组件的样式隔离选项,stylesolation的可选值,properties属性,data数据,methods方法,数据监听器,用法,监听对象属性的变化

    ①在项目的根目录中,鼠标右键,创建 components - test 文件夹 ②在新建的 components - test 文件夹上,鼠标右键,点击\\\"新建 Component \\\" ③键入组件的名称之后回车,会自动生成组件对应的4个文件,后缀名分别为 js , json ,. wxml 和. wxss 注意,为了保证目录结构的清晰,建议把不同的

    2024年02月15日
    浏览(46)
  • 【微信小程序插件】下拉刷新、下拉加载

    今天在优化小程序的列表时候,想要把原生的 scroll-view 组件替换成一个下拉刷新的组件,然后就找了一下,果然有大神已经封装好。coolui-scroller 就是这样满足需求的一款插件,但是微信官网给出的描述以及安装引入的方式,会造成依赖安装失败,报错: 构建npm提示错误,未

    2024年02月08日
    浏览(70)
  • 微信小程序选项卡页面切换

    选项卡效果切换如下:滑动即可对应切换 wxml代码  wxss代码: js代码:

    2024年02月16日
    浏览(39)
  • 微信小程序下拉选择

    微信小程序中下拉框选择一般的交互方式有以下两种 直接下拉选择 点击选择框后,弹出浮层进行选择 下边分别介绍两种方式的实现。在微信小程序中,这两种实现都需要修改三个文件 js 文件:下拉选择逻辑的具体实现 wxml 文件:下拉组件引入、定义 wxss 文件:下拉框样式设

    2024年02月16日
    浏览(34)
  • 微信小程序实现下拉刷新

    (1)把\\\"backgroundTextStyle\\\":“light\\\"改为\\\"backgroundTextStyle”:“dark” (2)添加\\\"enablePullDownRefresh\\\":true,开启下拉刷新。 1.在app.js中增加两个生命周期函数 1、首先在页面的json文件中添加设置:  “enablePullDownRefresh”: true  2、在js文件中写一个onRefresh()生命周期: 3、在onPullDownRefresh

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

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

    2024年02月16日
    浏览(39)
  • uniapp微信小程序 --下拉菜单

    就是原生写这个本来就是一件很简单的事情,但是uniapp里面不支持selct,他封装了东西应该是,插件市场试了好几个也不太行。最后还是找到一个博主的写的很好,记录一下。 这是封装好的需要什么样式自己调整 使用 博主地址附上https://www.cnblogs.com/OrochiZ-/p/15910440.html

    2024年03月26日
    浏览(31)
  • 【微信小程序】下拉刷新功能实现

    微信小程序开发系列 在开发微信小程序中经常会需要下拉页面进行更新要页面数据的功能,微信小程序提供了onPullDownRefresh函数。该函数作用是监听用户下拉动作。 监听用户下拉刷新事件。 需要在app.json的window选项中或页面配置中开启enablePullDownRefresh: 可以通过wx.startPullD

    2024年02月12日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包