uniapp:使用mescroll实现左导航,右数据(数据带分页)

news2024/9/23 15:26:45
<template>
	<view class="u-wrap">
		<u-navbar title="复购" :is-back="false" :border-bottom="false" title-color="#282828"></u-navbar>
		<view class="u-menu-wrap">
			<scroll-view scroll-y scroll-with-animation class="u-tab-view menu-scroll-view" :scroll-top="scrollTop">
				<view v-for="(item,index) in navList" :key="index" class="u-tab-item" :class="[current==index ? 'u-tab-item-active' : '']"
				 :data-current="index" @tap.stop="swichMenu(index,item.id)">
					<text class="u-line-1">{{item.name}}</text>
				</view>
			</scroll-view>
			<mescroll-uni ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :fixed="true" :top="mescrollTop" class="mescroll">
				<view class="right-box">
					<view class="page-view">
						<view class="class-item">
							<view class="item-container">
								<view class="thumb-box" v-for="(item, index) in goodsList" :key="index" @click="$go(2,'/pages/mall/goodsDetail?goods_id='+item.id)">
									<image class="item-menu-image" :src="item.image" mode=""></image>
									<view class="fsz-26 u-line-1 mb-10">{{item.title}}</view>
									<view class="">
										<text class="fsz-22 color-red"></text>
										<text class="fsz-28 color-red">{{item.price}}</text>
									</view>
								</view>
							</view>
						</view>
					</view>
				</view>
			</mescroll-uni>
		</view>
	</view>
</template>

<script>
	let systemInfo = uni.getSystemInfoSync();
	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
	export default {
		mixins: [MescrollMixin], // 使用mixin
		data() {
			return {
				scrollTop: 0, //tab标题的滚动条位置
				current: 0, // 预设当前项的值
				menuHeight: 0, // 左边菜单的高度
				menuItemHeight: 0, // 左边菜单item的高度
				navList:[],
				goodsList:[],
				id:'',
				mescrollTop:'44px',
			}
		},
		onLoad() {
			let height = systemInfo.platform == 'ios' ? 44 : 48;
			// #ifndef H5
			this.mescrollTop = systemInfo.statusBarHeight+height+'px';
			// #endif
			// #ifdef H5
			this.mescrollTop = height+'px';
			// #endif
			
			this.$http.post('/api/goodsSortList').then(res=>{
				if(res.code == 200){
					this.navList = res.data
					this.id = this.navList[0].id
					this.mescroll.resetUpScroll();
				}
			})
		},
		methods: {
			/*下拉刷新的回调*/
			downCallback() {
				this.mescroll.resetUpScroll();
			},
			/*上拉加载的回调*/
			upCallback(page) {
				if(this.id == '') return
				this.$http.post('/api/getGoods', {
					page: page.num,
					sort_id:this.id
				}).then(res => {
					if (res.code == 200) {
						let arr = res.data.data;
						if (page.num === 1) this.goodsList = [];
						this.goodsList = this.goodsList.concat(arr);
						this.$nextTick(() => {
							this.mescroll.endSuccess(arr.length)
						})
					}
				}).catch((e) => {
					this.mescroll.endErr();
				});
			},
			// 点击左边的栏目切换
			async swichMenu(index,id) {
				if(index == this.current) return ;
				this.id = id
				this.mescroll.resetUpScroll();
				this.current = index;
				// 如果为0,意味着尚未初始化
				if(this.menuHeight == 0 || this.menuItemHeight == 0) {
					await this.getElRect('menu-scroll-view', 'menuHeight');
					await this.getElRect('u-tab-item', 'menuItemHeight');
				}
				// 将菜单菜单活动item垂直居中
				this.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;
			},
			// 获取一个目标元素的高度
			getElRect(elClass, dataVal) {
				new Promise((resolve, reject) => {
					const query = uni.createSelectorQuery().in(this);
					query.select('.' + elClass).fields({size: true},res => {
						// 如果节点尚未生成,res值为null,循环调用执行
						if(!res) {
							setTimeout(() => {
								this.getElRect(elClass);
							}, 10);
							return ;
						}
						this[dataVal] = res.height;
					}).exec();
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-wrap {
		height: calc(100vh - var(--window-bottom));
		display: flex;
		flex-direction: column;
	}

	.u-search-box {
		padding: 18rpx 30rpx;
	}

	.u-menu-wrap {
		flex: 1;
		display: flex;
		overflow: hidden;
	}

	.u-search-inner {
		background-color: rgb(234, 234, 234);
		border-radius: 100rpx;
		display: flex;
		align-items: center;
		padding: 10rpx 16rpx;
	}

	.u-search-text {
		font-size: 26rpx;
		color: $u-tips-color;
		margin-left: 10rpx;
	}

	.u-tab-view {
		width: 200rpx;
		height: 100%;
	}

	.u-tab-item {
		height: 110rpx;
		background: #fff;
		box-sizing: border-box;
		display: flex;
		align-items: center;
		justify-content: center;
		font-size: 26rpx;
		color: #444;
		font-weight: 400;
		line-height: 1;
	}
	
	.u-tab-item-active {
		position: relative;
		color: #fff;
		font-size: 30rpx;
		font-weight: 600;
		background: #FF770F;
	}
	
	.u-tab-item-active::before {
		content: "";
		position: absolute;
		border-left: 4px solid #FF770F;
		height: 32rpx;
		left: 0;
		top: 39rpx;
	}

	.u-tab-view {
		height: 100%;
	}
	.right-box{
		width: 550rpx;
	}
	/deep/.mescroll{
		width: 550rpx;
		border: 1px solid red;
		.mescroll-uni{
			width: 550rpx;
			right: 0;
			left: auto;
		}
	}
	.page-view {
		padding-bottom: 1rpx;
	}
	
	.class-item {
		margin-bottom: 30rpx;
	}
	

	.item-container {
		display: flex;
		flex-wrap: wrap;
	}
	
	.thumb-box {
		width: 240rpx;
		height: 335rpx;
		margin-top: 20rpx;
		margin-left: 25rpx;
		background: #fff;
		border-radius: 10rpx;
		padding: 20rpx;
	}
	
	.item-menu-image {
		display: block;
		margin: 0 auto 15rpx;
		width: 204rpx;
		height: 204rpx;
	}
</style>

mescroll-uni 需要定位
兼容H5 APP 小程序
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio下安装引入Boost库

背景&#xff1a; 在 Win 上通过 Visual Studio 运行 c 代码&#xff0c;引入头文件 #include <boost/...>&#xff0c;显式无法打开&#xff0c;需要手动下载boost并进行配置。 1、下载boost Boost官网&#xff1a;Boost Downloads 下载boost&#xff0c;解压&#xf…

2024年高职物联网实验室建设及物联网实训平台整体解决方案

随着物联网技术的蓬勃发展&#xff0c;其在各行业的应用日益广泛&#xff0c;对具备物联网专业技能的高素质人才需求也急剧增加。为了满足这一市场需求&#xff0c;高职院校作为技能型人才培养的重要阵地&#xff0c;亟需加强物联网专业的建设。本文旨在提出《2024年高职物联网…

STM32基础篇:EXTI × 事件 × EXTI标准库

EXTI EXTI简介 EXTI&#xff1a;译作外部中断/事件控制器&#xff0c;STM32的众多片上外设之一&#xff0c;能够检测外部输入信号的边沿变化并由此产生中断。 例如&#xff0c;在检测按键时&#xff0c;按键按下时会使电平产生翻转&#xff0c;因此可以使用EXTI来读取按下时…

ChatGPT摆脱“AI味”:全面提升写作质感

ChatGPT在各种写作、创作场景都发挥了很大的价值&#xff0c;即使中文语料库占比不到5%&#xff0c;也能生成流畅的中文文本。但随着使用的深入&#xff0c;大家也逐渐发现了机器生成的内容&#xff0c;往往带有一种僵硬、刻板的“AI味”&#xff0c;尤其在论文、自媒体写作中&…

[RK3308H_Linux] 关于8+2(8路模拟麦克风 + 2路es7243e回采)的调试心得

问题描述 RK3308H 使用8路个模拟麦克风录音&#xff0c;2路用es7243e做回采 解决方案&#xff1a; 首先先调8路模拟麦克风&#xff0c;根据原理图确定使用的是哪路I2S。 以下为dts配置&#xff0c;acodec的属性注释附上。 &acodec {status "okay";rockchip,m…

CCNA-2-V7-模块7–9:可用且可靠的网络考试答案

1.一台启用了DHCP的客户端PC刚刚启动。客户端PC在与DHCP服务器通信时,将在哪两个步骤中使用广播消息?(选两个。) DHCPDISCOVERDHCPACKDHCPOFFERDHCPREQUESTDHCPNAK 2.管理员发出命令:管理员想达到什么目的? Router(config)# interface g0/1 Router(config-if)# ip address …

智充科技营收增速放缓:经营成本飙升,应收账款大幅增长

《港湾商业观察》黄懿 6月10日&#xff0c; XCHG Limited 智能充电有限公司(下称&#xff1a;智充科技)在美国证监会(SEC)更新招股书&#xff0c;拟在美国纳斯达克上市&#xff0c;其股票代码为“XCH”。北京智充科技有限公司为其国内运营主体&#xff08;下称“北京智充科技”…

深入理解Java集合框架:构建高效、灵活的数据管理方案

深入理解Java集合框架&#xff1a;构建高效、灵活的数据管理方案 引言 Java集合框架&#xff08;Java Collections Framework, JCF&#xff09;是Java语言提供的一套用于表示和操作集合的统一架构。它包含了一系列的接口和类&#xff0c;用于存储和操作对象集合&#xff0c;如…

两个视频怎么剪辑成一个视频?3个方法分享

两个视频怎么剪辑成一个视频&#xff1f;将两个视频剪辑成一个视频&#xff0c;是现代数字内容创作中的高频需求&#xff0c;它不仅简化了素材管理&#xff0c;还能通过创意剪辑提升作品连贯性与表现力。通过精心编排&#xff0c;两个视频片段可以无缝融合&#xff0c;讲述更完…

DolphinScheduler本地安装部署与远程任务调度管理实践应用

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

MES系统与其他系统的集成:提升制造业智能化的关键路径

在当今高度竞争的制造业环境中&#xff0c;企业对于生产效率、质量控制、资源优化以及快速响应市场变化的需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接企业计划层与车间控制层的重要桥梁&#xff0c;其在提升生产透明度和优化生产流程方面发挥着不可替代的作…

DOM元素可编辑自定义样式获取编辑后的数据

内容比较多&#xff0c;好好看看&#xff0c;收获匪浅 前言&#xff1a;有这么一个场景&#xff0c;比如一个dom元素是可以编辑的&#xff0c;并且编辑样式得自己写一下&#xff0c;这时候我们考虑单独写一套div来控制编辑样式和编辑的内容。内部有很多的span节点需要渲染&…

elasticsearch 查询超10000的解决方案

前言 默认情况下&#xff0c;Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。 但是我们 在实际工作过程中时常会遇到 需要深度分页&#xff0c;以及查询批量数据更新的情况 问题&#xff1a;当请求form size >10000 时&#xff0c…

Linux环境下Oracle 11g的离线安装与配置历程

在成功体验了 Windows 版本的Oracle 11g 后&#xff0c;这几天心血来潮&#xff0c;决定再挑战一下Linux 环境下的安装&#xff0c;特别是在考虑到部门内部虚拟机无法联网的情况下&#xff0c;我选择了在CentOS 7上进行离线安装。这次安装之旅&#xff0c;主要参考了下面大佬的…

异步日志:性能优化的金钥匙

一、背景 2024 年 4 月的一个宁静的夜晚&#xff0c;正当大家忙完一天的工作准备休息时&#xff0c;应急群里“咚咚咚”开始报警&#xff0c;提示我们余利宝业务的赎回接口成功率下降。 通过 Monitor 监控发现&#xff0c;该接口的耗时已经超过了网关配置的超时阈值(2s)&#…

【验收支撑】软件系统验收计划书(直接套用原件doc)

编写软件验收计划是软件开发过程中的一个关键步骤&#xff0c;其重要性体现在以下几个方面&#xff1a; 明确验收标准&#xff1a;软件验收计划详细列出了验收的标准、测试方法、测试环境等&#xff0c;确保所有相关人员对验收的期望和要求有清晰的认识。这有助于避免在验收阶段…

JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)

文章目录 官方文档official documents官方文件官方文件official documentsJSON介绍JSON快速入门JSON对象和字符串对象转换应用案例注意事项和细节 JSON在java中使用说明JSON在Java中应用场景应用实例 Ajax基本介绍Ajax是什么Ajax经典应用场景 Ajax原理示意图传统的web应用Ajax原…

用微客云搭建一套外卖霸王餐系统赚CPS佣金

在当下数字化快速发展的时代&#xff0c;外卖行业作为餐饮业的重要分支&#xff0c;正在经历着前所未有的变革。为了满足市场需求&#xff0c;提高用户体验和增加商户收入&#xff0c;越来越多的外卖平台开始寻求创新&#xff0c;其中&#xff0c;搭建一套高效、稳定且功能丰富…

昇思25天学习打卡营第19天|CycleGAN图像风格迁移互换

CycleGAN图像风格迁移互换 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将…

jenkins打包java项目报错Error: Unable to access jarfile tlm-admin.jar

jenkins打包boot项目 自动重启脚本失败 查看了一下项目日志报错&#xff1a; Error: Unable to access jarfile tlm-admin.jar我检查了一下这个配置&#xff0c;感觉没有问题&#xff0c;包可以正常打&#xff0c; cd 到项目目录下面&#xff0c;手动执行这个sh脚本也是能正常…