uniapp自定义进度条(vue或原生开发修改html标签即可)

1.创建滚动条标签

html 复制代码
<view class="progress-container">
	<view class="progress-bar gradient" :style="{ width: progress + '%' }"></view>
</view>

2.增加滚动条样式

css 复制代码
/* 进度条容器 */
.progress-container {
	width: 100%;
	height: 20rpx;
	background-color: #f5f5f5;
	border-radius: 20rpx;
	overflow: hidden;

	.progress-bar {
		height: 100%;
		background: linear-gradient(90deg,
		    #ff2d55 0%,
		    #ff9500 25%,
			#ffcc00 50%,
			#4cd964 75%,
			#5ac8fa 100%);
			background-size: 200% 100%;
			animation: gradient-animation 3s ease infinite;
	}
}

3.data创建字段progress 、animationId

progress :用来动态修改滚动条滚动距离

animationId : 防止重复启动

4.根据时间控制进度条速度

javascript 复制代码
animateProgress() {
	if (this.animationId) return;  //防止重复启动
	const startTime = performance.now();  //获取时间源
	let current = this.progress;
	let duration = 3000  //总时间 3秒

	const step = (e) => {
		const elapsed = e - startTime;
		this.progress = (Math.min(elapsed / duration, 1)) * 100;
		if (this.progress < 100) {
			this.animationId = requestAnimationFrame(step);
		} else {
			console.log('进度完成!');
		}
	};
	this.animationId = requestAnimationFrame(step);
}

5.完整代码

html 复制代码
<template>
    <view class="progress-container">
		<view class="progress-bar gradient" :style="{ width: progress + '%' }"></view>
	</view>
</template>
<script>
    export default {
        data() {
			return {
                progress : 0,
                animationId : null
            }
        },
        onLoad(){
            this.animateProgress()
        },
        methods:{
            animateProgress() {
	            if (this.animationId) return;
	                const startTime = performance.now();
	                let current = this.progress;
	                let duration= 3000

	                const step = (e) => {
		                const elapsed = e - startTime;
		                this.progress = (Math.min(elapsed / duration, 1)) * 100;
		                if (this.progress < 100) {
			                this.animationId = requestAnimationFrame(step);
		                } else {
			                console.log('进度完成!');
		                }
	                };
	                this.animationId = requestAnimationFrame(step);
                }
        }
    }
</script>
<style lang="scss" scoped>
/* 进度条容器 */
.progress-container {
	width: 100%;
	height: 20rpx;
	background-color: #f5f5f5;
	border-radius: 20rpx;
	overflow: hidden;

	.progress-bar {
		height: 100%;
		background: linear-gradient(90deg,
		    #ff2d55 0%,
		    #ff9500 25%,
			#ffcc00 50%,
			#4cd964 75%,
			#5ac8fa 100%);
			background-size: 200% 100%;
			animation: gradient-animation 3s ease infinite;
	}
}
</style>

6.样式

7.扩展(暂停/继续)

isPaused:控制是否暂停 false为暂停 true为开始 初始化false

pauseStartTime:暂停时间

accumulatedPauseTime:暂停时间长度

开始
javascript 复制代码
this.accumulatedPauseTime = performance.now()
requestAnimationFrame(this.animateProgress)
暂停/继续
javascript 复制代码
isPausedBtn(){
				if (!this.animationId) return;
				if(!this.isPaused){
					this.isPaused = true
					this.pauseStartTime = performance.now();
					cancelAnimationFrame(this.animationId);
				}else{
					this.isPaused = false
					this.accumulatedPauseTime += performance.now() - this.pauseStartTime;
					this.animationId = requestAnimationFrame(this.animateProgress);
					
				}
				
			},
animateProgress(e) {
	            if (this.isPaused) return;
	                let current = this.progress;
	                let duration= 3000
                    const elapsed = e - this.accumulatedPauseTime;
		            this.progress = (Math.min(elapsed / duration, 1)) * 100;
		            if (this.progress < 100) {
			            this.animationId = requestAnimationFrame(this.animateProgress);
		            } else {
			            console.log('进度完成!');
		            }
	                this.animationId = requestAnimationFrame(this.animateProgress);
                }
相关推荐
遗憾随她而去.7 小时前
uniapp App平台 真机运行
uni-app
愚者Pro10 小时前
Flutter Widget组件学习(专为 Uniapp 转 Flutter 定制)
vue.js·学习·flutter·uni-app
粉末的沉淀2 天前
uniapp:带参数回到上一页
uni-app
华玥作者2 天前
从“碎片化”到“资产化”:Vue3 + UniApp 组件库的进化论
ui·uni-app·vue·组件库
Crystal3282 天前
App wgt 热更新 — 开发笔记(uniapp)
前端·uni-app·app
大阳光男孩2 天前
【UniApp小程序开发】解决无法使用Vue自定义指令的完美替代方案:权限组件封装
前端·vue.js·uni-app
2501_915918412 天前
Linux 上生成 AppStoreInfo.plist,App Store 上架 iOS
android·ios·小程序·https·uni-app·iphone·webview
只要微微辣2 天前
Uniapp 微信小程序 Canvas画框标注:拖拽缩放全攻略
前端·微信小程序·uni-app·canvas·canva可画
我命由我123452 天前
Dart - 数字类型、布尔类型、列表类型
android·开发语言·flutter·ios·uni-app·android jetpack·移动端
一朵盆栽2 天前
uni-app用Windows系统开发iOS端
ios·uni-app·cocoa