手搓一个简简单单进度条

懂得都懂就不细细解剖,直接上代码

也就是太无聊,心血来潮搓一个小玩意儿

div盒子

ini 复制代码
<div class="progress-box">
	<div class="progress-bar" :style="{ width: `${progress.width}%` }">
	<div class="progress-bar-inner">
		<div class="progress-light"></div>
	</div>
	</div>						</div>
							<div class="progress-text">
	<span class="num" ref="countDemo"
	:style="{ left: `calc(${progress.width}% - ${Amountspent < 99 ? 66 :Amountspent > 999 && progress.width < 50 ? 40 : 70}px)` }">
	$ {{ Amountspent }}
	</span>
							</div>

js

xml 复制代码
<script setup>
	import { onMounted,ref } from "vue"
        //进度条相关参数
        const progress = ref({
		width: 0,
		startValue: 0,
		endValue: 0
	})
        const Amountspent = ref(0)
        	const progressVal = (start = 0, end = 0) => {
		const startVal = Number(start ?? 0) || 0
		const endVal = Number(end ?? 0) || 0
		return {
			width: endVal > 0 ? Math.min(Math.max((startVal / endVal) * 100, 0), 100).toFixed(2) : 0,
			startValue: startVal,
			endValue: endVal
		}
	}
        
        	onMounted(() => {
                //接口请求获取参数
		getprogressInfo({}, (res) => {
			if (!res) return

			if (res && res.data) {
let { totaAmount, amountspent } = res.data
Amountspent.value=amountspent?amountspent:0
	progress.value = progressVal(amountspent, totaAmount)//进度条


			}

		})

	})
</script>

css

xml 复制代码
<style lang="scss">
.progress-box {
			position: relative;
			border-radius: 500px;
			background: rgba(255, 255, 255, 0.05);
			padding: 2px;
			height: 10px;
			margin-bottom: 7px;

			.progress-value {
				position: absolute;
				left: 50%;
				top: 50%;
				transform: translate(-50%, -50%);
				color: #fff;
				text-align: center;
				font-size: 12px;
				font-weight: 800;
				line-height: 1;
				text-shadow: 0 2px 0 rgba(0, 0, 0, 0.1);
			}

			.progress-bar {
				height: 100%;
				width: 0;
				border-radius: 500px;
				background: #20ce2e;
				position: relative;
				box-shadow:
					0 0 3px 0 #00ff9d inset,
					0 0 7.5px 0 rgba(32, 206, 46, 0.6);

				.progress-bar-inner {
					position: absolute;
					right: -11px;
					top: -11px;
				}

				.progress-light {
					width: 30px;
					height: 30px;
					position: relative;
					border-radius: 50%;
					background-color: rgba(205, 222, 221, 0.1);

					&::before {
						content: "";
						position: absolute;
						top: 50%;
						left: 50%;
						transform: translate(-50%, -50%);
						width: 18px;
						height: 18px;
						border-radius: 50%;
						background-color: rgba(205, 222, 221, 0.1);
					}

					&::after {
						content: "";
						position: absolute;
						top: 50%;
						left: 50%;
						transform: translate(-50%, -50%);
						width: 10px;
						height: 10px;
						border-radius: 50%;
						background-color: #e7fefd;
					}
				}
			}
		}
                
                
		.progress-text {
			position: relative;
			/* padding: 2px; */
			height: 10px;
			margin-bottom: 10px;
			margin-right: 14px;

			.num {
				font-weight: 800;
				font-style: ExtraBold;
				font-size: 12px;
				line-height: 1.5;
				position: absolute;
				color: rgba(172, 188, 208, 1);
				width: 80px;
				display: inline-block;
				text-align: right;
			}
		}
相关推荐
Shaneyxs9 分钟前
从 0 到 1 实现CloudBase云开发 + 低代码全栈开发活动管理小程序(13)
前端
半山烟雨半山青10 分钟前
微信内容emoji表情包编辑器 + vue3 + ts + WrchatEmogi Editor
前端·javascript·vue.js
码途潇潇11 分钟前
Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透
前端·javascript
zmirror13 分钟前
Monorepo 在 Docker 中的构建方案方案
前端
用户479492835691524 分钟前
node_modules 太胖?用 Node.js 原生功能给依赖做一次大扫除
前端·后端·node.js
_Kayo_35 分钟前
TypeScript 学习笔记2
前端·javascript·typescript
海纳百川本尊7606436 分钟前
Flutter框架核心原理深度解析
前端
Shaneyxs37 分钟前
从 0 到 1 实现CloudBase云开发 + 低代码全栈开发活动管理小程序(12)
前端
渔_1 小时前
uni-app 图片预览 + 长按保存,超实用!
前端