javascript - 如何使用 jQuery 在最后一步 (D) 自定义向导中制作单线动画?

标签 javascript jquery html css

我有一个运行良好的向导。但是,当我单击最后一个按钮 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

关于javascript - 如何使用 jQuery 在最后一步 (D) 自定义向导中制作单线动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588520/

相关文章:

javascript - 什么时候使用基础 Vue 实例、Vuex 或 mixin?

javascript - 显示 : none to null using bookmark

javascript - 确定元素是在页面的上方还是下方

php - 通过 php 表单输入 mysql INT 和 DATE 的空值

javascript - 如何通过调用javascript中的函数来获取两个按钮不同的值

javascript - 在 php 循环中写入 javascript 数组时如何将新行转换为实际\n

javascript - jquery id 选择器与变量

javascript - 根据用户的选择动态构建输入元素及其变体

html - CSS3动画(关键帧动画)

javascript - RequireJS: "return this;"并且不是全局的