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

时间:2011-03-31 05:07:57

标签: javascript jquery

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

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

编辑:我希望在浏览内部网页时实现它。当然,我可以将所有内部链接调用为javascript,但我更倾向于使用不那么强力的方法。

另外,我不是要阻止人们离开页面,甚至不让他们等待很长时间,1秒钟才能淡出?当我选择退出时,这并不比我播放的每一个游戏都要糟糕。

现在我问过如何阻止一个人离开一个页面,然后是的,所有“不要这样做”都应该得到。

3 个答案:

答案 0 :(得分:6)

首先,如果人们想要离开你的页面,不要给它留下任何障碍或困难。只是让他们。

Konerak说得好......

  

当用户即将离开页面而丢失数据时,可以使用阻止操作,但将其用于动画和噱头会很快惹恼用户。

其次,您只能阻止使用阻止操作自动关闭,例如alert()prompt(),这会暂时阻止浏览器的视口,等待用户响应。

jsFiddle

答案 1 :(得分:1)

  

好吧,我希望在浏览内部页面时实现它。

我知道现在已经四年了,但我想指出,在你所描述的范围内,你可以这样做。

$(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;
});

这仍然是不可取的:

  • 我怀疑它会很快让用户烦恼
  • 如果没有其他代码,这将阻止用户通过命令/控制单击来打开新标签中的链接。

答案 2 :(得分:0)

8年后,我将为自己的网站编写代码,特别是页面之间的淡入淡出。但是,我只会在网站中的页面之间进行导航,而不会使用window.onbeforeunloadwindow.onclick。我将click事件处理程序附加到每个页面上的特定“按钮”上。 pointer-events甚至被其他元素禁用,因此事件的元素范围非常有限。该代码是switch()语句,其中每个“按钮”都有大小写。每个按钮都导航到网站中的特定页面。

我认为这不是不良的网页或网站行为。在页面之间进行转换时1秒钟的延迟不会使用户烦恼。我认为,如果您包括加载目标页面所花费的时间,那么您也许可以从中获得2秒钟或更长时间,它也可以在加载数据时逐渐消失。

视觉上优雅,尤其是与具有灵活布局的典型新闻/信息网站相比,这些网站在加载时会在页面上移动。这些页面要花2秒钟或更多的时间才能转移内容,然后您才能阅读任何内容。

我的网站已经充满了CSS和SVG动画,因此,将其添加到内部页面导航中对于该项目而言是不费吹灰之力的。如果限制用户事件的元素范围并减小延迟,则IMO是好的行为,不是不好的行为。视觉优雅具有价值。

编辑-进入本文时,我发现对于一组相似的页面,我可以通过将它们合并为一页来实现更好的交叉淡入淡出。这样,我可以真正在每个子页面之间进行淡入淡出,而不是先淡出一个页面然后再淡入另一个页面。