これは私が今まで見た中で最も素晴らしいスライドローディング フロントエンド フレームワークです


序文

携帯電話にプルダウン リフレッシュとプルダウン ロードを実装することは、最も一般的な要件です。今日、兄貴は非常にデリケートな js フレームワークである mescroll を紹介します。
ここに画像の説明を挿入


提示:以下是本篇文章正文内容,下面案例可供参考

1.メスロールの紹介

mescroll.js は、H5 側で実行されるプルダウン リフレッシュおよびプルアップ ロード プラグインです。バージョン 1.4.1 以降では、画像の遅延読み込み効果も設定できます。

mescroll.js はネイティブ Javascript で開発されており、jquery や zepto などに依存しません。vue にも対応しています。

画像の説明を追加してください

2.クイックスタート

  1. mescroll.min.css 、 mescroll.min.js をダウンロードして参照
// unpkg的CDN:
  <link rel="stylesheet" href="https://unpkg.com/[email protected]/mescroll.min.css">
  <script src="https://unpkg.com/[email protected]/mescroll.min.js" charset="utf-8"></script>
  
  // jsdelivr的CDN:
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/mescroll.min.css">
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/mescroll.min.js" charset="utf-8"></script>
  1. これは、初心者がすぐに開始するのに便利な基本バージョンの使用です。 2. 次のレイアウト構造をコピーします。
<div id="mescroll" class="mescroll"> //id可自定义
    <div> //这个div不能删,否则上拉加载的布局会错位.
         //列表内容...
      </div>
</div>
  1. ここで、"mescroll" の class を削除することはできず、2 層目の div を削除することもできません。削除しないと、プルアップ読み込みのレイアウトがずれます (ul または他のコンテナー タグに変更できます) 3. mescroll の div の高さを固定します. 簡単で迅速な配置方法を使用することをお勧めします.
.mescroll{
    
    
  position: fixed;
  top: 50px;
  bottom: 0;
  height: auto; 
}
  1. mescroll オブジェクトを作成します。
 var mescroll = new MeScroll("mescroll", {
    
     //第一个参数"mescroll"对应上面布局结构div的id (1.3.5版本支持传入dom对象)
          //如果您的下拉刷新是重置列表数据,那么down完全可以不用配置,具体用法参考第一个基础案例
    down: {
    
    
     callback: downCallback //下拉刷新的回调,别写成downCallback(),多了括号就自动执行方法了
    },
    up: {
    
    
     callback: upCallback, //上拉加载的回调
     //以及一些常用的配置,当然不写也可以的.
    }
   });

プルアップしてロードするときは、コールバック属性のコールバックに加えて、次のような一般的に使用される構成が他にもあります。

データなしのレイアウト: htmlNodata:

- 終わり -

(カスタマイズ可能なコンテンツ)、

トップに戻るボタンの設定: toTop: {src:'…', offset: 50, btnClick: null},

遅延読み込み: lazyLoad: {use: true, attr: 'imgurl', delay: 500, …} など 5. コールバックを処理します (更新と読み込み):

 //下拉刷新的回调
  function downCallback() {
    
    
   // 处理方式一: 重置mescroll内部变量(如mescroll.num=1和mescroll.hasNext=true), 自动触发upCallback
   mescroll.resetUpScroll()
   
   // 处理方式二: 单独处理下拉刷新的逻辑
   $.ajax({
    
    
    url: 'xxxxxx',
    success: function(data) {
    
    
     //联网成功的回调,隐藏下拉刷新的状态;
     mescroll.endSuccess(); //无参. 注意结束下拉刷新是无参的
     //设置数据
     //setXxxx(data);//自行实现 TODO
    },
    error: function(data) {
    
    
     //联网失败的回调,隐藏下拉刷新的状态
     mescroll.endErr();
    }
   });
  }
  
  //上拉加载的回调 page = {num:1, size:10}; num:当前页 默认从1开始, size:每页数据条数,默认10
  function upCallback(page) {
    
    
   var pageNum = page.num; // 页码, 默认从1开始 如何修改从0开始 ?
   var pageSize = page.size; // 页长, 默认每页10条
   $.ajax({
    
    
    url: 'xxxxxx?num=' + pageNum + "&size=" + pageSize,
    success: function(data) {
    
    
     var curPageData = data.xxx; // 接口返回的当前页数据列表
     var totalPage = data.xxx; // 接口返回的总页数
     var totalSize = data.xxx; // 接口返回的总数据量
     var hasNext = data.xxx; // 接口返回的是否有下一页 (true/false)
     
     //以上数据结构都是基本的,主要是为了满足mescroll对数据结构的要求。不一定要接口返回,也可以前端自定义。
     
     //方法一(推荐): 后台接口有返回列表的总页数 totalPage
     //必传参数(当前页的数据个数, 总页数)
     //mescroll.endByPage(curPageData.length, totalPage);
       
     //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
     //必传参数(当前页的数据个数, 总数据量)
     //mescroll.endBySize(curPageData.length, totalSize);
       
     //方法三(推荐): 您有其他方式知道是否有下一页 hasNext
     //必传参数(当前页的数据个数, 是否有下一页true/false)
     //mescroll.endSuccess(curPageData.length, hasNext);
     
     //curPageData.length必传的原因:
     1. 使配置的noMoreSize 和 empty生效
     2. 判断是否有下一页的首要依据: 
        当传的值小于page.size时(说明不满页了),则一定会认为无更多数据;
        比传入的totalPage, totalSize, hasNext具有更高的判断优先级;
     3. 当传的值等于page.size时,才会取totalPage, totalSize, hasNext判断是否有下一页
     传totalPage, totalSize, hasNext目的是避免方法四描述的小问题
     
     // 设置列表数据 自行实现 TODO
     // if(page.num == 1) document.getElementById("xxxxList").innerHTML="" // 第一页,先置空,再追加
     // setListData(curPageData);
    },
    error: function(e) {
    
    
     //联网失败的回调,隐藏下拉刷新和上拉加载的状态
     mescroll.endErr();
    }
   });
  }

– 上記はメスロールの最も基本的な使用方法です.メスロールのより強力な機能を発見するために、メスロール公式サイトの基本ケースをダウンロードして表示することを強くお勧めします~

3,1分エントリー メスロール画像 遅延読み込み

  1. mescroll が少なくともバージョン 1.4.1 であることを確認してください
  2. mescroll を初期化するときは、up で lazyLoad の使用を true に設定します。
var mescroll = new MeScroll("mescroll", {
    
    
  up: {
    
    
   lazyLoad: {
    
    
           use: true, // 是否开启懒加载,默认false
           attr: 'imgurl', // 网络地址的属性名 (图片加载成功会移除该属性): <img imgurl='网络图  src='占位图''/>
           showClass: 'mescroll-lazy-in', // 图片加载成功的显示动画: 渐变显示,参见mescroll.css
           delay: 500, // 列表滚动的过程中每500ms检查一次图片是否在可视区域,如果在可视区域则加载图片
           offset: 200 // 超出可视区域200px的图片仍可触发懒加载,目的是提前加载部分图片
       }
  }
 })
  1. img または div の imgurl 属性を設定します。値は画像のネットワーク アドレスです。
 img标签: <img imgurl="网络图" src="占位图"/> // 占位图直接在src设置; 图片加载成功,就会替换src的占位图
 div或其他标签: <div imgurl="网络图" style="background-image: url(占位图)"><div> // 占位图在css中设置; 图片以背景图的形式展示
  1. これまでのところ, mescroll の遅延読み込み機能は普通に使えます. Mescroll はリストがスクロールされると可視領域に画像を自動的に読み込みます. また, 動的に画像を追加したり変更したりして, 遅延読み込みを手動でトリガーしたい場合があります.次のメソッドを呼び出すだけです:
    mescroll.lazyLoad() または mescroll.endByPage() または mescroll.endBySize() または mescroll.endSuccess()。

第四に、vue での mescroll の使用

cnpm を使用してインストールしないでください。更新が古いバージョンである可能性があるため、npm または yarn を使用してください。

npm install --save mescroll.js 

また

yarn add  mescroll.js 

mescroll コンポーネントを導入する

import MescrollVue from 'mescroll.js/mescroll.vue'

ページのサンプル コード

  <template>
     <div>
       <!--mescroll滚动区域的基本结构-->
       <mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
         <!--内容...-->
       </mescroll-vue>
     </div>
   </template>
   
   <script>
   // 引入mescroll的vue组件
   import MescrollVue from 'mescroll.js/mescroll.vue'
   
   export default {
      
      
     components: {
      
      
       MescrollVue // 注册mescroll组件
     },
     data () {
      
      
       return {
      
      
         mescroll: null, // mescroll实例对象
         mescrollDown:{
      
      }, //下拉刷新的配置. (如果下拉刷新和上拉加载处理的逻辑是一样的,则mescrollDown可不用写了)
         mescrollUp: {
      
       // 上拉加载的配置.
           callback: this.upCallback, // 上拉回调
           //这里可以添加一些常用的配置,当然不写也可以的
         },
         dataList: [] // 列表数据
       }
     },
     beforeRouteEnter (to, from, next) {
      
       // 如果没有配置顶部按钮或isBounce,则beforeRouteEnter不用写
       next(vm => {
      
      
         // 滚动到原来的列表位置,恢复顶部按钮和isBounce的配置
         vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter()
       })
     },
     beforeRouteLeave (to, from, next) {
      
       // 如果没有配置顶部按钮或isBounce,则beforeRouteLeave不用写
       // 记录列表滚动的位置,隐藏顶部按钮和isBounce的配置
       this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave()
       next()
     },
     methods: {
      
      
       // mescroll组件初始化的回调,可获取到mescroll对象
       mescrollInit (mescroll) {
      
      
         this.mescroll = mescroll  // 如果this.mescroll对象没有使用到,则mescrollInit可以不用配置
       },
       // 上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10
       upCallback (page, mescroll) {
      
      
         // 联网请求
         axios.get('xxxxxx', {
      
      
           params: {
      
      
             num: page.num, // 页码
             size: page.size // 每页长度
           }
         }).then((response) => {
      
      
           // 请求的列表数据
           let arr = response.data
           // 如果是第一页需手动置空列表
           if (page.num === 1) this.dataList = []
           // 把请求到的数据添加到列表
           this.dataList = this.dataList.concat(arr)
           // 数据渲染成功后,隐藏下拉刷新的状态
           this.$nextTick(() => {
      
      
             mescroll.endSuccess(arr.length)
           })
         }).catch((e) => {
      
      
           // 联网失败的回调,隐藏下拉刷新和上拉加载的状态;
           mescroll.endErr()
         })
       }
     }
   }
   </script>

V. まとめ

mescroll は、複数の端末で実行する一連のコードを練習でき、uni-app をサポートし、Android、iOS、携帯電話のブラウザーで完全に実行され、主流の PC ブラウザーと互換性があります。また、公式ウェブサイトのドキュメントも信頼しており、研究と使用のための多くの古典的なケースがあります。注意: インターフェースは、複数の mescroll インスタンス/コンポーネントを持つことができます。

メスロールアドレス
http://www.mescroll.com/

この記事は、兄貴のフロントエンドラボ @ WeChat パブリックアカウントからのものです。

おすすめ

転載: blog.csdn.net/Susan003/article/details/127089013