【问题标题】:Have preventDefault() last for 200ms only - JavaScript让 preventDefault() 仅持续 200 毫秒 - JavaScript
【发布时间】:2018-03-22 01:30:58
【问题描述】:

我有一个链接,我设置了 preventDefault() 方法,因为在链接连接到链接地址之前,我将在链接上制作一个简短的动画。

我的问题是,虽然我正在努力将 preventDefault() 设置为仅持续 200 毫秒。我尝试过使用 setTimeout(),但没有任何乐趣?

基本上在下面的代码中,我希望这样当有人单击锚标记时,200 毫秒内没有任何反应(我实际上会在这 200 毫秒内发生淡出动画,但这样做很容易,这只是时机在我正在努力的 preventDefault() 上)。

代码笔:https://codepen.io/emilychews/pen/BrRZbX

window.addEventListener("load", function(){
  
  var link = document.getElementById("link");
  
  link.addEventListener("click", function(e){
     e.preventDefault();
    
  })
  
});
body {
      margin: 0; 
      display: flex; 
      justify-content: center; 
      align-items: center; 
      width: 100%; 
      height: 100vh;
     }
<a target="_blank" href="https://www.google.com" id="link">Google</a>

【问题讨论】:

  • 检查this,我想它可能会回答你的问题。

标签: javascript html preventdefault


【解决方案1】:

我想不出preventDefault 然后恢复的方法,但您应该可以在等待 200 毫秒后手动导航:

window.addEventListener("load", function(){

  var link = document.getElementById("link");

  link.addEventListener("click", function(e){
     e.preventDefault();
     setTimeout(() => {
         // if you want to open in a new window
         window.open(e.target.href);
         // if you want to navigate away (same window)
         window.location = e.target.href;
     }, 200);
  })
});

【讨论】:

  • 他确实想要target="_blank",所以他可能想要一个新窗口。
  • No target="blank" 不是必需的,我只是把它放进去,所以可以说链接实际上是打开的。我没有看到你之前在同一个窗口中如何做的答案:(
  • 我把它加回来了,不过请确保只使用这两个选项之一
  • 小心 window.open:如果它不是来自受信任的用户事件(如点击),UA 将阻止它,并且添加超时将使它脱离这个受信任的事件。
  • 这些都不行?延迟发生了 200 毫秒,我的小动画发生在其中,但链接没有转到 href="//localhost:8888/mysite/index.html" The address displayed in the browser is localhost:8888/mysite/undefined` 并且我得到一个找不到页面的错误?
【解决方案2】:

为我工作:

e.preventDefault();
setTimeout(() => window.location = link.href, 200);

你不能真正推迟preventDefault,因为它是同步的——你必须手动强制默认效果。 (另一种选择是创建一个自定义事件以在 200 毫秒内分派给元素,但这需要更多代码)

【讨论】:

  • 对不起,我在这里犯了一个错误,我不应该把 target="blank" 放进去。如何让它在同一个窗口中工作?
  • 这个和其他人的答案不起作用。延迟发生了 200 毫秒,我的小动画发生在其中,但链接没有转到 href="//localhost:8888/mysite/index.html" The address displayed in the browser is localhost:8888/mysite/undefined` 并且我得到一个找不到页面的错误?
  • @TheChewy 导致该错误的原因不在您在此处发布的代码范围内。据推测,生成hrefs 的任何东西都无法正常工作。
  • 不,您的代码错误。应该是e.target.href
  • 我假设您的 var link = document.getElementById("link");(在代码笔中定义)是您正在寻找的元素 - 在这种情况下,link.href 可以工作 - 如果您只需要 e.target代码与您实际发布的代码完全不同。
猜你喜欢
  • 2021-07-13
  • 2021-10-11
  • 1970-01-01
  • 2012-03-10
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多