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"
class="timeline-item"
>
<view class="timeline-dot" :class="{ done: step.done }">
<view class="dot-inner" :class="{ pulse: step.done }"></view>
</view>
<view class="timeline-node" :class="step.done ? 'completed' : 'pending'"></view>
<view class="step-card glass-card" :class="{ done: step.done }">
<text class="step-phase">节点 {{ index + 1 }}</text>
@@ -142,6 +140,10 @@ onMounted(() => {
.target-card {
padding: 40rpx;
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 {
@@ -174,53 +176,59 @@ onMounted(() => {
left: 30rpx;
top: 30rpx;
bottom: 30rpx;
width: 2rpx;
background: linear-gradient(to bottom, #C084FC, rgba(192, 132, 252, 0.2), transparent);
opacity: 0.3;
width: 4rpx;
background: linear-gradient(180deg,
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 {
position: relative;
}
.timeline-dot {
.timeline-node {
position: absolute;
left: -46rpx;
top: 24rpx;
width: 48rpx;
height: 48rpx;
border-radius: 50%;
border: 2rpx solid rgba(255, 255, 255, 0.1);
background: #0F071A;
background: linear-gradient(135deg, #A855F7 0%, #9333EA 100%);
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;
align-items: center;
justify-content: center;
z-index: 2;
}
.timeline-dot.done {
border-color: #C084FC;
box-shadow: 0 0 30rpx rgba(192, 132, 252, 0.4);
.timeline-node.completed {
animation: node-pulse 2s ease-in-out infinite;
}
.dot-inner {
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.1);
@keyframes node-pulse {
0%, 100% {
box-shadow: 0 0 15px rgba(168, 85, 247, 0.4),
inset 0 0 10rpx rgba(255, 255, 255, 0.2);
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 {
background: #C084FC;
}
.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); }
.timeline-node.pending {
background: #0F071A;
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 10px rgba(168, 85, 247, 0.1);
}
.step-card {