vue vlog|vue和better-scroll实现列表左右联动效果详解

时间:2024-06-29  来源:Dom教程  阅读:

一.实现思路

    (1)实现上是左右分别一个better-scroll列表 (2)利用计算右侧列表每一个大区块的高度来计算左侧的位置

二.实现

1.实现左右两个better-scroll

(1)dom结构(better-scroll要求,会把最外层dom的第一个子元素作为要滚动的区域)

左边滚动列表dom
 
   
    
  • {{item.name}}

  • {{food.name}}

    {{food.description}}

    月售{{food.sellCount}}份 好评率{{food.rating}}% ¥{{food.price}} ¥{{food.oldPrice}}
  • 在数据请求完成后的$nextTick中初始化better-scroll,就能实现两个列表分别能滚动,至于联动,要后面自己做

    _initScroll() {
        this.menuScroll = new BScroll(this.$els.menuWrapper,{
         click:true  //允许better-scroll列表上的点击事件
        });
        this.foodsScroll = new BScroll(this.$els.foodWrapper,{
         probeType : 3  //让better-scroll监听scroll事件
        });
        this.foodsScroll.on("scroll",(pos) => {
         this.scrollY =Math.abs(Math.round(pos.y));
        })
       },
    

    2.实现联动效果

    (1)具体的联动实现思路

      在渲染完成后($nextTick内),初始化better-scroll,并在初始化函数内添加右侧列表的scroll监听事件,并记录scrollY值到,存入vue的data中 在渲染完成后($nextTick内),计算右侧列表的每一个大区块的高度,并累加,存入数组listHeight 因为scrollY值在滚动中总是不断变化的,所以在computed中计算出currentIndex,当前滚动区域是哪一个大区块,也就是listHeight数组的下标 在dom中根据currentIndex应用左侧列表被点中的样式 在左侧列表某一项被点中的时候,右侧列表滑动到某一个大块区域,
    //初始化better-scroll
    _initScroll() {
        this.menuScroll = new BScroll(this.$els.menuWrapper,{
         click:true
        });
        this.foodsScroll = new BScroll(this.$els.foodWrapper,{
         probeType : 3
        });
        this.foodsScroll.on("scroll",(pos) => {
         this.scrollY =Math.abs(Math.round(pos.y));
        })
       },
    
    _calculateHeight() {
        let foodList = this.$els.foodWrapper.getElementsByClassName("food-list-hook");
        let height = 0;
        this.listHeight.push(height);
        for(let i=0;i
    
    
    
    computed: {
       currentIndex() {
        for(let i=0;i< this.listHeight.length;i++) {
         let height1 = this.listHeight[i];
         let height2 = this.listHeight[i+1];
         if(!height2 || (this.scrollY >= height1 && this.scrollY < height2)){
          return i;
         }
        }
        return 0;
       }
      },
    
       
        
        
    //被点击事件
    //dom
    
       
        
        

    vue vlog|vue和better-scroll实现列表左右联动效果详解

    http://m.bbyears.com/wangyezhizuo/163278.html

    推荐访问:vue怎么添加自己的音乐 vue是什么
    相关阅读 猜你喜欢
    本类排行 本类最新