vue兄弟组件之间的联动,结合better-scroll实现动态效果
这篇文章主要实现如图的效果,点击右侧字母的时候,左侧自动滚动到相应字母区域的城市列表。
一、点击字母左侧滚动效果
1、为字母增加点击事件
Markup
@click="handleLetterClick"
2、增加handleLetterClick方法
JavaScript
methods: {
handleLetterClick (e) {
this.$emit('change', e.target.innerText) //e.target.innerText 得到的就是字母 A /B /C
},
}
该方法将change传递给父组件 City.vue,携带的参数为点击的字母名称
3、父组件接收change事件,并指向handleLetterChange方法
Markup
<city-alphabet :cities="cities" @change="handleLetterChange"></city-alphabet>
4、父组件City.vue定义data数据及handleLetterChange方法
JavaScript
data () {
return {
letter:''
}
},
methods:{
handleLetterChange (letter) {
this.letter = letter
}
}
5、父组件将letter值传递给list子组件
Markup
<city-list :cities="cities" :hot="hotCities" :letter="letter"></city-list>
6、list子组件接收传过来的letter
JavaScript
props:{
letter:String
}
7、为list子组件的城市区域加ref属性
Markup
<div class="area" v-for="(item, key) of cities" :key="key" :ref="key">
8、监听letter变化,调用better-scroll的scrollToElement方法实现滚动到对应区域
JavaScript
watch: {
letter () {
if (this.letter) {
const element = this.$refs[this.letter][0]
this.scroll.scrollToElement(element)
}
}
}
二、进阶:手指在字母上拖动时,左侧对应滚动效果
<< 上一篇
下一篇 >>