基于vue实现的多条件联动筛选功能(类似中国移动商城),选中,反选,删除功能。
UI库用的ivew

先来张实现的效果图

展开时候的效果

收起时候的效果

代码如下:

1. html(用了iview的UI库)

 <div class="filter-more"><transition name="selectbox"><div class="box" v-show="boxshow"><Row v-for="(item,index) in filterBox" :key="index"><i-col span="2">{{item.name}}</i-col><i-col span="22"><a href="#"v-for="(v,i) in item.items":key="i"@click="clickrange(index,v,i)"class="text-filter"  ><span :class="{ isActive:v.active}">{{v.text}}</span></a></i-col></Row></div></transition><div><a href="#" v-for="(item,index) in selectBox" class="text-select" :key="index">{{item.text}}<i @click="removeCurrentSelect(index)">&times;</i></a></div><p class="text-toggle" @click="togglebox">{{btnTxt ?'收起选项':'更多选项'}}</p></div>

2.初始化数据

data() {return {boxshow: false,btnTxt: false,selectBox: [],filterBox: [{name: '搜索范围:',items: [{ value: '1', text: '全部', active: false },{ value: '2', text: '诊断信息', active: false },{ value: '3', text: '手术信息', active: false },{ value: '4', text: '医嘱处方', active: false },{ value: '5', text: '检验报告', active: false },{ value: '6', text: '检查报告', active: false },{ value: '7', text: '病历文书', active: false }]},{name: '患者年龄:',items: [{ value: 'allAge', text: '全部', active: false },{ value: 'treeY', text: '0~3岁', active: false },{ value: 'fourteenY', text: '4~14岁', active: false },{ value: 'fortyY', text: '15~40岁', active: false },{ value: 'sixtyY', text: '41~65岁', active: false },{ value: 'enghtyY', text: '65~85岁', active: false },{ value: 'ninetyY', text: '85岁以上', active: false }]},{name: '患者性别:',items: [{ value: 'allSex', text: '全部', active: false },{ value: 'man', text: '男', active: false },{ value: 'women', text: '女', active: false },{ value: 'unknow', text: '未知', active: false }]},{name: '就诊类别:',items: [{ value: '1', text: '全部', active: false },{ value: '2', text: '门诊', active: false },{ value: '3', text: '急诊', active: false },{ value: '4', text: '住院', active: false }]},{name: '就诊时间:',items: [{ value: '1', text: '全部', active: false },{ value: '2', text: '2009年', active: false },{ value: '3', text: '2018年', active: false },{ value: '4', text: '2017年', active: false },{ value: '5', text: '2016年', active: false },{ value: '6', text: '2015年', active: false },{ value: '7', text: '2014年', active: false },{ value: '8', text: '更多', active: false }]},{name: '手术病人:',items: [{ value: '1', text: '全部', active: false },{ value: '2', text: '手术病人', active: false },{ value: '3', text: '非手术病人', active: false }]}]};},

JS逻辑代码

methods: {togglebox: function() {this.boxshow = !this.boxshow;this.btnTxt = !this.btnTxt;},clickrange(parentIndex, el, childIndex) {var item = this.filterBox[parentIndex].items;item.filter((v, i) => {if (i === childIndex) {v.active = !v.active; // 选中和反选this.selectBox.unshift(v); // 选中的数组} else {v.active = false; // 取消选中this.selectBox.filter((childEl, childI) => {if (childEl.active === false) {this.selectBox.splice(childI, 1); // 反选删除数组中的当前个}});}});},removeCurrentSelect(index) {this.filterBox.filter((el, i) => {el.items.filter((data, childIndex) => {if (data.text == this.selectBox[index].text) {data.active = false;}});});this.selectBox.splice(index, 1);},},

4.css代码

.filter-more {width: 90%;margin: 0 auto;border: 1px solid #e8f4fd;padding: 25px 15px;
}
.box {height: 150px;overflow: hidden;
}
.text-toggle {text-align: center;cursor: pointer;
}
.selectbox-leave-active,
.selectbox-enter-active {transition: all 1s ease;
}
.selectbox-leave-active,
.selectbox-enter {height: 0px !important;
}
.selectbox-leave,
.selectbox-enter-active {height: 150px;
}
.text-filter {display: inline-block;color: #404040;width: 80px;span {display: inline-block;text-align: center;width: 60px;&:hover {border-radius: 40px;color: #ffffff;animation: myfirst 1s;-moz-animation: myfirst 1s; /* Firefox */-webkit-animation: myfirst 1s; /* Safari and Chrome */-o-animation: myfirst 1s; /* Opera */animation-fill-mode: forwards;}}
}
.text-select {display: inline-block;padding: 0px 5px;border: 1px solid #268edb;border-radius: 40px;color: #268edb;font-size: 14px;margin-right: 20px;i {display: inline-block;height: 100%;font-size: 15px;padding: 0px 5px;}
}
.isActive {background-color: #2989dd;border-radius: 40px;color: #ffffff;
}
@keyframes myfirst {from {background: #ffffff;}to {background: #2989dd;}
}

基于vue开发的多条件联动筛选特效(类似京东/淘宝/中国移动)相关推荐

  1. TP5简单实现类似京东淘宝多级商品筛选功能。

    前几天做项目时,碰到个需求,商品多级分类筛选功能.之前从没做过,查了不少资料,总算实现了.虽然实现的不够优雅,但起码能有效果,心里还是很高兴的.菜鸟有一颗成为大神的心.在这里分享给各位童鞋,欢迎大佬指 ...

  2. 基于Vue实现的多条件筛选功能(类似京东和淘宝功能)

    基于Vue实现的多条件筛选功能(类似京东和淘宝功能),可以支持多选.清空.全选功能,数据源是通过JSon格式的数据封装而成. 实现的效果图: 代码实现如下: html: <div id='app ...

  3. value数字 vue_基于Vue开发数字输入框组件

    随着 vue 越来越火热, 相关组件库也非常多啦, 只用轮子怎么够, 还是要造起来!!! 1.概述 vue组件开发的api:props.events和slots 2.组件代码 效果: (1)index ...

  4. 基于Vue开发的电商APP项目——蘑菇街app

    基于Vue开发的电商APP项目--蘑菇街 项目源码:https://github.com/Limna777/Shopmall.git 1.项目描述 2.使用的插件或第三方库 3.页面主要实现的功能 1 ...

  5. 基于vue实现精妙绝伦的三级联动

    基于vue实现精妙绝伦的三级联动 ps:笔者为初学者,自己想的不容易,别喷我 <template><view class="index"><!-- 三 ...

  6. 2021年基于VUE开发的一套移动端APP小说 听书AI男女多种 支持云端存储书籍记录

    2021年基于VUE开发的一套移动端APP小说 前端架构主要采用: "axios": "^0.21.1", "better-scroll": ...

  7. vue 音乐盒app_VBox 一款基于vue开发的音乐盒 序章

    自己基于vue写了一个 Mplayer, 只有简单的搜索播放随心听功能,样式适配上也很差, 路由就两个,数据都走vuex,数据转发是用nodejs自己转发,而且只是PC能比较好的展现,之后不了了之,偶 ...

  8. 基于Vue开发一个日历组件

    最近在做一个类似课程表的需求,需要自制一个日历来支持功能及展现,就顺便研究一下应该怎么开发日历组件. 更新 2.23修复了2026年2月份会渲染多一行的bug,谢谢@深蓝一人童鞋提出的bug,解决方案 ...

  9. 移动Web体验月报(6月):MIP 核心代码升级,增加基于 Vue 开发能力

    原创: BrilliantOpenWeb OpenWeb开发者 7月6日 作者 | Brilliant Open Web 团队 编辑 | Daisy 升级与重要进展 历时2个月,MIP团队完成了核心代 ...

最新文章

  1. 程序员应该知道的二十三种设计模式
  2. sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上)
  3. struct and union
  4. 30分钟掌握 C#6
  5. avue下拉框中属性可以显示,但不能选中
  6. 游标sql server_SQL Server游标属性
  7. 新增的表单元素 结构伪类选择器
  8. 用R语言实现密度聚类dbscan
  9. “属你最牛” | 树莓派百变打印机
  10. 从tushare pro获取上证指数内成分股权重排序分出等级
  11. python打开qq并登录_python爬虫入门之qq登陆初探
  12. 【3】Kali破解家用WI-FI密码 - 建立伪装热点
  13. 装了linux的u盘格式化,u盘格式化容量变小了u盘安装linuxcentos
  14. 中图分类法----Q 生物科学
  15. unity-光照烘焙GI简单应用
  16. PCA为什么要进行中心化
  17. 线上应用故障排查之一:高CPU占用
  18. 【小程序迁移】微信小程序迁移到支付宝记坑
  19. 基于百度地图sdk的地图app开发(七)——导航和模拟导航
  20. 货币兑换java程序,货币兑换API Java GUI

热门文章

  1. ERROR 1366 (HY000): Incorrect string value: '\xE8\xB5\xB5\xE9\x9B\xB7' for column 'Sname' at row 1
  2. Pycharm中的红色小闪电含义
  3. 虚拟机包OVF和OVA的区别
  4. 期货基本面分析:乙二醇期货库存减少,甲醇期货企业库存升至年内最高水平
  5. linux磁盘空间df-h出不出来,linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件...
  6. LCD12864 菜单部分编写
  7. 关于学习的几个经典定律
  8. 30岁自学python找工作-自学编程的30岁男人,能按应届生那样找工作吗?
  9. 低功耗蓝牙芯片CH579系列开发记录
  10. Linux云服务器基础学习