vue 城市列表与字母表联动
实现两个联动
一是点击右侧字母的时候,城市列表出现相应首字母下的城市
二是鼠标在字母表上滑动的时候,城市列表实时跟着变化

一.点击字母出现相应的列表,给每个字母设置handleLetterClick事件
- <template>
- <div>
- <ul class="list">
- <li class="item"
- v-for="item of letters"
- :key="item"
- @click="handleLetterClick"
- @touchstart="handleTouchStart"
- @touchmove="handleTouchMove"
- @touchend="handleTouchEnd"
- :ref="item"
- >
- {{item}}
- </li>
- </ul>
- </div>
- </template>
获取当前点击的字母,传给父组件city,再由city组件传给城市列表list组件,再根据字母滚动到相应的内容
- <city-alphabet :cities="cities" @change="handleLetterChange"></city-alphabet>
- handleLetterChange(letter){
- this.letter=letter
- }
城市列表list组件获取到父组件传过来的letter,并监听letter的变化
- props:{
- hot:Array,
- cities:Object,
- letter:String
- },
- watch:{
- //监听letter,当letter发生变化时触发
- letter(){
- if(this.letter){
- const element=this.$refs[this.letter][0]
- this.scroll.scrollToElement(element)
- }
- }
- }
二.当鼠标滑动的时候,城市列表实时地发生变化
实现原理:其实和点击的时候一样,当鼠标滑动时,实时地获取滑动的时候所经过的字母,再把字母传给城市列表list组件,再跳转到相应的元素
((鼠标距顶部的距离一79)一A字母距父元素的距离)/每个字母的高度20 计算此时鼠标所在的第几个字母
- <template>
- <div>
- <ul class="list">
- <li class="item"
- v-for="item of letters"
- :key="item"
- @click="handleLetterClick"
- @touchstart="handleTouchStart"
- @touchmove="handleTouchMove"
- @touchend="handleTouchEnd"
- :ref="item"
- >
- {{item}}
- </li>
- </ul>
- </div>
- </template>
- <script>
- export default {
- name:"CityAlphabet",
- data (){
- return{
- touchStatus:false,
- startY:0,
- //函数截流,提高性能
- timer:null
- }
- },
- updated(){
- //A字母元素到父元素顶部的距离
- this.startY=this.$refs["A"][0].offsetTop
- },
- props:{
- cities:Object
- },
- computed: {
- letters () {
- const letters = []
- for (let i in this.cities) {
- letters.push(i)
- }
- return letters
- }
- },
- methods:{
- handleLetterClick(e){
- //把字母传给父亲,父亲再给List
- //e.target.innerText获取里边的内容
- this.$emit('change',e.target.innerText)
- },
- handleTouchStart(){
- this.touchStatus=true
- },
- handleTouchMove(e){
- if(this.touchStatus){
- if(this.timer){
- clearTimeout(this.timer)
- }
- this.timer=setTimeout(() => {
- //touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。
- //touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。
- //touchend事件:当手指从屏幕上离开的时候触发。
- //touches:表示当前跟踪的触摸操作的touch对象的数组。
- //clientY:触摸目标在视口中的y坐标。
- //79是绿色底部到顶部的距离
- const touchY=e.touches[0].clientY-79
- //每个字母的高度是20
- const index=Math.floor((touchY-this.startY) / 20)
- console.log(touchY)
- if(index >= 0&&index < this.letters.length){
- this.$emit('change',this.letters[index])
- }
- }, 16);
- }
- },
- handleTouchEnd(){
- this.touchStatus=false
- }
- }
- }
- </script>
vue 城市列表与字母表联动的更多相关文章
- Vue2.5开发去哪儿网App 城市列表开发之 兄弟组件间联动及列表性能优化
一, 兄弟组件间联动 1. 点击城市字母,左侧对应显示 给遍历的 字母 添加一个点击事件: Alphabet.vue @click="handleLetterClick" ha ...
- vue实现城市列表选择
成果展示 最后的成果就是下面所展示的内容,因为gif图没有做,只能截图所展示,接下来,会带着大家一步一步的完成下面功能,脚手架搭建和node安装在本次案例不会讲解,如果了解,可以在我的博客园找到有详细 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动
为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此对基于MVC的Web界面继续进行一些研究和优化,力求在功能和界面上保持和Winform一致,本文 ...
- vue-cli 3.0 实现A-Z字母滑动选择城市列表
项目地址: https://github.com/caochangkui/vue-cli3 项目代码: 城市列表首页: City.vue <template> <div id=&qu ...
- 用vue实现省市县三级联动
我真的没想到这个会困扰到我.最开始以为,不就是直接找个简单的插件就实现了吗,jquery插件找了几个,都没有达到目的. 需求是这样的: 点击input框,弹出一个popup,然后可以滚动选择省,市,县 ...
- vue移动端地址三级联动组件(一)
vue移动端地区三级联动 省,市,县.用的vue+mintUi 因为多级联动以及地区的规则比较多.正好有时间自己写了一个.有问题以及建议欢迎指出.涉及到dom移动,所以依赖vue+jquery.这边数 ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动
http://www.cnblogs.com/wuhuacong/p/3841338.html 为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此 ...
- Android例子源码非第三方实现根据字母排序的城市列表
values 下dimens.xml <resources> <!-- Default screen margins, per the Android Design guidelin ...
- 获取中央气象台API 完整城市列表简单方式
activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android& ...
随机推荐
- sublime text2 for mac 实现json格式化
问题描述: 网上拿下来的一大段json格式的字符串,放到sublime上格式化成json的标准格式 数据截图如下: 解决问题: 网络上搜了一下,大部分都是说要装pretty json插件 先来看看自己 ...
- Kudu 常见的几个应用场景
不多说,直接上干货! Kudu 常见的几个应用场景 实时更新的应用.刚刚到达的数据就马上要被终端用户使用访问到. 时间序列相关的应用,需要同时支持: 根据海量历史数据查询. 必须非常快地返回关于单个实 ...
- Java实现中文词频统计
昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧! 与英文单词的词频统计不同, 中文的难点在于如何分词, 不过好在有许多优秀的 ...
- SVN仓库连同版本信息迁移新服务器的步骤
SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bi ...
- msfconsole 控制台使用和操作
msfconsole 参数 Msfconsole提供了一个一体化的集中控制台.通过msfconsole,你可以访问和使用所有的metasploit的插件,payload,利用模块,post模块等等.M ...
- IT相关术语、缩略词
CLI Command Line Interface 命令行界面 GUI Graphical User Interface 图形用户界面 IP Internet Protocol 因特网协议 JDK ...
- jquery的on()方法总结
摘自菜鸟教程 废话不说 直接上demo 实例: 向<p>元素添加click事件处理程序: <html> <head> <script src="ht ...
- canvas制作运动的小球
<!DOCTYPE html> <head> <title>canvas</title> <style> .canvas{ border: ...
- iDempiere 使用指南 BOM及工单流程
Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...
- SQL获得连续的记录的统计
SELECT TYEAR, MIN(TDATE) AS STARTDATE, MAX(TDATE), COUNT(TYEAR) AS ENDNUM --TYEAR年,STARTDATE连续记录的开始时 ...