feat: 修复路径页面时间轴节点发光和脉冲动画(原型还原 70%→90%)
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user