vue 移动端列表筛选功能实现
最近兴趣所致,打算使用vant搭建一个webapp,由于需要使用列表筛选,没有找到合适组件,于是写了一个简单的功能,权当记录。
效果如下:


HTML:
- <div class="filterbar">
- <div class="filterbar-title">
- <ul class="title-ul">
- <li
- :class="{'title-li':true, 'current': item.isShow}"
- v-for="(item, index) in barMenus"
- :key="index"
- >
- <span @click="handerClickMenu(item)">
- {{item.name}}
- <van-icon :name="item.isShow ? 'arrow-up' :'arrow-down'" />
- </span>
- <div class="filterbar-content" v-on:click.stop v-if="item.isShow">
- <ul class="content-ul">
- <li
- v-for="(child, number) in item.data"
- :key="number"
- :class="{'current': child.selected}"
- @click="handerClickContent(item, child)"
- >
- {{child.name}}
- <van-icon v-if="child.selected" name="success" />
- </li>
- </ul>
- <div class="button-div" v-if="item.multiple">
- <van-button plain type="default" @click="handerClear(item)">清空</van-button>
- <van-button type="info" @click="search">确定</van-button>
- </div>
- </div>
- </li>
- </ul>
- </div>
- <div class="bg-filterbar" v-if="isBgFilterbarShow" @click="handerClickMenu"></div>
- </div>
CSS:
- .filterbar {
- position: fixed;
- z-index:;
- left:;
- top: 3.1em;
- width: 100%;
- background-color: #fff;
- height: 2em;
- .bg-filterbar {
- position: fixed;
- width: 100%;
- height: 100%;
- background-color: black;
- opacity: 0.2;
- z-index:;
- left:;
- top: 4.2em;
- }
- .filterbar-title {
- width: 100%;
- .title-ul {
- height: 1.4em;
- margin-bottom: 0.5em;
- border-bottom: 1px solid #eee;
- }
- ul .title-li {
- width: 24%;
- float: left;
- text-align: center;
- font-size: 0.9em;
- .filterbar-content {
- position: absolute;
- left:;
- width: 100%;
- padding: 0.5em;
- background-color: #fff;
- z-index:;
- top: 1.24em;
- }
- .content-ul li {
- text-align: left;
- color: #111;
- font-weight:;
- padding-left: 1.5em;
- padding-top: 0.7em;
- }
- .content-ul .current {
- color: #1989fa;
- }
- }
- ul .current {
- color: #1989fa;
- font-weight:;
- }
- ul:after {
- content: "";
- display: block;
- clear: both;
- }
- .content-ul .van-icon {
- float: right;
- margin-right: 2.5em;
- }
- ul .van-icon {
- vertical-align: middle;
- }
- }
- .button-div {
- margin-top: 1.5em;
- text-align: center;
- button {
- width: 48%;
- float: left;
- }
- .van-button {
- height: 3em;
- line-height: 3em;
- font-size: 1em;
- font-weight:;
- }
- }
- }
JS:
- <script>
- export default {
- data() {
- return {
- barMenus: [
- {
- name: "菜系",
- value: 1,
- isShow: false,
- multiple: true,
- data: [
- { name: "川菜", value: 1, selected: false },
- { name: "粤菜", value: 2, selected: false },
- { name: "湘菜", value: 3, selected: false },
- { name: "苏菜", value: 4, selected: false },
- { name: "闽菜", value: 5, selected: false },
- { name: "徽菜", value: 6, selected: false },
- { name: "浙菜", value: 7, selected: false },
- { name: "鲁菜", value: 8, selected: false }
- ]
- },
- {
- name: "口味",
- value: 2,
- isShow: false,
- multiple: true,
- data: [
- { name: "清淡", value: 1, selected: false },
- { name: "麻辣", value: 2, selected: false },
- { name: "养生", value: 3, selected: false }
- ]
- },
- {
- name: "适合人群",
- value: 3,
- isShow: false,
- multiple: true,
- data: [
- { name: "老人", value: 1, selected: false },
- { name: "婴儿", value: 2, selected: false },
- { name: "小孩", value: 2, selected: false },
- { name: "病人", value: 2, selected: false }
- ]
- },
- {
- name: "排序",
- value: 4,
- isShow: false,
- multiple: false,
- data: [
- { name: "做过最多", value: 1, selected: false },
- { name: "点赞最多", value: 2, selected: false }
- ]
- }
- ]
- };
- },
- computed: {
- isBgFilterbarShow: {
- get() {
- let isBgShow = false;
- this.barMenus.forEach(function(currentValue, index, arr) {
- if (currentValue.isShow) {
- isBgShow = true;
- }
- });
- return isBgShow;
- }
- }
- },
- methods: {
- search() {
- this.handerClose();
- },
- handerClose() {
- this.barMenus.forEach(function(currentValue, index, arr) {
- currentValue.isShow = false;
- });
- },
- handerClickMenu(item) {
- if (!item) {
- return;
- }
- this.barMenus.forEach(function(currentValue, index, arr) {
- if (currentValue.value == item.value) {
- currentValue.isShow = !currentValue.isShow;
- } else {
- currentValue.isShow = false;
- }
- });
- },
- handerClickContent(item, child) {
- if (!item.multiple) {
- this.handerClear(item);
- this.handerClose(item);
- }
- child.selected = !child.selected;
- },
- handerClear(item) {
- item.data.forEach(function(currentValue, index, arr) {
- currentValue.selected = false;
- });
- }
- }
- };
- </script>
参数说明:
vue 移动端列表筛选功能实现的更多相关文章
- PHP多条件分类列表筛选功能开发实例
PHP多条件分类列表筛选功能开发实例,前后台一起实现 后台对接可以拼接sql语句,PHP通过表单值隐藏值筛选,常用又实用! 表单筛选核心函数 function Filter(a, b) { var $ ...
- 14、Django实战第14天:列表筛选功能
今天完成的是点击这些条件进行机构的筛选 首先来完成城市:当用户点击城市的时候,我们自动给它加一个参数(city.id) 编辑organization.views.py 刷新页面,发现筛选功能已经OK了 ...
- vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...
- mxonline实战8,机构列表分页功能,以及按条件筛选功能
对应github地址:列表分页和按条件筛选 一. 列表分页 1. pip install django-pure-pagination 2. settings.py中 install ...
- VUE+Element 前端应用开发框架功能介绍
前面介绍了很多ABP系列的文章<ABP框架使用>,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机 ...
- Egg + Vue 服务端渲染工程化实现
在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: 在 Webpack工程化解决方案easywebpack 文章中我们提到了基于 Vue ...
- vue pc端网站项目开发坑点与难度记录
背景 在一pc端的web项目里,由于某些特性需要由动态语言处理,所以只在有需要使用vue来处理数据的页面,直接引入vue.js来处理.由于刚开始并没有打算使用前端来渲染数据和处理交互,所以使用了一些非 ...
- 【转】一张图解析FastAdmin中的表格列表的功能
一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...
- 织梦CMS实现多条件筛选功能
用织梦实现筛选的功能,其实主要就是运用到了织梦的高级搜索功能,然后用ajax去post替换掉本来的结果就可以了. 其实筛选的话,主要有两个问题需要解决,一个是前台的筛选实现,一个是后台根据前台的点击, ...
随机推荐
- sublime下载emmet
Emmet是一款Web前端开发工具Sublime非常有用的插件,使用仿CSS选择器的语法来生成代码,大大提高了HTML和CSS代码编写的速度.只需按住Tab键即可把一个简写展开成HTML和CSS的代码 ...
- Uboot命令U_BOOT_CMD分析
其中U_BOOT_CMD命令格式如下: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 各 ...
- js中(try catch) 对代码的性能影响
https://blog.csdn.net/shmnh/article/details/52445186 起因 要捕获 JavaScript 代码中的异常一般会采用 try catch,不过 try ...
- HashMap的几种遍历方式(转载)
今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中如果想让一个集合能够用for增强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable ...
- 04 全局配置,java 编意默认版本,1.6.修改配置
https://www.cnblogs.com/liu-s/p/5371289.html <!-- 修改Intellij Idea 创建maven项目默认Java编译版本 --> < ...
- redis学习 --List
1:添加 lpush rpush 如果没有key的话,会报错. lpushx rpushx 如果没有key的话,不做任何反应. 2:得到 lpop rpop ...
- Codeforces 830A. Office Keys (贪心二分 or DP)
原题链接:http://codeforces.com/contest/830/problem/A 题意:在一条数轴上分别有n个人和k把钥匙(n<=k),以及一个目的地,每个人要各自拿到一个钥匙后 ...
- 【Go】Go语言的%d,%p,%v等占位符的使用
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...
- Oracle dmp文件(表)导入与导出
dmp文件是作为oracle导入和导出表使用的文件格式dmp文件导出dmp文件导出用的比较多的一般是三种,他们分别是:1.导出整个数据库实例下的所有数据2.导出指定用户的所有表3.导出指定表. 打开命 ...
- 台哥原创:java 扫雷源码
扫雷,十年前大学时候开发的,界面参照的电脑自带扫雷游戏. 一直是我最喜欢的单机游戏,现在微软的新系统都不能玩了. 幸好还有自己开发的,可以过下瘾.程序员就有这点好处嘛. 这几年陆陆续续,把这个扫雷 ...