Vue + better-scroll怎么实现移动端字母索引导航功能

  介绍

小编给大家分享一下Vue + better-scroll怎么实现移动端字母索引导航功能,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

Vue + better-scroll实现移动端歌手列表字母索引导航。算是一个学习笔记吧,写个笔记让自己了解的更加深入一点。

演示:列表视图,使用chrome手机模式查看。换成手机模式之后,不能滑动的话,刷新一下就好了。

效果图

 Vue + better-scroll怎么实现移动端字母索引导航功能”>,</p> <p> <强>配置环境</强> </p> <p>因为用到的是vue-cli和better-scroll,所以首先要安装vue-cli,然后再npm安装better-scroll。</p> <p>简单介绍一下better-scroll: </p> <blockquote> <p> better-scroll是一款重点解决移动端(已支持PC)各种滚动场景需求的插件。它的核心是借鉴的iscroll的实现,它的API设计基本兼容iscroll,在iscroll的基础上又扩展了一些特性以及做了一些性能优化。<br/> better-scroll是基于原生JS实现的,不依赖任何框架。它编译后的代码大小是63 kb,压缩后是35 kb, gzip后仅有9 kb,是一款非常轻量的JS自由。<br/> </p> </引用> <p>除了这两,还使用scss, vue-lazyload.scss预处理器,大家都懂,用别的也一样.lazyload实现懒加载,不用也可以,主要是优化一下体验。</p> <p>数据直接使用了网易云的歌手榜单,偷懒就直接放在数据里面了。</p> <p> CSS样式我就不贴了,直接看源码就可以了。</p> <p> <强>实现基本样式</强> </p> <p>直接使用v)和双侧嵌套实现歌手列表,以及右侧索引栏。</p> <p> HTML结构:</p> <pre类= & lt; ul>   ,& lt; li  v=癵roup  singers"拷贝,   类=發ist-group"大敌;   ,:关键=癵roup.id",   ,,ref=發istGroup"的在   & lt;才能h3 类=發ist-group-title"在{{,group.title }} & lt;/h3>   & lt;才能ul>   ,,& lt; li  v=癷tem  group.items"拷贝,   类,,=發ist-group-item",:关键=癷tem.id"比;   ,,,& lt; img  v-lazy=癷tem.avatar",类=癮vatar"比;   ,,,& lt; span 类=皀ame"在{{,item.name }} & lt;/span>   ,,& lt;/li>   & lt;才能/ul>   ,& lt;/li>   & lt;/ul>   & lt; div 类=發ist-shortcut"祝辞   ,& lt; ul>   & lt;才能li  v=?项目,,指数),拷贝shortcutList"   类才能=癷tem"   ,,:材料指数=癷ndex"   ,,:关键=癷tem.id"   祝辞才能;   ,,{{,item }}   & lt;才能/li>   ,& lt;/ul>   & lt;/div>

shortcutList是通过计算属性得到的,取标题的第一个字符即可。

shortcutList  (), {   ,return  this.singers.map((集团),=祝辞,{   return 才能group.title.substr (0, 1)   ,})   }

<强>使用better-scroll

使用better-scroll实现滚动。对了,使用的时候别忘了用进口引入。

created  (), {   ,//初始化,better-scroll 必须要等,dom 加载完毕   ,setTimeout((),=祝辞,{   this._initSrcoll才能()   ,},20)   },   方法:,{   ,_initSrcoll  (), {   console.log才能(& # 39;迪迪# 39;)   时间=this.scroll 才能;new  BScroll(这一点。refs.listView美元,,{//,,,获取,scroll 事件,用来监听。   ,,probeType: 3   })才能   ,}   }

使用创建方法进行better-scroll初始化,使用setTimeout是因为需要等到DOM加载完毕。不然better-scroll获取不到DOM就会初始化失败。

这里把方法写在两方法里面,这样就不会看起来很乱,直接调用就可以了。

初始化的时候传入两probeType: 3,解释一下:当probeType为3的时候,不仅在屏幕滑动的过程中,而且在动量滚动动画运行过程中实时派发滚动事件。如果没有设置该值,其默认值为0,即不派发滚动事件。

<强>给索引添加点击事件和移动事件实现跳转

首先需要给索引绑定一个touchstart事件(当在屏幕上按下手指时触发),直接使用v就可以了。然后还需要给索引添加一个材料指数这样就可以获取到索引的值,使用:材料指数=癷ndex".

& lt; div 类=發ist-shortcut"比;   ,& lt; ul>   & lt;才能li  v=?项目,,指数),拷贝shortcutList"   类才能=癷tem"   ,,:材料指数=癷ndex"   ,,:关键=癷tem.id"   @touchstart才能=皁nShortcutStart"   @touchmove.stop.prevent才能=皁nShortcutMove"   祝辞才能;   ,,{{,item }}   & lt;才能/li>   ,& lt;/ul>   & lt;/div>

绑定一个> created  (), {   ,//添加一个,touch 用于记录移动的属性=,this.touch , {}   ,//初始化,better-scroll 必须要等,dom 加载完毕   ,setTimeout((),=祝辞,{   this._initSrcoll才能()   ,},20)   },   方法:,{   ,_initSrcoll  (), {   时间=this.scroll 才能;new  BScroll(这一点。refs.listView美元,,{   ,,,probeType: 3,   ,,点击:真实   })才能   },   ,onShortcutStart  (e), {//,才能获取到绑定的,指数   let 才能;index =, e.target.getAttribute (& # 39; data-index& # 39;)//,才能使用,better-scroll 的,scrollToElement 方法实现跳转   this.scroll.scrollToElement才能(这一点。refs.listGroup美元(指数))//,才能记录一下点击时候的,Y坐标,和指数   let 才能;firstTouch =, e.touches [0] .pageY   this.touch.y1 才能=firstTouch   时间=this.touch.anchorIndex 才能;指数   },   ,onShortcutMove  (e), {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Vue + better-scroll怎么实现移动端字母索引导航功能