Vue实现类似通讯录功能(后续优化)

A字母的offsetTop问题

上篇,在handleTouchMove里做了一些业务逻辑操作。
当我们的手指在字母索引处上下滑动时,这个代码就会被执行。但是这里的性能是比较低的。
首先这个字母A的offsetTop值是固定的,而我们每次执行这个方法的时候,都去运算一次。等于重复运算了。

有点点不好

怎样解决呢?
先去data处定义一个startY,它的初始值是0,然后再写一个updated钩子,当页面的数据被更新,同时页面完成了自己的渲染之后,undated钩子就会被执行,它执行的时候做一件事。
updated钩子里的操作

那么handleTouchMove里有些操作得修改一下了
修改修改

为啥要updated?

当初次渲染字母索引组件时,实际上初始citiesCity这个父组件内可以看到是个空对象,也就是页面刚加载的时候,字母索引组件的内容都不会显示出来,当City父组件获取ajax数据后,cities的值才发生变化,字母索引组件才被渲染出来。当向字母索引组件传的值发生变化时,它就会重新渲染,此时它里面的updated钩子会被执行,此时页面上已经展示出了城市列表里的所有内容。
这个时候获取A这个字母所在的dom对应的offsetTop的值就没有问题。


做个函数节流

当鼠标在字母索引处来回移动的时候,touchMove执行的频率是非常高的,此时我们可以通过节流来限制一下函数执行的频率。
怎么做节流呢?
data处定义一个timer,默认值为null

修改成这样

解析一波:
执行touchMove时,如果已经存在了,清除掉this.timer
否则创造一个timer = 一个箭头函数,延迟16毫秒运行。
为啥要这样做?
如果已经正在做这样的事情,让它延迟16毫秒再去执行,如果在这16毫秒之间,又做了这个手指的滚动,那么将上一次要做的操作给清除掉,重新执行这次做的事情。
这样减少执行频率,从而提高网页性能。

更新自2019/03/29

放上地址,项目因为种种原因没有完成到最后,但是这个城市选择功能可以供大家参考~(*^▽^*)
戳我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不是很好描述这种功能,大概和通讯录一样,按名称分组,右侧有字母列表,可进行选择。 (贴图出来比较一目了然) 使用V...
    八宝君阅读 10,677评论 4 9
  • 本来想一篇文章写完,但是又截图又分析什么的,如果用一篇文章写,太长了,估计都没耐心看完,所以分成了几篇来写。这篇主...
    八宝君阅读 3,802评论 0 1
  • 字母索引滚动监听 修改字母索引组件,绑定三个touch事件,分别是touchStart、touchMove、tou...
    八宝君阅读 2,958评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • vue 新手环境搭建到新建项目 第一步:nodejs安装(根据自己的电脑CPU版本安装对应的nodejs。64位或...
    木子律阅读 174评论 1 1