我希望有一个动画效果,当人们离开页面时开始。
我目前使用它:
window.onbeforeunload = function (){
alert("test");
console.log("test");
sliderIntervalId = setInterval('SlideDown()',1);
}
虽然确实将“test”记录到控制台,但是没有生成函数slideDown和测试警报......
这是正常行为吗?我们可以将beforeunload函数仅用于后端目的吗?
P.S。我正在测试chrome,这就是为什么我必须使用onbeforeUnload i.s.o onUnLoad,这似乎不受Chrome支持?
答案 0 :(得分:16)
onbeforeunload
可以在只有一个的情况下延迟页面卸载:当返回具有已定义值的return
语句时。在这种情况下,用户会收到一个确认对话框,为用户提供不离开页面的选项。
不能以任何方式强迫您想要的结果。您的动画将一直运行,直到浏览器开始加载下一页:
[User] Navigates away to http://other.website/
[Your page] Fires `beforeunload` event
[Your page] `unload` event fires
[Browser] Received response from http://other.website/
[Browser] Leaves your page
[Browser] Starts showing content from http://other.website/
答案 1 :(得分:4)
为了简洁起见假设jQuery:
$('nav a').click(function (e) {
//ignore any "modified" click that usually doesn't open in the current window
if (e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {
return;
}
//where you going here?
var place = this.href;
//you're not going anywhere, buddy
e.preventDefault();
//watch me dance, first
$('.animate-me').fadeOut(1000, function afterAnimation () {
//you're free to go!
document.location = place;
});
});
基本上,您不使用onbeforeunload
。一个优点是你可以随心所欲地保留用户,一个缺点是用户在使用nav
之外的链接时不会看到动画(但你可以只改变选择器)
显然可以快速保持动画,例如suddenlyoslo.com。
答案 2 :(得分:3)
Jorrebor, 如果您尝试在离开您的网站或关闭浏览器时触发此动画,则无法按预期工作。但是,您可以在用户在您的站点内移动时创建此动画,方法是删除链接的“href”属性并创建具有设置window.location属性的回调函数的动画。类似的东西:
document.getElementById('home').onclick(function(){
yourAnimationFunction(function(){
window.location="example.com";
});
});
很多工作,但不会太友好了
答案 3 :(得分:3)
我正在使用onbeforeunload,我能够弄清楚的是:
因此,只要事件处理程序运行,您的代码就会正常工作。 这意味着定时器功能不可用。它们只是添加到执行队列中,所以他们要做的任何事情都是在当前正在运行的处理程序结束后排队,这是在保证代码仍在运行的最后一个时间点之后。
因此,只有一种方法可以在动画结束前停止浏览器的卸载:
beforeunload
处理程序哦,是的,这是一个最糟糕的黑客,但我能找到一种方法来阻止浏览器卸载页面,对吗?
我很感激有关如何放入循环的想法的评论。 我考虑了一些选择:
有什么想法吗?