本文详细解析 JavaScript 中 onbeforeunload 事件在窗口关闭时的触发机制。通过具体代码示例,展示了如何获取页面尺寸、计算弹窗位置及处理窗口大小调整。该事件常用于用户离开页面前的确认提示或数据提交场景,掌握其用法有助于提升网页交互体验。
JavaScript 窗口关闭事件 onbeforeunload 用法详解
本文通过具体实例,深入解析了 JavaScript 在关闭窗口时触发的事件及其实际应用方法。内容旨在为开发者提供清晰的参考,帮助理解相关技术细节。
核心代码实现与逻辑分析
/************ 关闭窗口,提交评价 **************/
window.onbeforeunload = function(){
var pageWidth = Math.max(window.top.document.body.scrollWidth, window.top.document.documentElement.scrollWidth);
var pageHeight = Math.max(window.top.document.body.scrollHeight, window.top.document.documentElement.scrollHeight);
var cltHeight = Math.max(window.top.document.body.clientHeight, window.top.document.documentElement.clientHeight);
var width = 400 ;
var height = 200 ;
var layer = window.top.document.getElementById("zz_layer");
if (layer != null) {
layer.parentNode.removeChild(layer);
}
// 遮罩层
var layer= window.top.document.createElement("div");
layer.id = "zz_layer";
layer.style.filter = "alpha(opacity=38)";//ie
layer.style.opacity = "0.38";//ff
layer.style.width = pageWidth + "px";
layer.style.height = pageHeight + "px";
layer.style.position= "absolute";
layer.style.top = 0;
layer.style.left = 0;
layer.style.backgroundColor = "#000";
layer.style.zIndex = "9998";
window.top.document.body.appendChild(layer);
// 评价窗口
var newbox = document.getElementById("KF_PJ_DIV");
newbox.style.zIndex = "9999";
newbox.style.display = "block";
newbox.style.width = width + "px";
newbox.style.height = height + "px";
newbox.style.border = "#565656 4px solid";
newbox.style.background = "#FFFFFF";
newbox.style.position = "absolute";
newbox.style.left = pageWidth/2 + "px";
newbox.style.top = (cltHeight/2) + "px";
if(height/2 > (cltHeight/2)){
newbox.style.marginTop = ( - (cltHeight/2)) + "px";
}else{
newbox.style.marginTop = ( - height/2) + "px";
}
if(width/2 > (pageWidth/2)){
newbox.style.marginLeft = ( - (pageWidth/2)) + "px";
}else{
newbox.style.marginLeft = ( - width/2) + "px";
}
return "您尚未对客服服务作出评价,请点击‘取消'评分!";
};
function mydiv_resize(){
var pageWidth = Math.max(window.top.document.body.scrollWidth, window.top.document.documentElement.scrollWidth);
var pageHeight = Math.max(window.top.document.body.scrollHeight, window.top.document.documentElement.scrollHeight);
var cltHeight = Math.max(window.top.document.body.clientHeight, window.top.document.documentElement.clientHeight);
var cltWidth = Math.max(window.top.document.body.clientWidth, window.top.document.documentElement.clientWidth);
var width = 400 ;
var height = 200 ;
var layer = window.top.document.getElementById("zz_layer");
if (layer != null) {
// 遮罩层
layer.style.width = pageWidth + "px";
layer.style.height = pageHeight + "px";
}
// 评价窗口
var newbox = document.getElementById("KF_PJ_DIV");
newbox.style.left = cltWidth/2 + "px";
newbox.style.top = (cltHeight/2) + "px";
if(height/2 > (cltHeight/2)){
newbox.style.marginTop = ( - (cltHeight/2)) + "px";
}else{
newbox.style.marginTop = ( - height/2) + "px";
}
if(width/2 > (pageWidth/2)){
newbox.style.marginLeft = ( - (pageWidth/2)) + "px";
}else{
newbox.style.marginLeft = ( - width/2) + "px";
}
}
window.onresize = mydiv_resize;
若需进一步了解 JavaScript 的其他实用技巧,建议参阅本站系列专题,包括《JavaScript窗口操作与技巧汇总》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》以及《JavaScript数学运算用法总结》。
希望本文提供的关于 JavaScript 程序设计的内容,能对读者的开发工作产生积极帮助。