【问题标题】:A button blink effect in vanilla javascriptvanilla javascript中的按钮闪烁效果
【发布时间】:2018-02-28 05:03:24
【问题描述】:

我正在复制一个 simon 游戏原型,我正在尝试在 vanilla js 中编写一个按钮闪烁的函数。

目前我有以下功能:

function blinkColor(color) {
  let colorButton = document.getElementById(color);
  colorButton.style.background = *highlightColor*;  
  setTimeout(() => {colorButton.style.background = *originalColor*}, 1000);
}

我将按钮颜色替换为另一种更亮的颜色,然后在超时后再次将其更改回来。当连续的颜色彼此不同但需要多次闪烁相同颜色(例如“红色”、“红色”、“红色”)时,它可以工作,它不会在闪烁之间留下中断,并且它看起来它只是长时间眨眼。

有没有更好的方法来编写这个功能?

【问题讨论】:

  • 您也可以发布您的 HTML 吗?

标签: javascript css dom


【解决方案1】:

当突出显示的颜色与当前颜色相同时,您可以比较颜色并使用默认颜色:

function blinkColor(color) {
  let colorButton = document.getElementById(color);
  colorButton.style.background = *highlightColor*;
  if(highlightColor == colorButton.style.background){
    setTimeout(() => {colorButton.style.background = *white(i.e.)*}, 1000);
  } else {
    setTimeout(() => {colorButton.style.background = *originalColor*}, 1000);
  }
}

您必须执行比较以检查颜色类型(rgb、rgba、十六进制...),如果您有可能为此使用 css-animation,那就去做吧 :-)

【讨论】:

    【解决方案2】:

    相关代码实际上不在您的问题中。

    听起来你需要关心三个事件:

    1. 一种颜色突出显示
    2. 颜色变暗
    3. 下一个颜色突出显示

    您的问题是 1 和 2 之间的时间等于(或小于)1 和 3 之间的时间(1 秒)。

    您需要增加 1 到 3 之间的时间,以便颜色可以在再次突出显示之前变暗。 1.25 秒可能是个不错的选择。

    【讨论】:

    • @JensPõldme — 这不会改变这个答案。您仍然需要使打开每个灯之间的时间大于打开单个灯然后再次关闭同一灯之间的时间。 (例如,将 1000*i 更改为 1250*i
    • 感谢您的回答!我应该指定上面的函数是另一个 settimeout 中的回调,它为数组中的每种颜色调用。我增加了这个函数的时间,它成功了。
    猜你喜欢
    • 2012-04-05
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2011-09-07
    相关资源
    最近更新 更多