美文网首页
batter-scroll的组件化以及基本用法踩坑

batter-scroll的组件化以及基本用法踩坑

作者: 明天_874d | 来源:发表于2020-03-16 09:19 被阅读0次

记录一下使用"better-scroll"时遇到的坑

记录一下使用"better-scroll"时遇到的坑使用场景:项目需要使用到了better-scroll 要求页面滑动顺畅,支持上拉刷新、下拉加载 已经返回到指定位置

前人的坑:一开始并没有使用better-scroll 而是用的vant 的组件,同样支持上拉刷新、下拉加载 但是在点击返回到指定位置 和点击详情返回时出现了问题,无法记录滑动位置以及定位不到指定元素位置

better-scroll写法

先将其写成组件


<template>

  <div class="wrapper" ref="wrapper">

    <div>

      <div class="loaddingText" v-if="isLoadingTop">{{ topPullText }}</div>

      <slot></slot>

      <div class="loaddingTextBottom" v-if="isLoading">{{ bottomPullText }}</div>

    </div>

  </div>

</template>

<script>

import BScroll from "better-scroll";

export default {

  props: {

    // 显示文字

    bottomPullText: {

      type: String,

      default: "加载中"

    },

    topPullText: {

      type: String,

      default: "加载中"

    }

  },

  data() {

    return {

      wrapScroll: "", //滚动容器对象

      isLoading: false,

      isLoadingTop: false,

      // 记录起始位置,防止上拉加载后回滚到顶;

      satrY: 0

    };

  },

  computed: {

    scroll(){

      return this.wrapScroll

    }

  },

  methods: {

    // 上拉加载

    uploadMore() {

      this.$emit("bottom-method");

      this.refresh();

    },

    downloadMore() {

      this.$emit("top-method");

      this.refresh();

    },

    // 加载完毕

    finishedUpload() {

      this.wrapScroll.finishPullUp();

    },

    // 刷新组件 (每次内容变化都要调用刷新,否则会出现无法滑动)

    refresh() {

      if (this.wrapScroll) {

        this.wrapScroll.refresh();

      }

    },

    scrollTo(el) {

      this.wrapScroll.scrollToElement(el, 300);

      this.$emit("bottom-method");

    }

  },

  mounted() {

    if (this.wrapScroll) {

      // this.refresh()

    } else {

      this.$nextTick(() => {

        this.wrapScroll = new BScroll(this.$refs.wrapper, {

          // 是否允许上下滑动(是 true, 否 false)

          scrollY: true,

          // 是否允许左右滑动(是 true, 否 false)

          scrollX: false,

          // 上下滑动的起始点

          startY: this.satrY,

          probeType: 1,

          // 是否允许散发点击事件(是 true, 否 false)

          click: true,

          pullUpLoad: true

        });

        this.wrapScroll.on("scroll", pos => {

          if (this.wrapScroll.maxScrollY - pos.y > 50) {

            console.log("会重复触发吗");

            this.isLoading = true;

          } else {

            this.isLoading = false;

          }

          if (pos.y > 50) {

            this.isLoadingTop = true;

          } else {

            this.isLoadingTop = false;

          }

        });

        this.wrapScroll.on("touchEnd", pos => {

          // 上拉距离大于30  发布上拉加载事件

          if (this.wrapScroll.maxScrollY - pos.y > 50) {

            this.startY = this.wrapScroll.startY;

            this.$emit("bottom-method");

            setTimeout(() => {

              this.refresh();

            }, 1000);

          }

          if (pos.y > 50) {

            this.startY = this.wrapScroll.startY;

            this.$emit("top-method");

            setTimeout(() => {

              this.refresh();

            }, 1000);

          }

        });

      });

    }

  }

};

</script>

<style lang="less" scope>

.wrapper {

  .loadmore-text-container {

    text-align: center;

    font-size: 16px;

    color: #ccc;

  }

  .loaddingText {

    font-size: 14px;

    position: absolute;

    width: 100%;

    top: -50px;

    text-align: center;

    line-height: 50px;

    // color: #ccc;

  }

  .loaddingTextBottom {

    font-size: 14px;

    position: absolute;

    width: 100%;

    bottom: -50px;

    text-align: center;

    line-height: 50px;

    // color: #ccc;

  }

}

</style>

然后我们在页面中引用


<scroll-box>

....中间是滑动区域填充

</scroll-box>

import Scroll from "../../components/scroll";

  components: {

    "scroll-box": Scroll

  },

computed:{

scroller(){

      return this.$refs.wrapper.scroll;

    },

}

值得一提的是,在页面反复前进后退的时候 ,可能会造成组件计算高度不及时 造成页面无法滑动的情况,这个时候我们需要在activated生命周期中重新手动刷新组件,来完成组件的高度计算


  activated() {

    this.scroller.refresh()

  }

基本上就这么多了,先记录一下

相关文章

  • batter-scroll的组件化以及基本用法踩坑

    记录一下使用"better-scroll"时遇到的坑 记录一下使用"better-scroll"时遇到的坑使用场景...

  • 浅谈组件化以及Arouter用法以及踩过的坑

    一、配置 1、主项目以及各自的lib都需添加如下 需要注意,主项目需要建立引用目录如 具体看你放在jnilib还是...

  • Android路由框架ARouter的集成、基本使用以及踩坑全过

    Android路由框架ARouter的集成、基本使用以及踩坑全过程    对项目进行过组件化的同学肯定也都经历过这...

  • 骨架屏(文章中间)

    分享 模板封装 组件封装(组件化) 骨架屏 小程序seo处理 对于在iphone系列下安全区踩的坑以及处理方式 百...

  • 谈谈我的理解的Android组件化——2

    上一期的组件化以及本次的内容 发布包到本地库 搭建私有仓库,发布到私有仓库中 踩坑 搭建仓库的目的 上一期的组件化...

  • 组件化踩坑总结

     经历了项目组件化(准备工作)项目组件化(一)创建本地私有库项目组件化(二)创建远程私有库这些天也踩了不少的坑出来...

  • 组件化踩坑记录

    混淆问题 butterknife 资源冲突,覆盖问题 打aar包需要注意的事项 混淆问题 推荐两种混淆方式 @ke...

  • iOS组件化踩坑

    之前写过一片组件化和创建私有pod的文章组件化和私有pod源仓库,这几天碰到一个比较庞大的项目,终于有机会来真正的...

  • Retrofit Https踩坑记录

    Retrofit Https踩坑记录 前言 新司机上路,坑多,本文重点是踩坑,不详细讲retrofit用法,本文不...

  • iOS组件化Cocoapods踩坑

    一、推送私有库时候忽略警告 二、框架中如果使用Xib加载crash的情况出现通过mainBundle加载不了,无法...

网友评论

      本文标题:batter-scroll的组件化以及基本用法踩坑

      本文链接:https://www.haomeiwen.com/subject/ycywehtx.html