<u id="4do2l"><sub id="4do2l"></sub></u><u id="4do2l"><sub id="4do2l"></sub></u>
<u id="4do2l"><sub id="4do2l"></sub></u>

<u id="4do2l"><sub id="4do2l"></sub></u>

<u id="4do2l"></u>

一聚教程网:一个值得你收藏的教程网站

最新下载

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

时间:2019-04-29 17:22:08 编辑:猪哥 来源:转载

一.实现思路

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

二.实现

1.实现左右两个better-scroll

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

左边滚动列表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)具体的联动实现思路

  1. 在渲染完成后($nextTick内),初始化better-scroll,并在初始化函数内添加右侧列表的scroll监听事件,并记录scrollY值到,存入vue的data中
  2. 在渲染完成后($nextTick内),计算右侧列表的每一个大区块的高度,并累加,存入数组listHeight
  3. 因为scrollY值在滚动中总是不断变化的,所以在computed中计算出currentIndex,当前滚动区域是哪一个大区块,也就是listHeight数组的下标
  4. 在dom中根据currentIndex应用左侧列表被点中的样式
  5. 在左侧列表某一项被点中的时候,右侧列表滑动到某一个大块区域,
//初始化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

   
//js selectMenu(index,event) { if(!event._constructed) { return ; } let foodList = this.$els.foodWrapper.getElementsByClassName("food-list-hook"); let el = foodList[index]; this.foodsScroll.scrollToElement(el,300); },

文章评论

热门栏目

201967期开奖记录 宜宾市| 巴东县| 扶绥县| 将乐县| 曲阳县| 大足县| 乌鲁木齐市| 敦煌市| 光泽县| 钟祥市| 尼木县| 红河县| 体育| 宁化县| 德清县| 贵溪市| 鸡西市| 会泽县| 墨脱县| 汤原县| 增城市| 耿马| 湄潭县| 嵊泗县| 阿坝县| 绥化市| http://57788216.cn 新绛县| 潍坊市| 东丽区| 双桥区| 留坝县| 革吉县| 兴义市| 襄汾县| 清水县| 昔阳县| 大厂| 荣成市| 屏边| 互助| 休宁县| 墨玉县| 杨浦区| 荥阳市| 扶沟县| 黔东| 永福县| 文登市| 康平县| 南城县| 东莞市| 金堂县| 乡城县| 益阳市| 金塔县| http://jtb2145.co 衡阳市| 宜兴市| 海淀区| 台南县| 屏东市| 萍乡市| 仪陇县| 汝州市| 特克斯县| 松桃| 库尔勒市| 蒙山县| 浦江县| 庆阳市| 神池县| 宣城市| 迁安市| 滦南县| 清苑县| 庆城县| 永顺县| 桂平市| 华宁县| 盐源县| 元谋县| 宜都市| 仁怀市| 苏州市| 德化县| 西吉县| 咸宁市| 龙口市| 江津市| 宁远县| http://xuv6005.tw 绥棱县| 兴化市| 长春市| 芜湖市| 桂阳县| 民和| 卢湾区| 瓦房店市| 广平县| 金坛市| 庆元县| 肥城市| 龙泉市| 乡宁县| 洪泽县| 海淀区| 象山县| 石台县| 河曲县| 蓬安县| 南汇区| 尖扎县| 呼图壁县| 宿州市| 常熟市| 泰宁县| 三穗县| 盘锦市| 金沙县| http://www.hpxnedk.tw 周至县| 桂林市| 甘肃省| 陆河县| 龙岩市| 前郭尔| 资源县| 泸州市| 衡南县| 新邵县| 丰都县| 华安县| 湖州市| 高雄县| 三明市| 平山县| 沈阳市| 垦利县| 桃园县| 上栗县| 汝阳县| 临沂市| 沽源县| 金寨县| 多伦县| 娄底市| 安吉县| 鄯善县| 武陟县| http://riwsbq.com 昌黎县| 宜君县| 扎赉特旗| 蓬安县| 乡城县| 天等县| 泰兴市| 九龙坡区| 同德县| 新密市| 天气| 正安县| 丹棱县| 卢湾区| 潜江市| 文水县| 兴和县| 五家渠市| 廉江市| 吉林省| 广东省| 瑞安市| 嘉祥县| 田东县| 雅江县| 依安县| 高青县| 丰宁| http://www.npofnn.cn 新绛县| 丹棱县| 自治县| 玉田县| 马边| 巫山县| 汕尾市| 北票市| 中阳县| 剑河县| 澄江县| 西乌珠穆沁旗| 都安| 定远县| 承德县| 浦城县| 玛纳斯县|