在卸货前我能放些什么?
What can I put in beforeUnload?
本文关键字:什么 更新时间:2023-09-26
我想有一个动画效果,当人们离开页面时开始。
我现在使用这个:
window.onbeforeunload = function (){
alert("test");
console.log("test");
sliderIntervalId = setInterval('SlideDown()',1);
}
当"test"确实记录到控制台,功能slideDown
和测试警报都没有产生…
这是正常行为吗?我们是否可以将beforeunload
函数仅用于后端目的?
注:我正在测试Chrome,这就是为什么我不得不使用onbeforeUnload
而不是onUnLoad
,这似乎不支持Chrome?
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/
为简洁起见,假设使用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
以外的链接(但你可以改变选择器)
显然要保持动画的速度,就像突如其来的oslo.com那样
如果你试图让这个动画在他们离开你的网站或关闭浏览器时触发,它将无法按预期工作。但是,当用户在你的网站中移动时,你可以通过删除链接的'href'属性并创建具有设置窗口的回调函数的动画来创建这个动画。位置属性。比如:
document.getElementById('home').onclick(function(){
yourAnimationFunction(function(){
window.location="example.com";
});
});
大量的工作,不会seo友好但是
我正在使用onbeforeunload,我能弄清楚的是:
- onbeforeunload处理器阻止浏览器销毁当前页面
- 如果你不返回任何东西,弹出窗口不会出现
- 设置一个阻塞循环,在
beforeunload
处理程序中浪费一些时间 - 通过在循环前的元素上设置适当的类来启动CSS3动画
- 让循环在动画结束时结束(让循环检查元素或其他东西的实际高度)
哦,是的,这是一个最令人讨厌的黑客,但我能找到一个方法来阻止浏览器卸载页面,对吗?
我将感谢你的意见,让我知道在循环中应该放些什么。我正在考虑一些选项:
- 在处理大数字时浪费CPU
- 访问本地存储(同步调用,IO操作)
- 访问DOM(这个解决方案已经必须)
任何想法?
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 基于窗口宽度jquery的函数的替代方法是什么
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效