betterScroll的使用

 >>>>>betterScroll in github<<<<<

<div class="wrapper">
  <ul class="content">
    <li>...</li>
    <li>...</li>
    ...
  </ul>
  <!-- 这里可以放一些其它的 DOM,但不会影响滚动 -->
</div>

/*
上面的代码中 BetterScroll 是作用在外层 wrapper 容器上的,滚动的部分是 content 元素。这里要注意的是,BetterScroll 默认处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略。不过对于 BetterScroll v2.0.4 版本,可以通过 specifiedIndexAsContent 配置项来指定 content,详细的请参考文档。

*/

 

  new BScroll('.bs-wrapper', {
    //...
    observeDOM: true // 开启 observe-dom 插件
  })

 .content 没有设置高度,插件无效(必须设置高度)。

图片没有加载完,所以不能正常滚动,解决这个问题需要设置observeDOM属性。

2、增加BackTop组件(页面右下角回到顶端的功能)

backTop按需要再scroll中增加:click:true才能使用。注意,button不需要试着

讲bacltop组件增加挂载到home.vue组件中,

设置在honm.vue中设置backtop组件的点击事件(自定义组件在vue2中无法直接用@click监听,需要用到@click.native,VUE3中可以直接使用??);(还有一种方法,就是在直接在backtop组件中监听点击,$emit将自定义事件传入home.vue中,在处理相关的方法)

需要使用scroll对象中的scrollTo(x,y,time)方法

在home.vue中使用better-scroll对象方法,home中的my-scroll是better-scroll对象的实例,监听他的滚动。通过设置ref,获取该对组件,在获取组件的scroll属性就是scroll对象,再使用scroll的scrollTo方法,再获取相关方法进行数据处理。

this.$refs.myscroll.scroll.scrollTo(0, 0, 500);
//.scrollTo(x,y,time)

2-2实现backtop组件(按钮)的显示和隐藏。

设置组件的probeType值(此处不能写死,影响复用,方法是在使用的组件中传入probeType的值(1/2/3),子组件设置一个props,接收)

  props: {
    probeType: {
      type: Number,
      default: 1,
    },
  },
//
this.scroll = new BScroll(this.$refs.wrapper, {
      click: true, //不限制button,限制div等等
      // mouseWheel: true,
      observeDOM: true,
      probeType: this.probeType,
    });

//home
<my-scroll class="content" ref="myscroll" :probeType="3">

需要监听滚动,

this.scroll.on('scroll',position=>{ console.log(position)})

此时监听滚动是在myscroll组件中,需要把监听到数据发送到父组件中。$emit()

 home中监听自定义事件,获取到position的值

注意,position是一个对象,分别有x,y两个属性值。

通过对position.y的值进行处理,配合backtop的v-show使用。

   contentscroll(position) {
      // console.log(-position.y);
      //判断是否隐藏
      this.isShowBacktop = -position.y > 1000;
    },

//
  <back-top @click.native="backclick" v-show="isShowBacktop"></back-top>

3.实现上拉加载更多功能;

使用better-scroll中pullUpLoad功能;

当页面上拉到页面底部时,触发回调函数,再进行相关业务的处理

//事件:pullingUp 
 this.scroll.on("pullingUp", () => {
      this.$emit("pullingUp");
      //this.scroll.finishPullUp()//在使用端控制 finishpullup
    });

需要特别注意是,滚动的组件分为3个部分,在哪个界面下就要在加载哪个界面的对应数据。

 

@pullingUp="loadMore"

loadMore() {
      this.getHomeGoods(this.curgoodstype); //curgoodstype是自定义属性保存type
    },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值