【问题标题】:Animated output based on single input field基于单个输入字段的动画输出
【发布时间】:2017-03-22 16:40:08
【问题描述】:

我正在尝试对基于单个输入值 * 4.5 计算的输出进行动画处理。计算本身正在工作,但我无法弄清楚如何为值设置动画,我想做的是让输出计数很快达到计算值。我发现 https://codepen.io/shivasurya/pen/FatiB 有我想实现的计数动画,但不知道如何在我的输入和输出字段中实现它,到目前为止我有:

<form id="ewcalc" oninput="updateOutput()"> 
<input name="income" type="number" value="0" />
<output for="income" name="loan">0</output>
</form>

<script type="text/javascript">
function updateOutput() {
var form = document.getElementById("ewcalc");

form.elements["loan"].value=eval(parseInt(form.elements["income"].value) * 4.5);
}
</script>

对我如何实现动画有什么建议吗?我已经尝试了几件事,但都没有工作,并且如果我尝试使用 onsubmit 则会出现错误。

【问题讨论】:

  • 如果你想让它看起来像是在增加一个步骤,而你不能将form.elements["loan"].value直接设置为最终值,你必须使用一个增量来改变它的值,直到你到达值并在答案之间造成延迟。

标签: javascript jquery html forms animation


【解决方案1】:

您可能希望像这样使用requestAnimationFrame

function updateOutput() {
  var income = $("#income").val() * 4.5;
  var output = Number($("#loan").text());

  if (income !== output) {
    if (income > output)
      output += 0.5;
    else if (income < output)
      output -= 0.5;

    $("#loan").text(output);
    requestAnimationFrame(updateOutput);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="ewcalc" oninput="updateOutput()">
  <input id="income" type="number" value="0" />
  <output for="income" id="loan">0</output>
</form>

【讨论】:

  • 我正在尝试递归 setTimeout 方法,但所有内容都已在 requestAnimationFrame 中。与我最初的方法相比,我更喜欢这个解决方案。
  • 谢谢,没有考虑过这个选项。对我来说看起来很不错,会尝试一下。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
相关资源
最近更新 更多