有关饿了么Vue2.0与better-scroll结合问题

问题

设置了better-scroll但是界面仍然无法滚动

安装

npm i better-scroll -S

goods界面

<template>
  <div class="goods">
    <div class="menu-wrapper"
         ref="menuWrapper">
      <ul>
        <li v-for="(item,index) in goods"
            class="menu-item"
            :key="index">
          <span class="text border-1px">
            <span v-show="item.type>0"
                  class="icon"
                  :class="classMap[item.type]"></span>{{item.name}}
          </span>
        </li>
      </ul>
    </div>
    <div class="foods-wrapper"
         id="wrapper"
         ref="foodsWrapper">
      <ul>
        <li v-for="(item,index) in goods"
            :key="index"
            class="food-list">
          <h1 class="title">{{item.name}}</h1>
          <ul>
            <li v-for="(food,index) in item.foods"
                :key="index"
                class="food-item border-1px"
                @click="goDetail(food)">
              <div class="icon">
                <img width="57"
                     height="57"
                     :src="food.icon" />
              </div>
              <div class="content">
                <h2 class="name">{{food.name}}</h2>
                <p class="description"
                   v-show="food.description">{{food.description}}</p>
                <div class="sell-info">
                  <span class="sellCount">月售{{food.sellCount}}份</span>
                  <span class="rating">好评率{{food.rating}}%</span>
                </div>
                <div class="price">
                  <span class="newPrice"><span class="unit"></span>{{food.price}}</span>
                  <span v-show="food.oldPrice"
                        class="oldPrice">¥{{food.oldPrice}}</span>
                </div>
                <!-- <div class="cartcontrol-wrapper">
                  <cartcontrol :food="food"></cartcontrol>
                </div> -->
              </div>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</template>

js

<script type="text/ecmascript-6">
import axios from 'axios';
import BScroll from 'better-scroll';
// const ERR_OK = 0;
export default {
  props: {
    seller: {
      type: Object
    }
  },
  data () {
    return {
      goods: []
    };
  },
  created () {
    this.classMap = ['decrease', 'discount', 'special', 'invoice', 'guarantee'];
    axios.get('/api/goods').then((res) => {
      this.goods = res.data.data;
      this.$nextTick(() => {
        this._initScroll();
        this._calculateHeight();
      })
      console.log(this.$refs.menuWrapper)
    });
  },
  methods: {
    _initScroll () {
      this.menuWrapper = new BScroll(this.$refs.menuWrapper, {
        click: true
      });
      this.foodsScroll = new BScroll(this.$refs.foodsWrapper, {
        click: true,
        probeType: 3
      });
      // 监控滚动事件
      this.foodsScroll.on('scroll', (pos) => {
        this.foodsScrollY = Math.abs(Math.round(pos.y))
      })
    }
  }
};
</script>

better-scroll 对外暴露了一个 BScroll 的类,我们初始化只需要 new 一个类的实例即可。第一个参数就是我们 wrapper 的 DOM 对象,第二个是一些配置参数。

better-scroll 的初始化时机很重要,因为它在初始化的时候,会计算父元素和子元素的高度和宽度,来决定是否可以纵向和横向滚动。因此,我们在初始化它的时候,必须确保父元素和子元素的内容已经正确渲染了。如果没有办法滑动,那就是初始化的时机不对。

this. n e x t T i c k ( ) 这 个 方 法 作 用 是 当 数 据 被 修 改 后 使 用 这 个 方 法 会 回 调 获 取 更 新 后 的 d o m 再 r e n d e r 出 来 如 果 不 在 下 面 的 t h i s . nextTick()这个方法作用是当数据被修改后使用这个方法会回调获取更新后的dom再render出来 如果不在下面的this. nextTick()使domrenderthis.nextTick()方法里回调这个方法,数据改变后再来计算滚动轴就会出错

参考文献

https://blog.csdn.net/keji_123/article/details/78809506

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值