城市列表选择页面
前幾天謝了一個類似于通訊錄列表的城市列表選擇頁面,是運用vue 組件實現廢話不多說先上效果圖:
在這個頁面中實現了城市 頁面的布局,主要是實現了右邊從A-Z的列表,下面是實現的代碼
? ?2. 具體的實現方法如下:
? ? ? ?首先是具體的布局
<div class="wrapper"><ul class="content"><li>...</li><li>...</li>...</ul><!-- you can put some other DOMs here, it won't affect the scrolling --> </div>復制代碼? ? ? ?其次是具體的引用方式import BScroll from 'better-scroll' const wrapper = document.querySelector('.wrapper') const scroll = new BScroll(wrapper)復制代碼根據實際情況在項目中在mounted 這個鉤子函數中執行
mounted () { this.scroll =new BScroll (this.$refs.wrapper) },復制代碼其中wrpper 是自己要滑動的內容區域,因此這樣就可以實現頁面上下滑動了
最后還剩下兩個 功能就是? 點擊相應的字母頁面滑動到對應自己的字母上, 這就用到better-scroll的另一個功能了??this.scroll.scrollToElement(elment)?
scrollToElememt接受的是一個DOM元素,那我們又是如何獲得每個傳入的dom元素呢
首先我們可以給每一個A-Z設置一個點擊事件,然后通過watch 來觀察其變化, this.letter是電機的字母
watch:{ letter () { if(this.letter) { const elment=this.$refs[this.letter][0]; console.log(elment) this.scroll.scrollToElement(elment) } } }復制代碼然后通過
elment=this.$refs['Z'][0] 或者 elment=this.$refs['B'][0] 復制代碼來獲得我們要跳轉的某一個字母的城市區域, 這樣就可以點擊字母滑動到指定位置.
第二個功能就滑動A-Z到達指定位置
首先我的頁面結構如下
<template> <div id="app"> <ListWrap :hotCities="hotCities" :cities="cities" :letter="letter" /> <CityList :cities="cities" @change="changeCity"/> </div></template>復制代碼ListWrap 是城市列表組件, CityList 是右側A-Z組件
我計算的方式是? ?先要算出? A字符的距離頂部的offsetTop ,然后通過 e.touches[0].clientY來算出滑動截止手具體頂部的高度,然后雙方相減 就可得知 A字母到達最后滑動的字母的距離,然后除以每一個高度 向下取整,Math.floor()? 就可得知是是在A-Z字母數組中的下標,進而可得滑到那個字母的位置,下面是是代碼和效果圖
最后獲得字母之后根據scrollToElemem.來滑動到相應的城市.
謝謝大家深知自己能力一般,寫這些只為記錄自己遇到的問題,有時候可能表述不清楚自己的意圖,還請諒解,下面是自己寫的demo的網址請大家指教:
github.com/cuirongjin/…
總結
- 上一篇: 11. java 抽象类
- 下一篇: 测试书籍推荐(收集)