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

效果如下:

      

HTML:
  1. <div class="filterbar">
  2. <div class="filterbar-title">
  3. <ul class="title-ul">
  4. <li
  5. :class="{'title-li':true, 'current': item.isShow}"
  6. v-for="(item, index) in barMenus"
  7. :key="index"
  8. >
  9. <span @click="handerClickMenu(item)">
  10. {{item.name}}
  11. <van-icon :name="item.isShow ? 'arrow-up' :'arrow-down'" />
  12. </span>
  13. <div class="filterbar-content" v-on:click.stop v-if="item.isShow">
  14. <ul class="content-ul">
  15. <li
  16. v-for="(child, number) in item.data"
  17. :key="number"
  18. :class="{'current': child.selected}"
  19. @click="handerClickContent(item, child)"
  20. >
  21. {{child.name}}
  22. <van-icon v-if="child.selected" name="success" />
  23. </li>
  24. </ul>
  25. <div class="button-div" v-if="item.multiple">
  26. <van-button plain type="default" @click="handerClear(item)">清空</van-button>
  27. <van-button type="info" @click="search">确定</van-button>
  28. </div>
  29. </div>
  30. </li>
  31. </ul>
  32. </div>
  33. <div class="bg-filterbar" v-if="isBgFilterbarShow" @click="handerClickMenu"></div>
  34. </div>
CSS:
  1. .filterbar {
  2. position: fixed;
  3. z-index:;
  4. left:;
  5. top: 3.1em;
  6. width: 100%;
  7. background-color: #fff;
  8. height: 2em;
  9.  
  10. .bg-filterbar {
  11. position: fixed;
  12. width: 100%;
  13. height: 100%;
  14. background-color: black;
  15. opacity: 0.2;
  16. z-index:;
  17. left:;
  18. top: 4.2em;
  19. }
  20. .filterbar-title {
  21. width: 100%;
  22. .title-ul {
  23. height: 1.4em;
  24. margin-bottom: 0.5em;
  25. border-bottom: 1px solid #eee;
  26. }
  27. ul .title-li {
  28. width: 24%;
  29. float: left;
  30. text-align: center;
  31. font-size: 0.9em;
  32.  
  33. .filterbar-content {
  34. position: absolute;
  35. left:;
  36. width: 100%;
  37. padding: 0.5em;
  38. background-color: #fff;
  39. z-index:;
  40. top: 1.24em;
  41. }
  42. .content-ul li {
  43. text-align: left;
  44. color: #111;
  45. font-weight:;
  46. padding-left: 1.5em;
  47. padding-top: 0.7em;
  48. }
  49. .content-ul .current {
  50. color: #1989fa;
  51. }
  52. }
  53. ul .current {
  54. color: #1989fa;
  55. font-weight:;
  56. }
  57. ul:after {
  58. content: "";
  59. display: block;
  60. clear: both;
  61. }
  62. .content-ul .van-icon {
  63. float: right;
  64. margin-right: 2.5em;
  65. }
  66. ul .van-icon {
  67. vertical-align: middle;
  68. }
  69. }
  70. .button-div {
  71. margin-top: 1.5em;
  72. text-align: center;
  73.  
  74. button {
  75. width: 48%;
  76. float: left;
  77. }
  78. .van-button {
  79. height: 3em;
  80. line-height: 3em;
  81. font-size: 1em;
  82. font-weight:;
  83. }
  84. }
  85. }
JS:
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. barMenus: [
  6. {
  7. name: "菜系",
  8. value: 1,
  9. isShow: false,
  10. multiple: true,
  11. data: [
  12. { name: "川菜", value: 1, selected: false },
  13. { name: "粤菜", value: 2, selected: false },
  14. { name: "湘菜", value: 3, selected: false },
  15. { name: "苏菜", value: 4, selected: false },
  16. { name: "闽菜", value: 5, selected: false },
  17. { name: "徽菜", value: 6, selected: false },
  18. { name: "浙菜", value: 7, selected: false },
  19. { name: "鲁菜", value: 8, selected: false }
  20. ]
  21. },
  22. {
  23. name: "口味",
  24. value: 2,
  25. isShow: false,
  26. multiple: true,
  27. data: [
  28. { name: "清淡", value: 1, selected: false },
  29. { name: "麻辣", value: 2, selected: false },
  30. { name: "养生", value: 3, selected: false }
  31. ]
  32. },
  33. {
  34. name: "适合人群",
  35. value: 3,
  36. isShow: false,
  37. multiple: true,
  38. data: [
  39. { name: "老人", value: 1, selected: false },
  40. { name: "婴儿", value: 2, selected: false },
  41. { name: "小孩", value: 2, selected: false },
  42. { name: "病人", value: 2, selected: false }
  43. ]
  44. },
  45. {
  46. name: "排序",
  47. value: 4,
  48. isShow: false,
  49. multiple: false,
  50. data: [
  51. { name: "做过最多", value: 1, selected: false },
  52. { name: "点赞最多", value: 2, selected: false }
  53. ]
  54. }
  55. ]
  56. };
  57. },
  58.  
  59. computed: {
  60. isBgFilterbarShow: {
  61. get() {
  62. let isBgShow = false;
  63. this.barMenus.forEach(function(currentValue, index, arr) {
  64. if (currentValue.isShow) {
  65. isBgShow = true;
  66. }
  67. });
  68. return isBgShow;
  69. }
  70. }
  71. },
  72.  
  73. methods: {
  74. search() {
  75. this.handerClose();
  76. },
  77.  
  78. handerClose() {
  79. this.barMenus.forEach(function(currentValue, index, arr) {
  80. currentValue.isShow = false;
  81. });
  82. },
  83.  
  84. handerClickMenu(item) {
  85. if (!item) {
  86. return;
  87. }
  88.  
  89. this.barMenus.forEach(function(currentValue, index, arr) {
  90. if (currentValue.value == item.value) {
  91. currentValue.isShow = !currentValue.isShow;
  92. } else {
  93. currentValue.isShow = false;
  94. }
  95. });
  96. },
  97.  
  98. handerClickContent(item, child) {
  99. if (!item.multiple) {
  100. this.handerClear(item);
  101. this.handerClose(item);
  102. }
  103.  
  104. child.selected = !child.selected;
  105. },
  106.  
  107. handerClear(item) {
  108. item.data.forEach(function(currentValue, index, arr) {
  109. currentValue.selected = false;
  110. });
  111. }
  112. }
  113. };
  114. </script>

参数说明:

name:筛选项显示名称
value:筛选项code
isShow:是否显示
multiple: 是否多选,为true时会有清空和确定功能按钮
data: 筛选列表项

vue 移动端列表筛选功能实现的更多相关文章

  1. PHP多条件分类列表筛选功能开发实例

    PHP多条件分类列表筛选功能开发实例,前后台一起实现 后台对接可以拼接sql语句,PHP通过表单值隐藏值筛选,常用又实用! 表单筛选核心函数 function Filter(a, b) { var $ ...

  2. 14、Django实战第14天:列表筛选功能

    今天完成的是点击这些条件进行机构的筛选 首先来完成城市:当用户点击城市的时候,我们自动给它加一个参数(city.id) 编辑organization.views.py 刷新页面,发现筛选功能已经OK了 ...

  3. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

    vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

  4. mxonline实战8,机构列表分页功能,以及按条件筛选功能

    对应github地址:列表分页和按条件筛选     一. 列表分页   1. pip install django-pure-pagination   2. settings.py中 install ...

  5. VUE+Element 前端应用开发框架功能介绍

    前面介绍了很多ABP系列的文章<ABP框架使用>,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机 ...

  6. Egg + Vue 服务端渲染工程化实现

    在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: 在 Webpack工程化解决方案easywebpack 文章中我们提到了基于 Vue ...

  7. vue pc端网站项目开发坑点与难度记录

    背景 在一pc端的web项目里,由于某些特性需要由动态语言处理,所以只在有需要使用vue来处理数据的页面,直接引入vue.js来处理.由于刚开始并没有打算使用前端来渲染数据和处理交互,所以使用了一些非 ...

  8. 【转】一张图解析FastAdmin中的表格列表的功能

     一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...

  9. 织梦CMS实现多条件筛选功能

    用织梦实现筛选的功能,其实主要就是运用到了织梦的高级搜索功能,然后用ajax去post替换掉本来的结果就可以了. 其实筛选的话,主要有两个问题需要解决,一个是前台的筛选实现,一个是后台根据前台的点击, ...

随机推荐

  1. sublime下载emmet

    Emmet是一款Web前端开发工具Sublime非常有用的插件,使用仿CSS选择器的语法来生成代码,大大提高了HTML和CSS代码编写的速度.只需按住Tab键即可把一个简写展开成HTML和CSS的代码 ...

  2. Uboot命令U_BOOT_CMD分析

    其中U_BOOT_CMD命令格式如下: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 各 ...

  3. js中(try catch) 对代码的性能影响

    https://blog.csdn.net/shmnh/article/details/52445186 起因 要捕获 JavaScript 代码中的异常一般会采用 try catch,不过 try ...

  4. HashMap的几种遍历方式(转载)

    今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中如果想让一个集合能够用for增强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable ...

  5. 04 全局配置,java 编意默认版本,1.6.修改配置

    https://www.cnblogs.com/liu-s/p/5371289.html <!-- 修改Intellij Idea 创建maven项目默认Java编译版本 --> < ...

  6. redis学习 --List

    1:添加   lpush    rpush     如果没有key的话,会报错.   lpushx    rpushx    如果没有key的话,不做任何反应. 2:得到 lpop   rpop   ...

  7. Codeforces 830A. Office Keys (贪心二分 or DP)

    原题链接:http://codeforces.com/contest/830/problem/A 题意:在一条数轴上分别有n个人和k把钥匙(n<=k),以及一个目的地,每个人要各自拿到一个钥匙后 ...

  8. 【Go】Go语言的%d,%p,%v等占位符的使用

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...

  9. Oracle dmp文件(表)导入与导出

    dmp文件是作为oracle导入和导出表使用的文件格式dmp文件导出dmp文件导出用的比较多的一般是三种,他们分别是:1.导出整个数据库实例下的所有数据2.导出指定用户的所有表3.导出指定表. 打开命 ...

  10. 台哥原创:java 扫雷源码

    扫雷,十年前大学时候开发的,界面参照的电脑自带扫雷游戏. 一直是我最喜欢的单机游戏,现在微软的新系统都不能玩了. 幸好还有自己开发的,可以过下瘾.程序员就有这点好处嘛. ​ 这几年陆陆续续,把这个扫雷 ...