按钮中的闪烁文本

Posted

技术标签:

【中文标题】按钮中的闪烁文本【英文标题】:Blinking text in a button 【发布时间】:2017-07-02 05:04:07 【问题描述】:

我有这个功能可以让按钮“AddMoney”中的文本闪烁:-

 function blinker1()
    document.getElementById("AddMoney").value="Add Money";
    setTimeout("document.getElementById('AddMoney').value='                   '", 500);
    xxxx = setTimeout("blinker1()",1500);
                     

然后我停止它并使用此功能设置文本:-

    function cease1()    
            clearTimeout(xxxx);
            document.getElementById("AddMoney").value="Add Money";
                      

它可以工作,但有时按钮中没有文字。 任何人都知道为什么以及如何解决。

【问题讨论】:

尽量把xxxx放在函数外面 xxxx 是一个全局变量,如果这就是你的意思的话。 你什么时候完全丢失了按钮文本 按钮文本闪烁,当我调用停止1时,闪烁停止并且文本出现在按钮中。按钮中时不时地没有文字。停止 1 调用后的警报显示文本始终已设置,但有时它不会显示在按钮中。 我不明白时不时的意思。你确定文本没有被剪裁 【参考方案1】:

按钮中有时没有文字。有人知道为什么吗?

每当cease1() 被调用而setTimeout("document.getElementById('AddMoney').value=' '",500) 仍被安排时,就会发生这种情况,平均每三次发生一次。在这种情况下,blinker1() 超时将被取消并显示内容,但不久之后它将再次隐藏。

...以及如何解决?

您必须取消两个超时:

var timerA, timerB;
function blinker() 
    document.getElementById("AddMoney").value = "Add Money";
    timerA = setTimeout(function() 
        document.getElementById('AddMoney').value = "";
    , 500);
    timerB = setTimeout(blinker1, 1500);

function cease1()    
    clearTimeout(timerA);
    clearTimeout(timerB);
    document.getElementById("AddMoney").value = "Add Money";

或者,使用两个相互调度的函数,以便一次只有一个计时器处于活动状态:

var timer;
function blinkerA() 
    document.getElementById("AddMoney").value = "Add Money";
    timer = setTimeout(blinkerB, 500);

function blinkerB() 
    document.getElementById('AddMoney').value = "";
    timer = setTimeout(blinkerA, 1000);

function cease1()    
    clearTimeout(timer);
    document.getElementById("AddMoney").value = "Add Money";

【讨论】:

【参考方案2】:

这个版本应该更适合你。我坚持使用 vanilla javascript 而不是引入 jQuery:

Fiddle

var blink = window.setInterval(blinker1, 900)

function blinker1() 
  var addMoney = document.getElementById("addMoney");

  addMoney.innerhtml = " ";
  setTimeout(function()addMoney.innerHTML = "ADD MONEY", 300);


document.getElementById('stop').addEventListener('click', function()
    clearInterval(blink);
)

注意 - 实现眨眼效果会更好,更容易using pure CSS。

【讨论】:

您应该使用clearInterval 而不是clearTimeout,即使两者都有效。 好收获。更新了!【参考方案3】:

文本消失是因为您只在xxxx 上设置了clearTimeout,因此setTimeout("document.getElementById('AddMoney').value=' '", 500); 的超时将始终执行。我想这就是为什么按钮中没有文字的原因。

我的方法是设置一个计数器,假设文本需要闪烁 10 次(根据您的代码,这将需要 15 秒。)每次显示的文本计数器都会减少,直到达到 0。

示例代码 (https://jsfiddle.net/2trodftu/1/)

    //counter
    var blinkCounter = 10;

    // blink method
    function blink() 
        document.getElementById("AddMoney").value="Add Money";

        if (blinkCounter > 0) 
            setTimeout("document.getElementById('AddMoney').value='                   '", 500);
            setTimeout(blink,1500);
        

        blinkCounter = blinkCounter - 1;
    

    //initializer
    blink();

希望这会有所帮助。

【讨论】:

以上是关于按钮中的闪烁文本的主要内容,如果未能解决你的问题,请参考以下文章

使用计时器功能设置标题时,按钮文本闪烁,Swift

文本框光标不闪烁

按下按钮时快速闪烁或闪烁 2 种随机颜色

XCUITest 元素快照无法闪烁光标

如何使按钮闪烁或闪烁?

如何在 bootgrid 表的最新记录中闪烁文本?