zoukankan      html  css  js  c++  java
  • 移动端使用mint-ui loadmore实现下拉刷新上拉显示更多

    前序:在使用vue做一个h5项目的时候,需要上拉分页加载,实践中总结一下:

    首先要安装mint-ui

    npm i mint-ui -S

     然后引入,一般在main.js里面

    import Vue from 'vue'
    import MintUI from 'mint-ui'
    import 'mint-ui/lib/style.css'
    import App from './App.vue'

     下面是实现上拉加载的代码

    <template>
      <div class="page-loadmore">
        <h1 class="page-title">Pull up</h1>
        <p class="page-loadmore-desc">在列表底部, 按住 - 上拉 - 释放可以获取更多数据</p>
        <p class="page-loadmore-desc">translate : {{ translate }}</p>
        <div class="loading-background" :style="{ transform: 'scale3d(' + moveTranslate + ',' + moveTranslate + ',1)' }">
          translateScale : {{ moveTranslate }} 
        </div>
    
        <div class="page-loadmore-wrapper" ref="wrapper" :style="{ height: wrapperHeight + 'px' }">
          <mt-loadmore :top-method="loadTop" @translate-change="translateChange" @top-status-change="handleTopChange"       :bottom-method="loadBottom" @bottom-status-change="handleBottomChange" :bottom-all-loaded="allLoaded" ref="loadmore">
            
            <ul class="page-loadmore-list">
              <li v-for="item in list" class="page-loadmore-listitem">{{ item }}</li>
            </ul>
           <div slot="top" class="mint-loadmore-top">
              <span v-show="topStatus !== 'loading'" :class="{ 'is-rotate': topStatus === 'drop' }">↓</span>
              <span v-show="topStatus === 'loading'">
                <mt-spinner type="snake"></mt-spinner>
              </span>
            </div>   
    
            <div slot="bottom" class="mint-loadmore-bottom">
              <span v-show="bottomStatus !== 'loading'" :class="{ 'is-rotate': bottomStatus === 'drop' }">↑</span>
              <span v-show="bottomStatus === 'loading'">
                <mt-spinner type="snake"></mt-spinner>
              </span>
            </div>
    
          </mt-loadmore>
        </div>
      </div>
    </template>
    <script type="text/babel">
      export default {
        data() {
          return {
            list: [],
            allLoaded: false,
            bottomStatus: '',
            wrapperHeight: 0,
            topStatus: '',
            //wrapperHeight: 0,
            translate: 0,
            moveTranslate: 0
          };
        },
        methods: {
          handleBottomChange(status) {
            this.bottomStatus = status;
          },
          loadBottom() {
            setTimeout(() => {
              let lastValue = this.list[this.list.length - 1];
              if (lastValue < 40) {
                for (let i = 1; i <= 10; i++) {
                  this.list.push(lastValue + i);
                }
              } else {
                this.allLoaded = true;
              }
              this.$refs.loadmore.onBottomLoaded();
            }, 1500);
          },
          handleTopChange(status) {
            this.moveTranslate = 1;
            this.topStatus = status;
          },
          translateChange(translate) {
            const translateNum = +translate;
            this.translate = translateNum.toFixed(2);
            this.moveTranslate = (1 + translateNum / 70).toFixed(2);
          },
          loadTop() {
            setTimeout(() => {
              let firstValue = this.list[0];
              for (let i = 1; i <= 10; i++) {
                this.list.unshift(firstValue - i);
              }
              this.$refs.loadmore.onTopLoaded();
            }, 1500);
          },
        
        },
        created() {
          for (let i = 1; i <= 20; i++) {
            this.list.push(i);
          }
        },
    
        mounted() {
          this.wrapperHeight = document.documentElement.clientHeight - this.$refs.wrapper.getBoundingClientRect().top;
        }
      };
    </script>
    
    <style>
    
    
    .loading-background, .mint-loadmore-top span {
        -webkit-transition: .2s linear;
        transition: .2s linear;
    }
    .mint-loadmore-top span {
        display: inline-block;
        vertical-align: middle;
    }
    
    .mint-loadmore-top span.is-rotate {
        -webkit-transform: rotate(180deg);
        transform: rotate(180deg);
    }
    
    .page-loadmore .mint-spinner {
        display: inline-block;
        vertical-align: middle
    }
    
    .page-loadmore-desc {
        text-align: center;
        color: #666;
        padding-bottom: 5px
    }
    
    .page-loadmore-desc:last-of-type,
    .page-loadmore-listitem {
        border-bottom: 1px solid #eee
    }
    
    .page-loadmore-listitem {
        height: 50px;
        line-height: 50px;
        text-align: center
    }
    
    .page-loadmore-listitem:first-child {
        border-top: 1px solid #eee
    }
    
    .page-loadmore-wrapper {
        overflow: scroll
    }
    
    .mint-loadmore-bottom span {
        display: inline-block;
        -webkit-transition: .2s linear;
        transition: .2s linear;
        vertical-align: middle
    }
    
    .mint-loadmore-bottom span.is-rotate {
        -webkit-transform: rotate(180deg);
        transform: rotate(180deg)
    }
    
    </style>
    

      

  • 相关阅读:
    异步方法单元测试
    docker常用命令备忘
    MQ消息最终一致性解决方案(转载)
    JAVA学习知识杂烩
    ASP.NET Core快速入门(第2章:配置管理)- 学习笔记(转载)
    NETCore下IConfiguration和IOptions的用法(转载)
    ASP.NET Core 之 Identity 入门(转载)
    vue+elementui+netcore混合开发
    JWT签名与验签
    使用Machin公式计算
  • 原文地址:https://www.cnblogs.com/zwp06/p/9214385.html
Copyright © 2011-2022 走看看