uniapp实现图片预览,懒加载,下拉刷新等

实现的功能

  1. 懒加载 lazy-load --对小程序起效果
  2. 图片预览
  3. 下拉刷新
  4. 触底加载更多
  5. 底下设置安全距离env(safe-area-inset-bottom)
  6. 右下角固定图标置顶及刷新功能

效果如图:



预览

代码

javascript 复制代码
<template>
	<view class="image-classify">
		<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="button" activeColor="#4cd964"></uni-segmented-control>
	</view>
	<view class="image-list">
		<view v-for="(item, index) in imageList" :key="item._id" class="image-card">
			<image lazy-load :src="item.url" mode="widthFix" @click="previewImage(index)"></image>
			<view class="text">{{ item.author }}</view>
		</view>
	</view>
	<view class="fixed-button-wrap">
		<view class="fixed-button" @click="goRefresh">
			<uni-icons type="refreshempty" size="30" color="#444950"></uni-icons>
		</view>
		<view class="fixed-button" @click="goTop">
			<uni-icons type="arrow-up" size="30" color="#444950"></uni-icons>
		</view>
	</view>
	<!-- 加载更多 -->
	<uni-load-more status="loading" :content-text="contentText" class="load-more" />
</template>

<script setup>
	let imageList = ref([])
	let current = ref(0)
	const classify = [ { key: 'all', name: '全部' }, { key: 'dog', name: '狗狗' }, { key: 'cat', name: '猫咪' } ]
	const items = computed(() => classify.map(item => item.name))
	const contentText = {
					contentrefresh: '加载中',
					contentnomore: '没有更多'
				}
	uni.showLoading({
		title: '加载中'
	})
	function getImageList() {
		return uni.request({
			url:"https://tea.qingnian8.com/tools/petShow",
			data: {
				size: 5,
				type: classify[current.value].key
			},
			header:{
				'access-key':"zhaohui6968613"
			},
			success(res) {
				console.log(res)
				imageList.value = [...imageList.value, ...res.data.data]
			},
			fail(err) {
				console.log('err', err)
			},
			complete() {
				uni.hideLoading();
			}
		})
	}
	
	getImageList()
	
	function onClickItem(e) {
		current.value = e.currentIndex
		imageList.value = []
		getImageList()
	}
	// 下拉刷新
	onPullDownRefresh(async() => {
		imageList.value = []
		await getImageList()
		uni.stopPullDownRefresh()
	})
	// 触底加载
	onReachBottom(() => {
		getImageList()
	})
	
	
	// 图片预览
	function previewImage(index) {
		const urls = imageList.value.map(item => item.url)
		uni.previewImage({
			current: index,
			urls
		})
	}
	async function goRefresh() {
		uni.startPullDownRefresh()
		imageList.value = []
		await getImageList()
		uni.stopPullDownRefresh()
	}
	function goTop() {
		uni.pageScrollTo({
			scrollTop: 0
		})
	}
</script>

<style lang="scss" scoped>
	.image-classify {
		padding: 50rpx;
	}
	.image-list {
		.image-card {
			margin: 50rpx;
			box-shadow: 0 4rpx 4rpx 10rpx #eee;
			.text {
				padding: 10rpx;
				text-align: right;
			}
		}
	}
	.fixed-button-wrap {
		position: fixed;
		padding-bottom: env(safe-area-inset-bottom);
		right: 50rpx;
		bottom: 0;
		display: flex;
		flex-direction: column;
		.fixed-button {
			display: flex;
			width: 100rpx;
			height: 100rpx;
			justify-content: center;
			align-items: center;
			margin: 10rpx;
			border: 1px solid #eee;
			border-radius: 50%;
			background-color: #fff;
		}
	}
	.load-more {
		height: calc(env(safe-area-inset-bottom) + 50rpx);
	}
</style>

说明

1.uni-ui 使用了图标,加载更多,上面tab按钮

2.下拉刷新不起效果记得改一下配置

3.https在小程序会报错

目前解决改一下小程序配置,如图 (后期打包时候需要配置上地址)

相关推荐
MY_TEUCK1 天前
【AI 应用】前端接口联调工程化:把 Swagger 接入沉淀成可复用 Skill
前端·人工智能·uni-app·状态模式
上架ipa1 天前
uniapp打包ios配置、申请证书、测试和上架综合教程
uni-app
00后程序员张1 天前
完整指南 iOS App上架到App Store的步骤详解
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
hhzz1 天前
记录微信小程序tabbar不显示问题:uni-app Vue 3 自定义 tabBar 不渲染
vue.js·微信小程序·uni-app
存在的五月雨1 天前
uniapp 一些组件的使用
java·前端·uni-app
久爱@勿忘1 天前
uniappH5跳转小程序
前端·小程序·uni-app
郑州光合科技余经理2 天前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
启山智软2 天前
前沿主流技术栈商城系统(Java JDK21 + Vue3 + Uniapp)
java·开发语言·uni-app
WeirdOwl2 天前
uniapp 嵌入外部h5 报错/收不到消息
uni-app
敲代码的鱼哇4 天前
发送短信/拨打电话/获取联系人能力 UTS 插件(cz-sms)
android·前端·ios·uni-app·安卓·harmonyos·鸿蒙