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

4 篇文章 0 订阅
2 篇文章 0 订阅

基于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;
  }
}
  • 14
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于Vue实现多条件筛选功能,可以通过以下步骤进行: 1. 数据渲染:首先,使用Vue框架将商品数据渲染到网页上,以展示商品信息。 2. 筛选条件定义:根据京东和等电商网站的筛选功能,我们可以通过定义多个筛选条件来满足用户的需求。例如,品牌、价格、颜色等。 3. 筛选条件组件化:将每个筛选条件封装成Vue组件,通过绑定数据和事件实现交互功能。例如,使用下拉菜单组件展示品牌选项,并绑定选中的品牌数据。 4. 筛选条件联动:根据用户选择的筛选条件,实现条件之间的联动效果。例如,如果用户选择了品牌A,则价格选项中只显示该品牌的价格范围。 5. 筛选功能实现:根据用户选择的筛选条件,通过过滤数据的方式实现商品的筛选功能。例如,使用Vue的计算属性或watch属性来监听筛选条件的变化,并根据变化动态过滤数据。 6. 筛选结果展示:将筛选后的商品数据重新渲染到网页上,实时展示给用户。可以使用Vue的v-for指令遍历筛选后的数据,将其展示为商品列表。 通过以上步骤,我们就可以基于Vue实现类似京东和的多条件筛选功能。用户可以根据自己的需求,选择不同的筛选条件,实时筛选出符合条件的商品,提高购物效率。同时,借助Vue的响应式特性,我们可以方便地实现筛选条件联动效果,提供更好的用户体验。 ### 回答2: 基于Vue实现多条件筛选功能,类似于京东和的功能,可以通过以下步骤来实现: 1. 创建一个Vue组件,用于显示多条件筛选的界面。可以使用Vue的组件化开发方式,将整个筛选功能划分为多个子组件,包括筛选项组件、筛选条件组件以及结果展示组件等。 2. 在筛选项组件中,使用Vue的数据绑定功能,将筛选项的内容与组件的数据进行绑定。可以使用Vue的v-for指令来遍历筛选项的列表,并使用v-model指令将选择结果与组件数据进行双向绑定,以便在用户选择筛选项时及时更新数据。 3. 在筛选条件组件中,监听筛选项组件的数据变化。当筛选项的选择结果发生变化时,通过Vue的事件机制,将新的筛选条件传递给结果展示组件。可以使用Vue的$emit方法触发自定义事件,并通过父组件接收事件并处理新的筛选条件。 4. 在结果展示组件中,根据接收到的筛选条件,使用Vue的计算属性或者watch属性来实时过滤数据,并在组件的模板中展示筛选后的结果。可以根据不同的筛选条件,使用条件语句进行数据过滤,或者使用Vue的filter过滤器来处理数据。 5. 最后,将多个组件组合在一起,构成一个完整的筛选功能界面。可以使用Vue的router来管理不同的筛选页面,并通过Vue的路由导航功能实现页面的切换和数据的传递。 通过以上步骤,我们可以基于Vue实现一个类似于京东和的多条件筛选功能。用户可以根据自己的需求选择不同的筛选项,实时查看筛选后的结果,提高筛选效率和准确性。 ### 回答3: 基于Vue实现的多条件筛选功能是一种常见的电商平台或商品列表页面所具备的功能。这种功能能够让用户根据自己的需求选择多个条件筛选商品,以便更快地找到自己想要的产品。 要实现这样的功能,首先需要在Vue中设置一个数据模型,用于存储用户选择的筛选条件以及根据条件过滤后的商品列表。可以使用一个数组来保存所有的商品数据,同时使用一个对象来存储当前用户选择的筛选条件。 接下来,需要在页面上展示可供用户选择的各个筛选条件。可以使用Vue的指令来生成相应的筛选项,并使用绑定指令将用户选择的条件存储到数据模型中。 为了实现多条件筛选功能,需要针对不同类型的筛选条件进行相应的处理。比如,对于品牌筛选,可以使用Vue的v-for指令生成各个品牌的复选框,并在用户选择时更新数据模型中的品牌条件。对于价格筛选,可以使用Vue的v-model指令绑定一个输入框,并在用户输入结束后更新数据模型中的价格条件。 最后,在数据模型中根据用户选择的筛选条件对所有商品进行过滤,生成符合条件的商品列表,并在页面上展示出来。 总的来说,基于Vue实现的多条件筛选功能需要设计一个数据模型来存储用户选择的筛选条件和过滤后的商品数据,同时根据不同的筛选条件使用Vue的指令和绑定来生成和更新页面上的筛选选项,最后根据用户选择的条件对商品数据进行过滤并展示出来。这样就可以实现一个类似京东和的多条件筛选功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值