|
|
|
@ -1,20 +1,77 @@
@@ -1,20 +1,77 @@
|
|
|
|
|
<template> |
|
|
|
|
<ul class="list"> |
|
|
|
|
<li class="item" v-for="(item, key) of cities" :key="key">{{ key }}</li> |
|
|
|
|
<li |
|
|
|
|
class="item" |
|
|
|
|
v-for="item of letters" |
|
|
|
|
:key="item" |
|
|
|
|
:ref="item" |
|
|
|
|
@touchstart="handleTouchStart" |
|
|
|
|
@touchmove="handleTouchMove" |
|
|
|
|
@touchend="handleTouchEnd" |
|
|
|
|
@click="handleLetterClick" |
|
|
|
|
> |
|
|
|
|
{{ item }} |
|
|
|
|
</li> |
|
|
|
|
</ul> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
export default { |
|
|
|
|
name: "CityAlphabet", |
|
|
|
|
props: { |
|
|
|
|
cities: Object |
|
|
|
|
}, |
|
|
|
|
name: "CityAlphabet" |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
touchStatus: false, |
|
|
|
|
startY: 0, |
|
|
|
|
timer: null |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
updata: function() { |
|
|
|
|
this.startY = this.$refs["A"][0].offsetTop; |
|
|
|
|
}, |
|
|
|
|
computed: { |
|
|
|
|
letters: function() { |
|
|
|
|
const letters = []; |
|
|
|
|
for (let i in this.cities) { |
|
|
|
|
letters.push(i); |
|
|
|
|
} |
|
|
|
|
return letters; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
handleLetterClick: function(e) { |
|
|
|
|
this.$emit("Change", e.target.innerText); |
|
|
|
|
}, |
|
|
|
|
handleTouchStart: function() { |
|
|
|
|
this.touchStatus = true; |
|
|
|
|
}, |
|
|
|
|
handleTouchMove: function(e) { |
|
|
|
|
if (this.touchStatus) { |
|
|
|
|
if (this.timer) { |
|
|
|
|
clearTimeout(this.timer); |
|
|
|
|
} |
|
|
|
|
this.timer = setTimeout(() => { |
|
|
|
|
const touchY = e.touches[0].clientY - 79; |
|
|
|
|
const index = Math.floor((touchY - this.startY) / 20); |
|
|
|
|
if (index >= 0 && index < this.letters.length){ |
|
|
|
|
this.$emit("Change", this.letters[index]); |
|
|
|
|
} |
|
|
|
|
}, 16); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
handleTouchEnd: function() { |
|
|
|
|
this.touchStatus = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
<style lang="stylus" scoped> |
|
|
|
|
@import '~styles/variable.styl' |
|
|
|
|
* |
|
|
|
|
touch-action: pan-y |
|
|
|
|
.list |
|
|
|
|
display flex |
|
|
|
|
flex-direction column |
|
|
|
|