序文
携帯電話にプルダウン リフレッシュとプルダウン ロードを実装することは、最も一般的な要件です。今日、兄貴は非常にデリケートな js フレームワークである mescroll を紹介します。
提示:以下是本篇文章正文内容,下面案例可供参考
1.メスロールの紹介
mescroll.js は、H5 側で実行されるプルダウン リフレッシュおよびプルアップ ロード プラグインです。バージョン 1.4.1 以降では、画像の遅延読み込み効果も設定できます。
mescroll.js はネイティブ Javascript で開発されており、jquery や zepto などに依存しません。vue にも対応しています。
2.クイックスタート
- 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>
- これは、初心者がすぐに開始するのに便利な基本バージョンの使用です。 2. 次のレイアウト構造をコピーします。
<div id="mescroll" class="mescroll"> //id可自定义
<div> //这个div不能删,否则上拉加载的布局会错位.
//列表内容...
</div>
</div>
- ここで、"mescroll" の class を削除することはできず、2 層目の div を削除することもできません。削除しないと、プルアップ読み込みのレイアウトがずれます (ul または他のコンテナー タグに変更できます) 3. mescroll の div の高さを固定します. 簡単で迅速な配置方法を使用することをお勧めします.
.mescroll{
position: fixed;
top: 50px;
bottom: 0;
height: auto;
}
- 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分エントリー メスロール画像 遅延読み込み
- mescroll が少なくともバージョン 1.4.1 であることを確認してください
- 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的图片仍可触发懒加载,目的是提前加载部分图片
}
}
})
- img または div の imgurl 属性を設定します。値は画像のネットワーク アドレスです。
img标签: <img imgurl="网络图" src="占位图"/> // 占位图直接在src设置; 图片加载成功,就会替换src的占位图
div或其他标签: <div imgurl="网络图" style="background-image: url(占位图)"><div> // 占位图在css中设置; 图片以背景图的形式展示
- これまでのところ, 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 パブリックアカウントからのものです。