美文网首页
VUE开发一个组件——Vue H5城市选择控件

VUE开发一个组件——Vue H5城市选择控件

作者: web秀 | 来源:发表于2018-11-28 16:47 被阅读0次

前言

昨天用《VUE开发一个组件——Vue PC城市选择控件》 , 有朋友说需要用字母筛选,其实已经用字母筛选了,不过是每4个,没有对单个,所以H5我们就用单个字母快速查找。

选择VUE开发一个组件——Vue H5城市选择控件

数据部分

《VUE开发一个组件——Vue PC城市选择控件》 一样,但是不需要每4个再分组了。

cityListData(){
  let map = {};
  let temps = [];
  this.dataList.map(item=>{
      if(item.airportCode){
          let ekey = item.airportCode.charAt(0).toUpperCase();
          temps = map[ekey] || [];
          temps.push({
              airportCode: item.airportCode,
              airportName: item.cityName
          });
          map[ekey] = temps;
      }
  })
  let list = [];
  for(let gkey in map) {
      list.push({
          ckey: gkey,
          cityList: map[gkey]
      })
  }
  list = list.sort((li1, li2)=> li1.ckey.charCodeAt(0) - li2.ckey.charCodeAt(0));
  return list;
},
cityListKey(){
  let cityListKey = [];
  this.cityListData.map(item=>{
      cityListKey.push(item.ckey);
  })
  return cityListKey;
}

cityListData整理后的数据,cityListKey是所有字母。

页面部分

<div id="app">
    <div class="city city-wap">
      <div class="search">
        <input type="text" placeholder="搜索条件">
      </div>
      <div class="city-list">
        <div class="block-60"></div>
        <div v-for="item in cityListData" class="clearfix">
          <p :id="item.ckey">{{item.ckey}}</p>
          <ul>
            <li v-for="ritem in item.cityList">{{ritem.airportName}}</li>
          </ul>
        </div>
      </div>
      <div class="filter">
        <div v-for="item in cityListKey" @click="switchKey(item)">{{item}}</div>
      </div>
      <div class="active-key" v-if="activeKey">{{activeKey}}</div>
    </div>
</div>

search没有开发(用关键字搜索)、city-list遍历cityListDatafilter筛选字母列表、active-key提示当前选择是那个字母。

.city-wap{
  color: #3b4f62;
  .clearfix{
    &:after{
      content: '';
      display: block;
      clear: both;
    }
  }
  p{
    background: #fff;
    margin-bottom: 10px;
    padding: 0 12px;
  }
  .search{
    position: fixed;
    top: 0;
    box-shadow: 0 1px 3px 0 rgba(59,79,98,0.1);
    width: 100%;
    height: 50px;
    input{
      line-height: 50px;
      width: 100%;
      border: none;
      box-shadow: none;
      padding: 0 10px;
      &:focus { 
        outline: none; 
      } 
    }
  }
  .city-list{
    .block-60{
      height: 60px;
    }
    ul{
      padding: 0 10px;
      li{
        list-style: none;
        display: inline-block;
        margin-right: 10px;
        width: 29%;
        margin-bottom: 8px;
        line-height: 35px;
        text-align: center;
        color: #333;
        border-radius: 3px;
        background: #fff;
        font-size: 14px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        padding: 0 2px;
      }
    }
  }
  .filter{
    position: fixed;
    right: 3px;
    top: 60px;
    font-size: 15px;
    div{
      margin-top: 2px;
      text-align: center;
    }
  }
  .active-key{
    position: fixed;
    width: 100px;
    height: 100px;
    line-height: 100px;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 100;
    background: #dedede;
    color: #fff;
    border-radius: 100%;
    text-align: center;
    font-size: 40px;
  }
}

这里的.block-60主要是用来占位,不然城市会被上方的搜索框盖住。

事件

switchKey(key){
  // 当前选中的字母
  this.activeKey = key;
  // 1秒后清空,让`active-key`隐藏
  setTimeout(()=>{
    this.activeKey = '';
  }, 1000)
  // 获取当前字母来cityList中距离顶部的位置
  let targetTop = document.querySelector('#'+key+'').offsetTop;
  window.scrollTo({ 
      top: targetTop - 60, // 60是search的高度
      behavior: "smooth" 
  });
}

这样就完工,是不是很简单了?

源码地址:vue-c-city

如果要PC<=>H5互换,需要修改main.js里面的代码。

相关文章

  • VUE开发一个组件——Vue H5城市选择控件

    前言 昨天用《VUE开发一个组件——Vue PC城市选择控件》 , 有朋友说需要用字母筛选,其实已经用字母筛选了,...

  • Vue磨刀嚯嚯

    Vue开发风格——传统方法应用vue.js Vue开发风格——单个组件式 组件 基本操作 创建一个组件构造器 注册...

  • 15.实战 7:树形控件——Tree

    实战 7:树形控件——Tree 本小节基于 Vue.js 的递归组件知识,来开发一个常见的树形控件—Tree。 T...

  • Vue基础使用

    简介 创建vue实例模板语法计算属性指令事件处理器表单控件生命周期 Vue实例 Vue组件介绍 组件系统是将一个大...

  • VUE开发一个组件——Vue PC城市选择

    前言 前面用vue开发了三四个组件了,都是H5的,现在来看看PC是如何玩转组件的?其实和H5相同,样式不同而已。 ...

  • 说说 Vue.js 组件

    使用 Vue.js 组件,可以提高控件及其 JS 能力的可复用性。 1 定义第一个组件 Vue.js 组件需要注册...

  • 如何开发vue、react、angular的组件库教程

    关键词:vue,react,angular,开发,封装,ui组件,组件库,常用组件 目标:开发相应的组件库vue-...

  • 0.Vue知识学习整理-1_2020-03-17

    一.Vue开发知识体系: 二.Vue知识整理:4.组件通信 Vue.component('组件name',{......

  • vue系列组件篇(二)

    概述 vue组件是vue常用的功能,vue也因为强大的组件功能得到很多开发者的青睐。一个好的组件,可以提供给开发者...

  • vue(2)

    Vue组件化开发 组件化开发的思想 组件的注册 组件间的数据交互 组件插槽的用法 Vue调试工具的用法 组件开发思...

网友评论

      本文标题:VUE开发一个组件——Vue H5城市选择控件

      本文链接:https://www.haomeiwen.com/subject/nrrzqqtx.html