antd多选下拉框一行展示的实现方式


Posted in Javascript onOctober 31, 2020

我们都知道antd的select多选时,如果下拉框宽度不足,则自动浮动到下一行将下拉框撑大,但是这回影响到页面的整体布局。

我们期望的效果是,下拉框只显示一行的值,超出一行的部分自动隐藏。

下面有2种方案来实现这个效果。

1.利用浮动原理

设置下拉框的最大高度为一行的高度,然后超出的部分隐藏。

.ant-select-selection--multiple {
      max-height: 32px;
      overflow: hidden;
 }

这种方式存在的弊端是如果有2个选项,一个很短一个很长,那么只能看到很短的值,长值被隐藏,会剩余很大的空白。

antd多选下拉框一行展示的实现方式

2.flex布局

将下拉框选项放到一行显示,如果超出了下拉框长度则隐藏。默认的选项是采用float浮动显示的,所以我们要屏蔽掉浮动效果。

.ant-select-selection--multiple .ant-select-selection__rendered {
      overflow: hidden;
    }
    .ant-select-selection--multiple .ant-select-selection__rendered ul {
      display: flex;
      flex-wrap: nowrap;
      overflow: hidden;
      float: left;
    }
    .ant-select-selection--multiple .ant-select-selection__choice {
      float: none;
      overflow: visible;
    }
    .ant-select-selection--multiple .ant-select-search--inline {
      float: none;
      position: absolute;
    }
    .ant-select-selection--multiple {
      max-height: 32px;
      overflow: hidden;
    }

这里重写了下拉选项的样式,达到了目的,但是会存在另一个问题,因为下拉选项排成了不换行的一列,那么必须指定下拉框的长度为固定值,不能使用百分比,因为一旦选中的下拉值超出了屏幕宽度,那么他会自动撑大整个屏幕的宽度。

antd多选下拉框一行展示的实现方式

补充知识:antd design Menu菜单下拉回调以及下拉列表时只能显示一个列表,其余关闭

我做的是一个显示全国省市区的下拉列表:如下图

antd多选下拉框一行展示的实现方式

这个下拉列表是三层嵌套的下拉列表,统计列表不能同时打开,一次只能点开一个。点击下拉时触发函数获得下一层级的下拉数据。

代码如下:

render(){
let city=this.state.cityList.map(itemss=>(
       <SubMenu
         key={itemss.id}
         title={<span ><Icon type="team" /><span className="nav-text">{itemss.name}</span></span>}
         onTitleClick={this.getCountryList.bind(this,itemss.id,itemss.name)}
       >
         {
           this.state.countryList.map(citem=>(
            <Menu.Item key={citem.id}> <span onClick={this.checkedItem.bind(this,citem.id,citem.name)} >{citem.name}</span></Menu.Item>
           ))
         }
       </SubMenu>

     ));
    const { startValue, endValue, endOpen } = this.state;
    return(
      <div className="div-body">
        <div className="div-page">
          <div className="div_query ">
            <Layout>
                <div className="" />
              <Sider
                collapsed={this.state.collapsed}
                style={{backgroundColor:'#FFFFFF'}}
                className=""
                onCollapse={this.onCollapse}
                openKeys={this.state.openKeys}--->根据this.state.openKeys的值去对应SubMenu的key值 从而展开此列表。
              >
                 <Menu theme="" mode={this.state.mode}
                    defaultSelectedKeys={['6']}
                    openKeys={this.state.openKeys}
                 >
                  <SubMenu
                    key="全国"
                    title={<span><Icon type="user" /><span className="nav-text">全国</span></span>}
                    onTitleClick={this.getProvinceList}
                  >
                    {
                      this.state.provinceList.map((items,i)=>

                         <SubMenu
                          key={items.id}
                          title={<span ><Icon type="team" /><span className="nav-text">{items.name}</span></span>}
                          onTitleClick={this.getCity.bind(this,items.id,items.name,0)}--->onTitleClick---》点击触发回调函数
                         >
                           {city}
                        </SubMenu>
                      )
                    }
                  </SubMenu>
                </Menu>
              </Sider>
              )

   getProvinceList=()=>{
    const result=fetch('/web/chargeTrend/getChargePrinceList.htm'
      ,{method:'GET',
        credentials:'include',
      }).then((res)=>{
      return res.json();
    }).then((data)=>{
      //var ds=eval('('+data+')');
      console.log('ds',data);
      if(data.length>0)
      {
        if(this.state.openKeys[0]==="全国")
        {
          this.setState({
            provinceList: data,
            openKeys:[],
          },()=>{
            console.log('privince',this.state.provinceList);
          })
        }else{
          var arrs=["全国"];
          this.setState({
            provinceList: data,
            openKeys:arrs,
          },()=>{
            console.log('privince',this.state.provinceList);
          })
        }


      }
    });
  }
  getCity=(parentid,name)=>{
    var arr=this.state.openKeys;

    const result=fetch('/web/chargeTrend/getChargeCityList.htm?parentid='+parentid,
      {method:'GET',
        credentials:'include',
      }).then((res)=>{
      return res.json();
    }).then((data)=>{
      console.log('city',data);
      if(data.length>0)
      {
        if(parentid===this.state.openKeys[1])
        {
          var arrs=["全国"];
          this.setState({
            cityList:data,
            adCode:parentid,
            sRange:name,
            openKeys:arrs,
          },()=>{
            console.log('cityList',this.state.cityList);
            console.log('city1',this.state.openKeys);
          });
        }else{
          var arrs=["全国"];
          arrs.push(parentid);
          this.setState({
            cityList:data,
            adCode:parentid,
            sRange:name,
            openKeys:arrs,
          },()=>{
            console.log('cityList',this.state.cityList);
            console.log('city1',this.state.openKeys);
          });
        }

      }
    });
  }
  getCountryList=(parentid,name)=>{
    var arr=this.state.openKeys;
    const result=fetch('/web/chargeTrend/getCountyList.htm?parentid='+parentid,
      {method:'GET',
        credentials:'include',
      }).then((res)=>{
      return res.json();
    }).then((data)=>{
      console.log('country',data);
      if(data.length>0)
      {
        if(this.state.openKeys.length>=3)
        {
          if(parentid===this.state.openKeys[2])
          {
            var arrs=["全国"];
            arrs.push(arr[1]);
            this.setState({
              countryList:data,
              adCode:parentid,
              sRange:name,
              openKeys:arrs,
            },()=>{
              console.log('Country1',this.state.openKeys)
            });
          }else{
            var arrs=["全国"];
            arrs.push(arr[1]);
            arrs.push(parentid);
            this.setState({
              countryList:data,
              adCode:parentid,
              sRange:name,
              openKeys:arrs,
            },()=>{
              console.log('Country2',this.state.openKeys)
            });
          }
        }else{
          arr.push(parentid);
          this.setState({
            countryList:data,
            adCode:parentid,
            sRange:name,
            openKeys:arr,
          },()=>{
            console.log('Country3',this.state.openKeys)
          });
        }


      }
    });
  }
}

以上这篇antd多选下拉框一行展示的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery控制listbox中项的移动并排序
Nov 12 Javascript
jQuery中的常用事件总结
Dec 27 Javascript
jquery插件制作 手风琴Panel效果实现
Aug 17 Javascript
html页面显示年月日时分秒和星期几的两种方式
Aug 20 Javascript
PHP 数组current和next用法分享
Mar 05 Javascript
Sortable.js拖拽排序使用方法解析
Nov 04 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
微信小程序实战之自定义模态弹窗(8)
Apr 18 Javascript
jQuery异步提交表单实例
May 30 jQuery
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 #Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
Oct 30 #Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 #Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 #Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 #Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 #Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 #Javascript
You might like
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
python实现操作文件(文件夹)
2019/10/31 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
numpy 声明空数组详解
2019/12/05 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
网络方面基础面试题
2012/11/16 面试题
2015年银行个人工作总结
2015/05/14 职场文书
雨中的树观后感
2015/06/03 职场文书
2016新年致辞
2015/08/01 职场文书
教师师德承诺书2016
2016/03/25 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript