我似乎无法弄清楚这里的逻辑。 我有一个隐藏的元素,直到鼠标移动为止( utilBar ),并且我希望即使计时器结束后, 如果鼠标仍在移动,它也将保持显示状态。 显然,我想像的是,在鼠标移动时启动一个计时器并显示该元素,并且如果在第一个鼠标停止运行后又有鼠标移动,则重复启动该计时器,因此只要鼠标在移动,计时器就永远不会结束。

问题是我移动鼠标后,元素在1000毫秒向上闪烁后闪烁。 我想我只是在这里讲逻辑,但我无法弄清楚。

//Separate function to pass in utilBarTimer into the setTimeout
function timerFunction(utilBarTimer){
  self.iframe.addEventListener('mousemove',function(){
    clearTimeout(window.utilBarTimer);
  });
  utilBar.style.display = 'none';
}
self.iframe.addEventListener('mousemove',function(){
  utilBar.style.display = 'block';
  var utilBarTimer = window.setTimeout(function(){
    timerFunction(utilBarTimer)
  },1000);
});

===============>>#1 票数:1 已采纳

它们当前正在执行的操作方式是创建一个新的EventListener ,该EventListener将在每次鼠标移动时清除超时。 我认为您要寻找的逻辑是这样的:

var utilBar = document.getElementById('utilBar'),
    utilBarTimer;

window.addEventListener('mousemove', function() {
    utilBar.style.display = 'block';

    // if we have a timer already running, kill it out
    if (utilBarTimer) {
        clearTimeout(utilBarTimer);   
    }

    // begin a new timer that hides our object after 1000 ms
    utilBarTimer = window.setTimeout(function() {
        utilBar.style.display = 'none';
    }, 1000);
});

下面是的jsfiddle它在行动。

  ask by Oscar Godson translate from so

未解决问题?本站智能推荐:

1回复

如何在运行长javascript代码时处理用户输入事件?

我有一个长期运行的javascript代码,处理某种渲染(webgl)。 这是某种“适应性渲染”,其中我随着时间的推移越来越精确地计算表面(意味着场景的“分辨率”变得越来越精确)。 只要用户没有按任何键或移动鼠标,我希望它能够运行。 如前所述在这里 ,我可以使用的setTimeout或
2回复

Javascript事件以错误的顺序触发?

有人可以向我解释为什么在运行下面的程序警报我得到的总是“aaa”后跟“bbb”? 我希望它遵循以下步骤: 我启动程序 程序运行并转到setTimeout行。 它设置了计时器,这个计时器将在5秒内从此时间点开始(而不是在程序结束时)。 事件队列中还没有任何内容 然后
1回复

javascript背景图片位置循环

这是我的代码: 我希望背景图片滚动,但是当我运行程序时脚本无法运行。 我找不到我的错误。 这就是我放在CSS代码background:url("image source"); 可以做到这一点。 请在这里帮助我新
3回复

javascript元素body.onclick attatch事件setTimeout

我想让popup div在我点击它之外消失。 我需要纯粹的js,而不是jQuery或其他东西。 所以我做了以下...... 使div消失的功能: 也许这段代码很难看,但这不是主要问题...... 主要问题是当我将一个事件附加到身体时,它会立即执行! 并且div立刻消失了
4回复

等待功能直到用户停止输入

我有用户在打字时进行ajax调用。 问题是它会对每个字母进行调用,所以我设置了这样的超时: 它确实等待400ms,然后为每个keyup执行。 如何在最后输入的字母后约400ms时更改此选项以使ajax调用“一次”? (我过去使用'延迟',但这对我的脚本根本不起作用......)
3回复

使用setTimeout(),JavaScript闪烁边框,时间间隔

我想使用setTimeout函数使边框闪烁,只是我找不到理想的时间值来使其在相同的时间间隔内闪烁。 我长眨眼,又很短,又长又短。 我如何摆脱矮个子? 这是代码: 您可以在这里查看结果: http : //jsfiddle.net/GBGu8/
3回复

闪烁并设置超时

我正在为Free Code Camp编写游戏,我需要眨眼几次。 这是我找到的解决方案,但看起来很丑: 您能给我一些帮助,以更时尚的方式编写它吗? 我尝试使用for循环,但进入页面挂起状态。 给你加油
2回复

依次闪烁元素

美好的一天,所有,所以我正在做这个事情,我有4个正方形,当我单击一个按钮时,3个随机正方形必须按顺序以不同的颜色闪烁。 而且我需要存储在数组中闪烁的正方形的ID。 我不知道的是如何让他们一个接一个地眨眼。 这就是我到目前为止所拥有的... https://codepen.io/anon/p
1回复

如何停止JavaScript中的异步功能?

我有一些异步问题。 我正在处理ECMAScript 6对象。 这是一个计时器,我希望能够在其倒计时期间重新启动。 这是我的工作: 在restart()函数中,如何知道_run()何时停止运行?
3回复

在Javascript中停止嵌套超时

我想执行一段任意代码,并能够随时停止它。 我想我可以使用setTimeout执行此操作,然后使用clearTimeout来停止它。 但是,如果超时中的代码创建了自己的超时,那么即使在我清除原始代码之后,这些代码也会继续执行。 例: 现在,一种方法是控制正在执行的代码并使其将任何