uniapp小程序实现上下固定中间滑动布局(附源码和实现过程讲解)

前言

上下固定,中间可以上下滑动是移动端中非常常见的布局,实现的过程在本篇记录一下

效果展示:

在这里插入图片描述

实现过程

在移动端中布局主要以flex布局为主,如果不太清楚可以去看看学习一下flex布局
要实现样式,我们先要学会分析布局:
上面是头部,中间是内容,最下面是尾部

在这里插入图片描述

要实现中间可上线滑动,官方给我们提供了scroll-view标签来实现
下面我将实现过程中的关键点和简化版代码附上:

  1. 首先是最外层(头,中间,尾)要实现flex布局,从上往下
  2. 其次是中间内容要实现flex布局,横向排列,自动换行
  3. 然后就是中间部分要实现绝对定位和相对定位,不会对尾部造成影响

实现源码:复制到页面就能查看效果,底部的标签图片我就不放了

<template>
	<view class="body">
		<view class="head"></view>
		<view class="list-wrap">
			<scroll-view scroll-y="true" class="list">
				<view class="list-scroll-view">
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
					<view class="course-card">
						<view>
							<image src="@/static/bg.jpg" mode="widthFix"></image>
						</view>
						<view>uniapp布局</view>
						<view>免费</view>
					</view>
				</view>
			</scroll-view>
		</view>
		
		<view class="tools">
			<view class="tools-item">
				<image src="@/static/icon/index-active.png" mode="widthFix"></image>
				<view>首页</view>
			</view>
			<view class="tools-item">
				<image src="@/static/icon/sort.png" mode="widthFix"></image>
				<view>分类</view>
			</view>
			<view class="tools-item">
				<image src="@/static/icon/cal.png" mode="widthFix"></image>
				<view>课表</view>
			</view>
			<view class="tools-item">
				<image src="@/static/icon/head.png" mode="widthFix"></image>
				<view>我的</view>
			</view>
		</view>
	</view>
</template>

<script>
</script>

<style>
	.body {
		display: flex;
		flex-direction: column;
		height: 100vh;
	}
	.head {
		text-align: center;
		margin-top: 10px;
	}
	.list-wrap {
		/* height: 500px; */
		flex-grow: 1;
		position: relative;
	}
	.list {
		position: absolute;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
	}
	.list-scroll-view {
		display: flex;
		flex-direction: row;
		flex-wrap: wrap;
		justify-content: space-between;
		margin-left: 2vw;
		margin-right: 2vw;
	}
	.course-card {
		width: 47vw;
		margin-top: 10px;
		margin-bottom: 10px;
	}
	.course-card image {
		width: 100%;
		border-radius: 5px;
	}
	.tools {
		display: flex;
		flex-direction: row;
		justify-content: space-between;
	}
	.tools-item {
		width: 45px;
		text-align: center;
		font-size: 14px;
		padding: 20px;
	}
	.tools-item image {
		width: 39px;
	}
</style>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beiyux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值