如何延迟通过javascript离开页面?

如何延迟通过javascript离开页面?,javascript,jquery,Javascript,Jquery,我试图在一个人离开页面之前添加1000毫秒的延迟。我正在使用beforeunload事件启动jquery动画,并希望它在页面离开之前完成 我不关心旧的浏览器,IE9、最新的safari、chrome和FF4都是我感兴趣的 编辑:我希望在浏览内部页面时实现它。当然,我可以让我所有的内部链接都成为一个javascript调用,但我更喜欢一个不太暴力的方法 而且,我没有阻止人们离开页面,甚至没有让他们等待很长时间,一秒钟的淡出?这并不比我选择退出时退出的每场比赛更糟糕 如果我问过如何防止一个人离开某个

我试图在一个人离开页面之前添加1000毫秒的延迟。我正在使用beforeunload事件启动jquery动画,并希望它在页面离开之前完成

我不关心旧的浏览器,IE9、最新的safari、chrome和FF4都是我感兴趣的

编辑:我希望在浏览内部页面时实现它。当然,我可以让我所有的内部链接都成为一个javascript调用,但我更喜欢一个不太暴力的方法

而且,我没有阻止人们离开页面,甚至没有让他们等待很长时间,一秒钟的淡出?这并不比我选择退出时退出的每场比赛更糟糕


如果我问过如何防止一个人离开某个页面,那么所有的“不要这样做”都是应该的。

首先,如果有人想离开你的页面,不要在离开时设置任何障碍或困难。就让他们去吧

说得好

当用户即将因离开页面而丢失数据时,使用阻止操作是可以接受的,但将其用于动画和噱头会很快激怒用户

其次,您只能通过阻塞操作来防止自动关闭,例如
警报()
提示()
,这会临时阻塞浏览器的视口,等待用户响应

我希望在浏览内部页面时实现它

我知道现在已经四年过去了,但我想指出,在你描述的范围内,你可以做到这一点

这仍然是不可取的:

  • 我怀疑它会很快让用户恼火
  • 如果没有其他代码,这将阻止用户通过命令/控件单击在新选项卡中打开链接

8年后,我将为自己的网站编写此代码,特别是作为页面之间的渐变。但我只会在我的站点内的页面之间导航,而不会使用
window.onbeforeuload
window.onclick
。我在每个页面上的特定“按钮”上附加一个单击事件处理程序<代码>指针事件甚至对其他元素禁用,因此事件的元素范围非常有限。代码是一个
switch()
语句,每个“按钮”都有大小写。每个按钮都会导航到站点中的特定页面

我不认为这是不好的网页或网站行为。在页面之间转换时延迟1秒不会让用户感到烦恼。我认为,如果包括加载目标页面所需的时间,您可能可以从中获得2秒或更长的时间,这也可能随着加载数据而逐渐淡入

它在视觉上非常优雅,尤其是与典型的新闻/信息网站相比,这些网站在加载时会在页面上移动。在你阅读任何东西之前,这些页面需要花费2秒或更多的时间来转换内容

我的网站已经充满了CSS和SVG动画,因此将其添加到内部页面导航对于这个项目来说并不费力。如果您限制用户事件的元素范围,并使延迟变小,我认为这是好的行为,而不是坏的行为。视觉优雅是有价值的


编辑-当我进入其中时,我发现对于一组类似的页面,我可以通过将它们合并到一个页面中来实现它们之间更好的交叉褪色。这样,我就可以在每个子页面之间进行交叉淡入淡出,而不是先淡出一个页面,然后淡入另一个页面。

这是不可取的行为。我强烈建议不要这样做。有人做了-1没有理由做+1-这不是一个好问题。没错,但有人可能会说没有坏问题,+OP可能是无辜地不知道……;)@科内拉克说得再好不过了。亚历克斯,谢谢你的回答。我想可能有一种方法可以推迟,因为你可以取消它,同时确认。我本来打算在浏览内部页面时使用它,但在查看之后,事件中没有任何信息告诉我它们要去哪里,所以我不得不求助于用javascript调用包装我的所有导航。
$(document).on("click", "a", function (e) {// Listen for all link click events on the page (assuming other scripts don’t stop them from bubbling all the way up)
    // Stop the link from being followed.
    e.preventDefault();

    // Grab the link element that was clicked
    var linkClicked = e.target;

    // I'm using setTimeout to just delay things here, but you would do your animation and then call a function like this when it’s done
    window.setTimeout(function () {

        // Simulate navigation
        window.location = linkClicked.href;
    }, 1000);

    return false;
});