mescroll 使用之 空页面内容修改

文章介绍了Mescroll官网中关于空布局的配置方法,包括如何修改btnText,以及对国际化配置的支持。当不自定义option时,可以从全局的GlobalOption对象中修改或添加空布局的显示内容,如提示文字和图标。

官网

https://www.mescroll.com/uni.html

空布局页面的配置

1. 修改 btnText 
	- 修改前
	// if (this.option.i18n) {
		// 	let i18nType = mescrollI18n.getType() // 国际化配置
		// 	console.log("i18nType", this.option.i18n);
		// 	return this.option.i18n[i18nType].btnText
	// } else {
		// 	return this.option.btnText
	// }
	- 修改后	
		if (this.option.btnText != null) { // 支持传空串不显示文本提示
			return this.option.btnText
		} else {
			let i18nType = mescrollI18n.getType() // 国际化配置
			if (this.option.i18n) {
				return this.option.i18n[i18nType].btnText
			} else {
				return GlobalOption.i18n[i18nType].btnText || GlobalOption.up.empty.btnText
		}

**因不自定义 option 所以去 全局的 GlobalOption --> up --> empty 对象里修改/添加**
		{   
			use: true, // 是否显示空布局
			tip: "~ 暂无数据 ~",
			btnText: '去其他地方去看看吧~',
			icon: "https://www.mescroll.com/img/mescroll-empty.png" // 图标路径  
		}

侵删(感谢大佬开源)

<template> <mescroll-body ref="mescrollRef" @init="mescrollInit" :top="topDynamic" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyClick="emptyClick" @scroll="scrollHandler" > <!-- 列表内容 --> <view class="data-list"> <view v-for="item in dataList" :key="item.id" class="list-item"> {{ item.title }} </view> </view> <!-- 自定义数据提示 --> <view slot="empty" v-if="dataList.length === 0"> 暂无数据,点击重试 </view> </mescroll-body> </template> <script> export default { data() { return { topDynamic: 0, // 可动态设置顶部距离(如导航栏高度) dataList: [], downOption: { use: true, auto: false, native: false // 是否使用原生下拉刷新(建议false) }, upOption: { use: true, auto: true, page: { size: 10 }, noMoreSize: 5, empty: { use: true, tip: '暂无数据' } } } }, methods: { // mescroll 初始化回调 mescrollInit(mescroll) { this.mescroll = mescroll }, // 下拉刷新 downCallback(mescroll) { this.dataList = [] this.upCallback(mescroll) }, // 上拉加载 upCallback(mescroll) { const pageNum = mescroll.num // 当前页码 const pageSize = mescroll.size // 每页大小,如 10 const totalCount = 100 // 总数据条数 const totalPage = Math.ceil(totalCount / pageSize) // 总页数:100/10=10页 // 模拟网络延迟 setTimeout(() => { try { // 生成当前页的数据 const curList = Array.from({ length: 100 }, (_, i) => { const id = (pageNum - 1) * pageSize + i + 1 // 防止超出 100 条 if (id > totalCount) return null return { id, title: `第 ${id} 条数据` } }).filter(item => item !== null) // 过滤掉超出的部分 // 追加到列表 this.dataList = this.dataList.concat(curList) // 告诉 Mescroll 加载结束 mescroll.endSuccess(curList.length) // 可选:如果已加载完全部数据,可以提示 if (pageNum >= totalPage) { // uni.showToast({ title: '所有数据已加载完毕', icon: 'none', duration: 1500 }) } } catch (e) { // 出错时调用 endErr 结束加载 mescroll.endErr() } }, 800) // 模拟 800ms 网络延迟 }, // 点击布局 emptyClick() { uni.showToast({ title: '布局被点击', icon: 'none' }) }, // 滚动监听(可用于吸顶、透明导航等) scrollHandler(mescroll) { console.log('滚动进度:', mescroll.getScrollTop()) }, // 手动禁用滚动(通过 lock) disableScroll() { this.mescroll && this.mescroll.lock(true) }, enableScroll() { this.mescroll && this.mescroll.lock(false) } } } </script> <style scoped> .data-list { min-height: 100%; } .list-item { padding: 20px; border-bottom: 1px solid #eee; font-size: 16px; } .no-scroll { overflow: hidden !important; touch-action: none !important; } .no-scroll ::v-deep .mescroll-body { height: 100% !important; } </style> 禁用当前滚动
11-21
<!-- 菜单悬浮的原理: 通过给菜单添加position:sticky实现, 用法超简单, 仅APP端的低端机兼容 https://caniuse.com/#feat=css-sticky --> <template> <view> <!-- 对于mescroll-body: 需设置:sticky="true", 此应避免在mescroll-body标签前面加其他非定位的元素, 否则下拉区域会被挤出, 无法会隐藏.--> <!-- 对于mescroll-uni: 则无需设置:sticky="true", 无其他限制和要求 --> <mescroll-body :sticky="true" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"> <!-- sticky吸顶悬浮的菜单, 父元素必须是 mescroll --> <view class="sticky-tabs"> <me-tabs v-model="tabIndex" :tabs="tabs" @change="tabChange"></me-tabs> </view> <!-- 数据列表 --> <view class="margin-sm padding-sm bg" v-for="(item,index) in 5" @click="clickItem(item)"> <view class="flex justify-between"> <view class="text-blue">待付款</view> <view class="text-white">2021/02/21 13:44</view> </view> <view class=" u-flex u-p-t-30"> <view class="u-m-r-10"> <u-avatar :src="avatar" mode="square" size="100"></u-avatar> </view> <view class="u-flex-1 text-white margin-left-xs"> <view class="u-font-16 text-bold">清风渡我</view> <view class="u-font-14 u-tips-color flex justify-between"> <view class="text-white">王者荣耀/1局</view> <view class="text-white"> 实付: <text class="text-lg">5币</text> </view> </view> </view> </view> <view class="flex justify-end u-p-t-20"> <u-button class="margin-right-sm" :custom-style="customStyle" shape="circle" :plain="true">取消订单</u-button> <u-button :custom-style="customStyle" shape="circle" :plain="true" @click="goNav('/my/order/pay')" >去支付</u-button> </view> </view> <!-- <empty v-if="goods.length === 0" des="暂无数据" show="true"></empty> --> </mescroll-body> </view> </template> <script> import MescrollMixin from "@/components/mescroll-uni/components/mescroll-uni/mescroll-mixins.js"; import mescrollBody from "@/components/mescroll-uni/components/mescroll-body/mescroll-body.vue"; import meTabs from "@/components/mescroll-uni/me-tabs/me-tabs.vue"; export default { mixins: [MescrollMixin], // 使用mixin components: { mescrollBody, meTabs, // orderList }, data() { return { goods: [], // 数据列表 tabs: [{ title: '全部订单', status: '2' }, { title: '待付款', status: '3' }, { title: '进行中', status: '4' }, { title: '已完成', status: '5' } ], tabIndex: 0, // tab下标 page: 1, limit: 10, userId: 0, status: 1, nickName: '', avatar: '', customStyle: { color: '#1789FD', backgroundColor: '#1E1F31', border: "4px", width: '180upx', height: '54upx', margin: "0 0 0 20upx" } } }, onLoad() { this.userId = uni.getStorageSync('userId') this.nickName = uni.getStorageSync('nickName') }, onShow() { // this.mescroll.resetUpScroll() }, methods: { /*下拉刷新的回调 */ downCallback() { // 这里加载你想下拉刷新的数据, 比如刷新轮播数据 // loadSwiper(); // 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 ) this.mescroll.resetUpScroll() }, /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */ upCallback(page) { let curTab = this.tabs[this.tabIndex].status let data = { userId: this.userId, status: curTab, page: page.num, limit: page.size } // this.$Request.getT('/help/selectCreateHelpOrder', data).then(res => { // this.mescroll.endBySize(res.data.list.length, res.data.totalPage) // if (page.num == 1) this.goods = []; //如果是第一页需手动制列表 // res.data.list.forEach(res => { // switch (res.status) { // case 1: // res.statusName = '待审核' // break; // case 2: // res.statusName = '待接单' // break; // case 3: // res.statusName = '待送达' // break; // case 4: // res.statusName = '已完成' // break; // case 5: // res.statusName = '下架' // break; // } // switch (res.userType) { // case 0: // res.userTypeName = '限' // break; // case 1: // res.userTypeName = '限男生' // break; // case 2: // res.userTypeName = '限女生' // break; // } // }) // this.goods = [...this.goods,...res.data.list]; //追加新数据 // this.mescroll.endSuccess(res.data.list.length); // 隐藏加载状态栏 // }).catch(() => { // //联网失败, 结束加载 // this.mescroll.endErr(); // }); }, // 切换菜单 tabChange() { this.goods = []; // 置列表,显示加载进度条 this.mescroll.resetUpScroll() }, //删除 delDemand(e) { let that = this uni.showModal({ title: '提示', content: '确定删除吗?', success: function(res) { if (res.confirm) { let data = { helpOrderId: e.id } that.$Request.postT('/help/deleteHelpOrder', data).then(res => { uni.showToast({ title: "删除成功" }) that.mescroll.resetUpScroll() }) } else if (res.cancel) { console.log('用户点击取消'); } } }); }, // 完善需求 edit(item) { uni.navigateTo({ url: '/pages/order/release?type=hasEdit&id=' + item.id + '&content=' + item.content + '&site=' + item.site + '&phone=' + item.phone + '&deliveryTime=' + item.deliveryTime + '&classifyId=' + item .classifyId + '&classifyName=' + item.classifyName + '&userType=' + item.userType + '&commission=' + item .commission + '&image=' + item.image + '&address=' + item.address + '&latitude=' + item .latitude + '&longitude=' + item.longitude }) }, clickItem: function(options) { console.log('点击', options) let isShow = this.tabs[this.tabIndex].status == 4 ? '1' : '0' uni.navigateTo({ url: '/pages/index/taskDetail?helpOrderId=' + options.id + '&isShow=' + isShow }) }, goNav(e) { uni.navigateTo({ url:e }) } } } </script> <style lang="scss"> /* sticky生效条件: 1、父元素能overflow:hidden或者overflow:auto属性。(mescroll-body设置:sticky="true"即可, mescroll-uni本身没有设置overflow) 2、必须指定top、bottom、left、right4个值之一,否则只会处于相对定位 3、父元素的高度能低于sticky元素的高度 4、sticky元素仅在其父元素内生效,所以父元素必须是 mescroll */ .sticky-tabs { z-index: 990; position: sticky; top: var(--window-top); // background-color: #fff; } // 使用mescroll-uni,则top为0 .mescroll-uni, /deep/.mescroll-uni { .sticky-tabs { top: 0; } } .demo-tip { padding: 18upx; font-size: 24upx; text-align: center; } </style>将给定代码简化代码并将风格改为浅色风格后的代码。将里面的图片地址全换成https://dummyimage.com/600x400/#fba281,并样式修改简单,单位变成px
11-19
mescroll-uni是一个基于uni-app框架的下拉刷新和上拉加载的插件。它提供了一种简单、灵活的方式来实现页面的滚动加载效果。 使用mescroll-uni,你需要按照以下步骤进行操作: 1. 首先,你需要在你的uni-app项目中安装mescroll-uni插件。你可以使用npm命令来安装,执行以下命令: ``` npm install mescroll-uni ``` 2. 在你的页面中引入mescroll-uni插件。可以在需要使用滚动加载的页面的`<template>`中引入mescroll-uni的组件,例如: ``` <template> <view> <mescroll-uni></mescroll-uni> </view> </template> ``` 3. 在你的页面的`<script>`中引入mescroll-uni组件,并配置相应的参数。例如: ``` <script> import MescrollUni from 'mescroll-uni' export default { components: { MescrollUni }, data() { return { mescrollOptions: { down: { use: true, callback: this.downCallback }, up: { use: true, callback: this.upCallback } } } }, methods: { downCallback() { // 下拉刷新的回调函数 // 执行刷新逻辑 }, upCallback() { // 上拉加载的回调函数 // 执行加载更多逻辑 } } } </script> ``` 4. 根据你的需求,实现对应的下拉刷新和上拉加载的逻辑处理。在`data`中配置`mescrollOptions`对象,通过`down`和`up`属性来配置下拉刷新和上拉加载的回调函数。 这样,你就可以使用mescroll-uni插件实现下拉刷新和上拉加载的效果了。具体的配置和使用方法可以参考mescroll-uni的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值