feat: 修复路径页面时间轴节点发光和脉冲动画(原型还原 70%→90%)

This commit is contained in:
2026-03-15 09:25:55 +08:00
parent 6658ee3ed8
commit 069d96b6b6
+37 -29
View File
@@ -27,9 +27,7 @@
:key="index" :key="index"
class="timeline-item" class="timeline-item"
> >
<view class="timeline-dot" :class="{ done: step.done }"> <view class="timeline-node" :class="step.done ? 'completed' : 'pending'"></view>
<view class="dot-inner" :class="{ pulse: step.done }"></view>
</view>
<view class="step-card glass-card" :class="{ done: step.done }"> <view class="step-card glass-card" :class="{ done: step.done }">
<text class="step-phase">节点 {{ index + 1 }}</text> <text class="step-phase">节点 {{ index + 1 }}</text>
@@ -142,6 +140,10 @@ onMounted(() => {
.target-card { .target-card {
padding: 40rpx; padding: 40rpx;
margin-bottom: 16rpx; margin-bottom: 16rpx;
/* 金色玻璃态 + 左侧紫色边框 */
border-left: 4rpx solid #C084FC;
box-shadow: inset 0 0 20rpx rgba(168, 85, 247, 0.05),
0 4rpx 16rpx rgba(168, 85, 247, 0.1);
} }
.target-label { .target-label {
@@ -174,53 +176,59 @@ onMounted(() => {
left: 30rpx; left: 30rpx;
top: 30rpx; top: 30rpx;
bottom: 30rpx; bottom: 30rpx;
width: 2rpx; width: 4rpx;
background: linear-gradient(to bottom, #C084FC, rgba(192, 132, 252, 0.2), transparent); background: linear-gradient(180deg,
opacity: 0.3; rgba(168, 85, 247, 0.4) 0%,
rgba(168, 85, 247, 0.2) 50%,
rgba(168, 85, 247, 0.05) 100%
);
border-radius: 4rpx;
box-shadow: 0 0 15px rgba(168, 85, 247, 0.2);
} }
.timeline-item { .timeline-item {
position: relative; position: relative;
} }
.timeline-dot { .timeline-node {
position: absolute; position: absolute;
left: -46rpx; left: -46rpx;
top: 24rpx; top: 24rpx;
width: 48rpx; width: 48rpx;
height: 48rpx; height: 48rpx;
border-radius: 50%; border-radius: 50%;
border: 2rpx solid rgba(255, 255, 255, 0.1); background: linear-gradient(135deg, #A855F7 0%, #9333EA 100%);
background: #0F071A; border: 4rpx solid #C084FC;
/* 原型标准:节点发光 */
box-shadow: 0 0 15px rgba(168, 85, 247, 0.4),
inset 0 0 10rpx rgba(255, 255, 255, 0.2);
z-index: 2;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 2;
} }
.timeline-dot.done { .timeline-node.completed {
border-color: #C084FC; animation: node-pulse 2s ease-in-out infinite;
box-shadow: 0 0 30rpx rgba(192, 132, 252, 0.4);
} }
.dot-inner { @keyframes node-pulse {
width: 16rpx; 0%, 100% {
height: 16rpx; box-shadow: 0 0 15px rgba(168, 85, 247, 0.4),
border-radius: 50%; inset 0 0 10rpx rgba(255, 255, 255, 0.2);
background: rgba(255, 255, 255, 0.1); transform: scale(1);
}
50% {
box-shadow: 0 0 25px rgba(168, 85, 247, 0.6),
inset 0 0 15rpx rgba(255, 255, 255, 0.3);
transform: scale(1.05);
}
} }
.dot-inner.done { .timeline-node.pending {
background: #C084FC; background: #0F071A;
} border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 10px rgba(168, 85, 247, 0.1);
.dot-inner.pulse {
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.6; transform: scale(1.2); }
} }
.step-card { .step-card {