HTML结构:

<template>
<div class="alphabet-container">
<h1>alphabet 组件</h1>
<div @touchmove.prevent="touchMove($event)" class="letter-index">
<p @click="getLetter(item)" :ref="'ref' + item" v-for="item in alphabet" :key="item">{{item}}</p>
</div>
<div v-show="letterTipFlag" class="letter-tip">{{letterTipText}}</div>
<ul class="alpha-index">
<li v-for="(item, index) in nameList" :key="index">
<div :id="item.alphabet">{{item.alphabet}}</div>
<ul class="sub-alpha">
<li v-for="(subItem, subIndex) in item.name" :key="subIndex">{{subItem}}</li>
</ul>
</li>
</ul>
</div>
</template>

JS:

export default {
name: "Alphabet",
data() {
return {
lastLetterDom: '',
timer: null,
letterTipText: '',
letterTipFlag: false,
alphabet: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"],
nameList: [
{
alphabet: 'A',
name: ['阿花', '阿明', '阿明', '阿明', '阿明']
},
{
alphabet: 'B',
name: ['白花', '百明', '白花', '百明', '白花', '百明', '白花', '百明', '白花', '百明']
},
     // ......... 数据
]
}
},
mounted() {
},
methods: {
getLetter(item) {
this.letterTipFlag = true
this.letterTipText = item
clearTimeout(this.timer)
this.timer = setTimeout(() => {
let lastDom = this.lastLetterDom
if(lastDom) {
this.$refs[lastDom][0].classList.remove('active')
}
let letterDom = this.$refs['ref' + item][0]
// console.log(letterDom)
this.lastLetterDom = 'ref' + item
letterDom.classList.add('active')
setTimeout(() => {
letterDom.classList.remove('active')
this.letterTipFlag = false
}, 300)
let id = '#' + item
const alphaDom = document.querySelector(id)
if(alphaDom) {
alphaDom.scrollIntoView(true)
}
}, 10)
},
touchMove(event) {
let x = event.changedTouches[0].clientX
let y = event.changedTouches[0].clientY
let xx = document.elementFromPoint(x,y)
if(xx.tagName.toLowerCase() === 'p') {
let item = xx.innerHTML
this.getLetter(item)
}
}
}
}

其他:为了减少篇幅,省略样式

github地址

Vue.js(20)之 封装字母表(是这个名字吗0.0)的更多相关文章

  1. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

  2. vue.js table组件封装

    table组件 和 分页组件来自iview,在这里我根据公司业务再次做了一次封装,使用slot进行内容分发,可以随意放置input输入框和button按钮 ,再使用props向子组件传递参数,使用em ...

  3. vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值

    axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...

  4. Vue的理解:Vue.js新手入门指南----转

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  5. Vue.js 入门指南

    1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...

  6. Vue.js新手入门指南

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  7. vue.js有什么用,是用来做什么的(整理)

    vue.js有什么用,是用来做什么的(整理) 一.总结 一句话总结:用数据绑定的思想,vue可以简单写单个页面,也可以写一个大的前端系统,也可以做手机app的界面. 1.Vue.js是什么? 渐进式框 ...

  8. Vue.js MVVM及数据绑定原理

    什么是数据驱动 数据驱动是vuejs最大的特点.在vuejs中,所谓的数据驱动就是当数据发生变化的时候,用户界面发生相应的变化,开发者不需要手动的去修改dom. 比如说我们点击一个button,需要元 ...

  9. Vue.js优雅的实现列表清单的操作

        一.Vue.js简要说明 Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当Vie ...

  10. Vue.js优雅的实现列表清单

        一.Vue.js简要说明 Vue.js (读音 /vjuː/) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时 ...

随机推荐

  1. 十三: 悲观锁&乐观锁:解决丢失更新问题

    悲观锁:认为丢失更新一定会出现,可以在查询的时候加入for update 认为丢失更新一定会出现,查询时: select * from account for update;for update :  ...

  2. C++ 动态多态

    背景 以前的学习,只是简单地知道:面向对象的三大特性(封装.继承.多态) ,在项目开发中,用到了多态而自己却不知道. 多态(Polymorphism)按字面的意思就是"多种状态". ...

  3. git使用问题一新建本地仓库添加远程合并推送

    1,git远程新建仓库demo 2,git本地初始化仓库demo 3,git本地添加远程仓库 git remote add <name> <url> 4,git把远程仓库pul ...

  4. vue 【 子子组件 => 子组件 => 父组件 】 的事件和参数的传递

    1,子子组件  TodoItem.vue     <template>   <div class="todo-item" :class="{'is-co ...

  5. Unable to execute dex:Multuple dex files define 解决方法

    困扰我两天的问题终于解决了,在网上查的方法无非有三种 一. Eclipse->Project->去掉Build Automatically->Clear ->Build Pro ...

  6. WAFの基本防护透明流模式v1.0

                      一.WAFの透明流模式     1)首先先配置WAF的网络,配置一个网桥接口,设置IP便于带内管理.             2)当然,如果需要不同网段之间都能够管 ...

  7. Oracle 建库

    Oracle得安装就不多说了 不过还是建议直接去官网下  其他渠道可能会导致安装问题  具体自己慢慢体会吧  !  下面主要说下怎么用Oracle建库并且建用户角色 Database configur ...

  8. 【剑指Offer】面试题32 - I. 从上到下打印二叉树

    题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...

  9. tornado peewee_async

    https://peewee-async.readthedocs.io/en/latest/peewee_async/examples.html https://www.cnblogs.com/Vic ...

  10. 印度第一颗CPU横空出世!阵势庞大

    我们忙着推进国产芯片的同时,隔壁的印度也没闲着.作为印度顶级高校的印度理工学院(IIT)之马德拉斯校区已经发布了其首颗处理器“Shakti”(代表女性力量的印度神话人物)的SDK软件开发包,并承诺会很 ...