当前位置: 首页 > 知识库问答 >
问题:

我如何只需点击一次就能增加1%的百分比

郎建章
2023-03-14

我希望百分比每秒增加1%,只需点击增加按钮和减少按钮相同,但百分比每秒减少-1%。现在我的代码是正确的,但它需要在增加按钮上多次点击以达到100%,我只需要一次点击,它会每秒增加1%,直到达到100%,如果点击减少按钮,每秒减少1%。

<div class="container">
    <div class="progress">
        <div id = "number" class="progress-bar" role="number" style="width: 0%;" aria-precentnow="0" aria-precentmin="0" aria-precentmax="100" id="number">0%</div>
    </div>

    <br>
    <button onclick="increase()">Increase</button>
    <button onclick="decrease()">Decrease</button>
    <button onclick="reset()">Reset</button>

    <p id="precent"> </p>

</div>
<script>

function value() {
    var x = document.getElementById("number").getAttribute("aria-precentnow");
    return x;
}

function rvalue(precent) {
    document.getElementById("number").setAttribute("aria-precentnow", precent);  
    document.getElementById("number").setAttribute("style", "width: " + precent + "%;");
    document.getElementById("number").innerHTML = (precent + "%");
}


function increase() {
    var i = value();
    if (i <= 100) {
        i++;
        rvalue(i);
    } else {
        alert("Congrats you hit 100%");
    }
}

function decrease() {
    var x = value();
    rvalue(x - 1);
}

function reset() {
    var y = value();
    rvalue(y = 0);
}
</script>

共有2个答案

夏侯兴学
2023-03-14

调用现有增减值的递归超时函数可以起到以下作用:

此处的IncreaseAuto/IndreaseAuto函数将调用正常的增加/减少,但也会在1秒后再次调用自身。

您还可以在任何地方使用cleartimeout(autoTimeout)(例如,当您达到100%或重置时)来停止自动进行。

function increaseAuto() {
  // Clear any existing timeout (As this would carry on when you try to switch direction)
  clearTimeout(autoTimeout)
  // Run the normal increase function
  increase()
  // Set a timeout to trigger this again in 1 second
  autoTimeout = setTimeout(increaseAuto, 1000)
}

完整示例:

null

// - New code
// This variable is used to keep track of the timeout
var autoTimeout = null

// This function will trigger the increase, but also call itself again after 1 second
function increaseAuto() {
  clearTimeout(autoTimeout)
  increase()
  autoTimeout = setTimeout(increaseAuto, 1000)
}

// This is the same as the above, but for decrease
function decreaseAuto() {
  clearTimeout(autoTimeout)
  decrease()
  autoTimeout = setTimeout(decreaseAuto, 1000)
}

// - Existing code with minor clearTimeouts added:
function value() {
  var x = document.getElementById("number").getAttribute("aria-precentnow");
  return x;
}

function rvalue(precent) {
  document.getElementById("number").setAttribute("aria-precentnow", precent);
  document.getElementById("number").setAttribute("style", "width: " + precent + "%;");
  document.getElementById("number").innerHTML = (precent + "%");
}

function increase() {
  var i = value();
  if (i <= 100) {
    i++;
    rvalue(i);
  } else {
    alert("Congrats you hit 100%");
    // Once you hit 100% stop ticking upwards
    clearTimeout(autoTimeout)
  }
}

function decrease() {
  var x = value();
  rvalue(x - 1);
}

function reset() {
  var y = value();
  rvalue(y = 0);
  clearTimeout(autoTimeout)
}
<div class="container">
  <div class="progress">
    <div id="number" class="progress-bar" role="number" style="width: 0%;" aria-precentnow="0" aria-precentmin="0" aria-precentmax="100" id="number">0%</div>
  </div>

  <br>
  <button onclick="increaseAuto()">Increase</button>
  <button onclick="decreaseAuto()">Decrease</button>
  <button onclick="reset()">Reset</button>

  <p id="precent"> </p>

</div>
夏青青
2023-03-14

您需要设置ProgressBar属性以及TextContent

null

const progressBar = document.querySelector('.progress > .progress-bar');

const getProgress = () => parseInt(progressBar.getAttribute('aria-precentnow'), 10);

const setProgress = (val) => {
  progressBar.setAttribute('aria-precentnow', val);
  progressBar.textContent = `${val}%`;
  progressBar.style.width = `${val}%`
}

const addProgress = (amount) => {
  const val = getProgress() + amount;
  setProgress(val > 100 ? 100 : val < 0 ? 0 : val);
};

window.increase = () => addProgress(1);
window.decrease = () => addProgress(-1);
window.reset = () => setProgress(0);
.progress-bar {
  background: #F88;
  text-align: right;
  padding: 0.25em;
}
html prettyprint-override"><div class="container">
  <div class="progress">
    <div id="number" class="progress-bar" role="number" style="width: 0%;" aria-precentnow="0" aria-precentmin="0" aria-precentmax="100" id="number">0%</div>
  </div>
  <br>
  <button onclick="increase()">Increase</button>
  <button onclick="decrease()">Decrease</button>
  <button onclick="reset()">Reset</button>
  <p id="precent"> </p>
</div>
 类似资料:
  • 所以我的问题是,当我点击一个radiobutton来添加类“Completed”时,它执行了所要执行的操作,但是当我想要移除它时,我需要点击两次,我不知道为什么。如有任何帮助,我们将不胜感激。谢谢 HTML CSS JavaScript

  • 好的,伙计们。我正在尝试创建一个小费计算器,我遇到了一些问题。问题是当用户输入一个值时,程序会询问(禁用enter按钮)用户是否希望包含提示,因此用户选择是或否。如果选择了其中任何一个,前面的问题就消失了,文字出现“小费包括在内”或“小费不包括在内”。现在,如果用户想要编辑上面的值,按钮将再次被启用,但是如果它点击了一个,它将再次询问用户是否想要包含提示。所以我的问题是,我怎样才能使它使它,无论那

  • 本文向大家介绍jQuery实现按钮只点击一次后就取消点击事件绑定的方法,包括了jQuery实现按钮只点击一次后就取消点击事件绑定的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现按钮只点击一次后就取消点击事件绑定的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的jQuery程序设计有所帮助。

  • 我正试图用react JS呈现一个项目列表。由于我的列表项相对复杂,我创建了一个简单的小提琴来陈述我的问题。 我如何修复新添加项目的渲染时间?或者只是react js的工作方式。 这里是我的主要反应组分简化。 并且ReactStreamPost和ReactStreamActivity在这一点上可以是无状态组件。像

  • 你能看一下我下面的代码吗?每当球没有击中球门区域(这是一场点球大战),我需要将var未命中增加1,但问题是它增加了很多倍,这是跟踪变量值后的输出消息,这样你就可以有一个想法: 这是一个失败1它是一个失败2它是一个失败3它是一个失败4它是一个失败5它是一个失败6它是一个失败7它是一个失败8 8它是一个失败9它是一个失败10等等,我的代码是这样的,我很确定,影响结果所需的线是线阶段。addEventL

  • 本文向大家介绍vue 点击按钮增加一行的方法,包括了vue 点击按钮增加一行的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 不要js,jq里面的方法了。 以上这篇vue 点击按钮增加一行的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。