最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vant PullRefresh组件分析

    正文概述 掘金(jy_steven)   2020-11-24   1052

    介绍

    用于提供下拉刷新的交互操作。

    分析

    UML组件类图建模

    注意:忽略了部分的属性和方法 vant PullRefresh组件分析

    布局

    组件布局源代码:

    render() {
        return (
          <div class="pull-refresh">
            <div ref="track" class="pull-refresh__track">
              <div class="pull-refresh__head">
                {this.genStatus()}
              </div>
              {this.slots()}
            </div>
          </div>
        );
      },
    

    vant PullRefresh组件分析

    提示区域

    .van-pull-refresh {
      &__head {
      	// 下面只摘抄关键的
        position: absolute;
        left: 0;
        width: 100%;
        transform: translateY(-100%);
      }
    }
    

    逻辑实现

    1.添加手势处理 TouchMixin

    为滚动容器绑定手势事件,并计算相关的手势方向和滑动距离

    export const TouchMixin = {
      data() {
        return { direction: '' };
      },
    
      methods: {
        touchStart(event) {
          this.resetTouchStatus();
          this.startX = event.touches[0].clientX;
          this.startY = event.touches[0].clientY;
        },
    
        touchMove(event) {
          const touch = event.touches[0];
          this.deltaX = touch.clientX - this.startX;
          this.deltaY = touch.clientY - this.startY;
          this.offsetX = Math.abs(this.deltaX);
          this.offsetY = Math.abs(this.deltaY);
          this.direction =
            this.direction || getDirection(this.offsetX, this.offsetY);
        },
    
        resetTouchStatus() {
          this.direction = '';
          this.deltaX = 0;
          this.deltaY = 0;
          this.offsetX = 0;
          this.offsetY = 0;
        },
    
        // avoid Vue 2.6 event bubble issues by manually binding events
        // https://github.com/youzan/vant/issues/3015
        bindTouchEvent(el) {
          const { onTouchStart, onTouchMove, onTouchEnd } = this;
    
          on(el, 'touchstart', onTouchStart);
          on(el, 'touchmove', onTouchMove);
    
          if (onTouchEnd) {
            on(el, 'touchend', onTouchEnd);
            on(el, 'touchcancel', onTouchEnd);
          }
        },
      },
    };
    

    2.组件内实现手势的事件处理逻辑

    /*
    * 只有核心逻辑
    */
    methods: {
    	onTouchStart (event) {
        	
        },
        // 1. 调用touchMixin的手势计算
        // 2. 阻止事件默认行为和冒泡
        // 3. 对滑动的距离进行优化处理
        // 4. 根据距离,设置组件的状态
        onTouchMove (event) {
          this.touchMove(event);
    
          if (this.ceiling && this.deltaY >= 0 && this.direction === 'vertical') {
            preventDefault(event);
            this.setStatus(this.ease(this.deltaY));
          }
        },
        onTouchEnd (event) {
        	this.$emit('refresh');
        }
    }
    

    起源地下载网 » vant PullRefresh组件分析

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元