解决由于网络请求导致vue中使用Better-scroll页面无法滚动问题

问题描述:

将better-scroll封装后页面无法滚动。

scroll.vue组件代码如下:

<template>
  <div class="wrapper" ref="wrapper">
    <div class="content">
      <slot></slot>
    </div>
  </div>
</template>

<script>

import BScroll from 'better-scroll'

export default{
  name: '',
  data() {
    return {
      scroll: null    
    }
  },
  mounted() {
	this.scroll = new BScroll(this.$refs.wrapper, {})

  }
}
</script>

<style scoped>

</style>

home.vue实例使用代码如下(省略了负责显示网络返回数据的的组件)

<template>
  <div id="home">
    <nav-bar class="home-nav">
      <div slot="center">购物街</div>
    </nav-bar>

    <scroll class="content" ref="scroll">
		...
    </scroll>


  </div>
</template>

<script>

import Scroll from 'components/common/scroll/Scroll'

export default{
  name: '',
  components: {
    Scroll
  }
}
</script>

<style scoped>
#home {
  /* padding-top: 44px; */
  height: 100vh;
  position: relative;
}

.home-nav {
  background-color: var(--color-tint);
  color: #fff;


 .content {

   /* overflow: hidden; */

   position: absolute;
   top: 44px;
   bottom: 49px;
   left: 0px;
   right: 0px;
}

</style>

以上运行的结果就是页面卡主无法滚动。通过浏览器自带的开发工具查看wrapper与content的高度也是符合better-scroll需求的wrapper > content。


随后有自己做了一个无网络请求资源的页面代码如下:
<template>
  <div class="cart">
    <scroll class="content">
      <div class="div1"></div>
      <div class="div2"></div>
      <div class="div3"></div>
      <div class="div4"></div>
    </scroll>
  </div>
</template>

<script>
import Scroll from 'components/common/scroll/Scroll'

export default{
  name: '',
  components: {
    Scroll
  }
}
</script>

<style scoped>
.cart {
  height: 100vh;
}

 .content {

   /* overflow: hidden; */

   position: absolute;
   top: 44px;
   bottom: 49px;
   left: 0px;
   right: 0px;
} 

.content div {
  width: 100%;
  height: 300px;
}

.div1 {
  background-color: red;
}

.div2 {
  background-color: yellow;
}

.div3 {
  background-color: green;
}

.div4 {
  background-color: blue;
}
</style>

发现页面滚动正常,证明封装过程是对的。于是想到可能是网络请求的缘故导致vue进行渲染是与better-scroll有冲突于是在封装组件的代码中加上了一个2秒的延迟。


scroll.vue修改后代码如下:

<template>
  <div class="wrapper" ref="wrapper">
    <div class="content">
      <slot></slot>
    </div>
  </div>
</template>

<script>

import BScroll from 'better-scroll'

export default{
  name: '',
  data() {
    return {
      scroll: null    
    }
  },
  mounted() {

      // 保证在DOM渲染完毕后初始化better-scroll
      setTimeout(() => {
        this._initScroll()
      }, 2000)

  },
  methods: {
    _initScroll() {
        if (!this.$refs.wrapper) {
          return
        }

        // better-scroll的初始化
        this.scroll = new BScroll(this.$refs.wrapper, {})
     }
  }
}
</script>

<style scoped>

</style>

页面加载2秒后滚动正常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值