vue和better-scroll实现列表左右联动效果详解
一.实现思路
- (1)实现上是左右分别一个better-scroll列表
 - (2)利用计算右侧列表每一个大区块的高度来计算左侧的位置
 
二.实现
1.实现左右两个better-scroll
(1)dom结构(better-scroll要求,会把最外层dom的第一个子元素作为要滚动的区域)
左边滚动列表dom
0"class="icon" :class="classMap[item.type]">{{item.name}} 
一.实现思路
二.实现
1.实现左右两个better-scroll
(1)dom结构(better-scroll要求,会把最外层dom的第一个子元素作为要滚动的区域)
左边滚动列表dom
0"class="icon" :class="classMap[item.type]">{{item.name}} 
在数据请求完成后的$nextTick中初始化better-scroll,就能实现两个列表分别能滚动,至于联动,要后面自己做
_initScroll(){
this.menuScroll=newBScroll(this.$els.menuWrapper,{
click:true//允许better-scroll列表上的点击事件
});
this.foodsScroll=newBScroll(this.$els.foodWrapper,{
probeType:3//让better-scroll监听scroll事件
});
this.foodsScroll.on('scroll',(pos)=>{
this.scrollY=Math.abs(Math.round(pos.y));
})
},
2.实现联动效果
(1)具体的联动实现思路
//初始化better-scroll
_initScroll(){
this.menuScroll=newBScroll(this.$els.menuWrapper,{
click:true
});
this.foodsScroll=newBScroll(this.$els.foodWrapper,{
probeType:3
});
this.foodsScroll.on('scroll',(pos)=>{
this.scrollY=Math.abs(Math.round(pos.y));
})
},
_calculateHeight(){
letfoodList=this.$els.foodWrapper.getElementsByClassName("food-list-hook");
letheight=0;
this.listHeight.push(height);
for(leti=0;i
computed:{
currentIndex(){
for(leti=0;i=height1&&this.scrollY
0"class="icon"
:class="classMap[item.type]">{{item.name}}
   
 
//被点击事件
//dom
0"class="icon"
:class="classMap[item.type]">{{item.name}}
   
//js
selectMenu(index,event){
if(!event._constructed){
return;
}
letfoodList=this.$els.foodWrapper.getElementsByClassName("food-list-hook");
letel=foodList[index];
this.foodsScroll.scrollToElement(el,300);
},
 
以上所述是小编给大家介绍的vue和better-scroll实现列表左右联动效果详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
                
            
              
            
            
                     
                热门推荐
 
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                     
            
            
                
                
                
            
        
        
        
    
    - 
        
        返回顶部
    
 
    - 
        
            
            3162201930
        
    
 
    - 
        
            
            czq8825@qq.com