我有个巫师工作得很好。但是,当我单击最后一个按钮D
时,它并没有设置为单行动画。它是多步骤工作的。
$(document).ready(function() {
$('.pPtn').click(function() {
$(this).parent('li').prevAll().addClass('act')
$(this).parent('li').addClass('act');
});
});
.w-steps {
width: 1170px;
}
.w-steps ul li {
height: 3px;
background: #ccc;
width: 150px;
list-style: none;
margin: 2px;
float: left;
position: relative;
}
.w-steps ul li::after {
position: absolute;
height: 3px;
background: blue;
width: 0px;
top: 0px;
left: 0px;
content: '';
transition: all 0.45s;
}
.w-steps ul li.act::after {
width: 100%;
}
.w-steps ul li span.pPtn {
position: absolute;
top: -15px;
right: -10px;
border-radius: 50%;
width: 30px;
height: 30px;
background: blue;
color: #fff;
text-align: center;
z-index: 1;
cursor: pointer;
padding: 2px 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="w-steps">
<ul>
<li><span class="pPtn">A</span></li>
<li><span class="pPtn">B</span></li>
<li><span class="pPtn">C</span></li>
<li><span class="pPtn">D</span></li>
</ul>
</div>
最佳答案
问题是,您同时设置所有元素的动画。相反,您需要根据它们的索引和动画运行所需的时间来错开它们。这可以通过循环中的setTimeout()
调用来完成。试试这个:
$(document).ready(function() {
$('.pPtn').click(function() {
$(this).parent('li').prevAll().addBack().each(function(i) {
var $li = $(this);
setTimeout(function() {
$li.addClass('act');
}, i * 450);
})
});
});
.w-steps {
width: 1170px;
}
.w-steps ul li {
height: 3px;
background: #ccc;
width: 100px;
list-style: none;
margin: 2px;
float: left;
position: relative;
}
.w-steps ul li::after {
position: absolute;
height: 3px;
background: blue;
width: 0px;
top: 0px;
left: 0px;
content: '';
transition: all 0.45s;
}
.w-steps ul li.act::after {
width: 100%;
}
.w-steps ul li span.pPtn {
position: absolute;
top: -15px;
right: -10px;
border-radius: 50%;
width: 30px;
height: 30px;
background: blue;
color: #fff;
text-align: center;
z-index: 1;
cursor: pointer;
padding: 2px 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="w-steps">
<ul>
<li><span class="pPtn">A</span></li>
<li><span class="pPtn">B</span></li>
<li><span class="pPtn">C</span></li>
<li><span class="pPtn">D</span></li>
</ul>
</div>
请注意,我只缩小了
li
的宽度,使其更适合片段。JS逻辑适用于任何宽度li
。