让preventDefault()仅持续200毫秒-JavaScript

让preventDefault()仅持续200毫秒-JavaScript,javascript,html,preventdefault,Javascript,Html,Preventdefault,我有一个链接,我已经设置了一个默认方法,因为在链接连接到链接地址之前,我将在链接上有一个简短的动画 我的问题是,我正在努力将默认值设置为仅持续200毫秒。我尝试过使用setTimeout,但没有任何乐趣 基本上,在下面的代码中,我希望这样,当有人单击锚定标记时,200毫秒内不会发生任何事情,我实际上会在这200毫秒内发生淡出动画,但这样做很容易,我正在努力解决的只是默认时间 代码笔: window.addEventListenerload,函数{ var link=document.getEl

我有一个链接,我已经设置了一个默认方法,因为在链接连接到链接地址之前,我将在链接上有一个简短的动画

我的问题是,我正在努力将默认值设置为仅持续200毫秒。我尝试过使用setTimeout,但没有任何乐趣

基本上,在下面的代码中,我希望这样,当有人单击锚定标记时,200毫秒内不会发生任何事情,我实际上会在这200毫秒内发生淡出动画,但这样做很容易,我正在努力解决的只是默认时间

代码笔:

window.addEventListenerload,函数{ var link=document.getElementByIdlink; link.addEventListener单击,函数E{ e、 防止违约; } }; 身体{ 保证金:0; 显示器:flex; 证明内容:中心; 对齐项目:居中; 宽度:100%; 高度:100vh; } 为我工作:

e.preventDefault();
setTimeout(() => window.location = link.href, 200);
您不能真正延迟默认值,因为它是同步的-您必须手动强制默认效果。另一种选择是创建一个自定义事件,在200毫秒内发送到元素,但这需要更多的代码,我想不出一种方法来防止默认,然后恢复,但您应该能够在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=\u blank,所以他可能想要一个新窗口。没有target=blank是不必要的,我只是把它放在链接实际打开的地方。我没有看到您以前关于如何在同一窗口中执行此操作的答案:我已将其添加回,请确保仅使用两个选项中的一个,但要注意此窗口。打开:如果它不是来自可信用户事件(如单击),UAs将阻止它,并且添加超时将使其脱离此可信事件。这两个选项都不起作用?延迟发生了200毫秒,我的小动画也发生在这一点上,但是链接没有指向href=//localhost:8888/mysite/index.html浏览器中显示的地址是localhost:8888/mysite/undefined`并且我得到了一个未找到页面的错误?很抱歉,我在这里犯了一个错误,我不应该将target=blank输入。我如何让它在同一个窗口中工作?这个和其他人的答案不起作用。延迟发生了200毫秒,我的小动画也发生在这段时间内,但是链接没有指向href=//localhost:8888/mysite/index.html浏览器中显示的地址是localhost:8888/mysite/undefined`并且我得到了一个页面未找到错误?@TheChewy无论是什么原因导致了该错误,都不在您发布的代码范围内。想必,生成你的HREF的任何东西都不能正常工作。不,你的代码是错误的。应该是e.target.hrefI假设您的var link=document.getElementByIdlink;正如codepen中所定义的那样,您正在寻找的元素是link.href,在这种情况下,link.href可以工作,如果您的代码与您实际发布的代码有根本性的不同,那么您只需要e.target。