【问题标题】:Determine if a button is currently being left clicked (click held down)?确定一个按钮当前是否被左键点击(点击按住)?
【发布时间】:2017-08-30 15:58:22
【问题描述】:

在纯 JavaScript 中,我想确定一个按钮当前是否被按下。

我不想使用在 mousedown、mouseup 或任何其他鼠标事件上设置标志的解决方案

有一个循环,由鼠标按下触发,这个循环在 setTimeout 之后运行。 mouseup、mousedown 监听器不可用 - 我想做类似的事情:

let mainButton = document.getElementById("main-button");
// inside the callback of a setTimeout somewhere in the distant future.....
if(mainButton.??? isDown/style.isCurrrentlyClicked){
     //doSomething
}

同样,不会为此使用 mouseup/down 标志。谢谢。

【问题讨论】:

  • “没有 mouseup/down 标志将用于此”这太糟糕了,因为没有其他解决方案。
  • 我们会看到@zzzBov。也许有
  • 如果您对HTMLButtonElement API 进行过任何研究,您就会知道没有。这不是“我们会看到”的问题。如果您希望最终在 DOM API 中引入替代方案,请成为我的客人。
  • 也许有一个使用 css 的解决方案 - 检查应用的类等。我一直在研究它,但还没有找到一个优雅的解决方案
  • 您能提供更多背景信息吗?听起来您的代码在第 3 方网站上以某种不受信任的方式运行?这是一个糟糕的推论吗?你有什么理由不能更多地描述这个问题?如果您知道按钮设置了 onHover、onClick 等属性,您可以探索的一个想法是调查按钮的颜色。 (nvm,刚刚看到你的评论)

标签: javascript


【解决方案1】:
if ( $( '#btn:active' ).length ) // your button is active

【讨论】:

  • 酷。明天我会在没有 jQuery 的情况下测试这个。谢谢@flcoder
  • 可以使用 document.querySelector,根据caniuse.com/#search=querySelector,它适用于所有用户的 97.7%
  • 比我的解决方案更直接
【解决方案2】:

你可以玩这个风格,但这很hacky

setInterval(() => {
  let button = $('#btn');
  let color = button.css('background-color');
  if (color == 'rgb(255, 255, 255)') {
    $('#status').text('Not clicked');
  } else {
  debugger;  $('#status').text('Clicked');
  }
}, 300);
button {
  background-color: #FFF
}

button:active {
  background-color: #F00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn">Click me</button>
<p id='status'></p>

考虑到使用 setInterval 而不是事件处理程序只是一种轮询方法:如果间隔太短,性能会受到影响,但如果间隔太长,响应性就会很糟糕

【讨论】:

  • 嗨。谢谢你!是的,这可能是一种很好的方式。将消除对 eventHandler 标志设置的需要。我会看看这些方面是否有更通用的解决方案
  • 如果您在按下 mousedown 按钮的同时将鼠标移开并离开,请小心,因为它会保持悬停状态 - 不知道这是否会给您带来问题。
  • @DarrenCrabb 绝对不是任何开发人员都希望使用这种方法
  • 另外,它不是跨浏览器 - 只是在 IE 中测试,但它失败了。
  • 我知道 setInterval,但谢谢:-) 这是我感兴趣的概念,而且很有前景
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2016-12-15
  • 2013-05-09
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多