jQuery.fn.offset = function(options, returnObject) {
var x = 0, y = 0, elem = this[0], parent = this[0], sl = 0, st = 0, options = jQuery.extend({ margin: true, border: true, padding: false, scroll: true }, options || {});
do {
x += parent.offsetLeft || 0;
y += parent.offsetTop || 0;
// Mozilla and IE do not add the border
if (jQuery.browser.mozilla || jQuery.browser.msie) {
// get borders
var bt = parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
var bl = parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
// add borders to offset
x += bl;
y += bt;
// Mozilla removes the border if the parent has overflow property other than visible
if (jQuery.browser.mozilla && parent != elem && jQuery.css(parent, 'overflow') != 'visible') {
x += bl;
y += bt;
}
}
var op = parent.offsetParent;
if (op && (op.tagName == 'BODY' || op.tagName == 'HTML')) {
// Safari doesn't add the body margin for elments positioned with static or relative
if (jQuery.browser.safari && jQuery.css(parent, 'position') != 'absolute') {
x += parseInt(jQuery.css(op, 'marginLeft')) || 0;
y += parseInt(jQuery.css(op, 'marginTop')) || 0;
}
// Exit the loop
break;
}
if (options.scroll) {
// Need to get scroll offsets in-between offsetParents
do {
sl += parent.scrollLeft || 0;
st += parent.scrollTop || 0;
parent = parent.parentNode;
// Mozilla removes the border if the parent has overflow property other than visible
if (jQuery.browser.mozilla && parent != elem && parent != op && parent.style && jQuery.css(parent, 'overflow') != 'visible') {
y += parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
x += parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
}
} while (parent != op);
} else {
parent = parent.offsetParent;
}
} while (parent);
if ( !options.margin) {
x -= parseInt(jQuery.css(elem, 'marginLeft')) || 0;
y -= parseInt(jQuery.css(elem, 'marginTop')) || 0;
}
// Safari and Opera do not add the border for the element
if ( options.border && (jQuery.browser.safari || jQuery.browser.opera) ) {
x += parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
y += parseInt(jQuery.css(elem, 'borderTopWidth')) || 0;
} else if ( !options.border && !(jQuery.browser.safari || jQuery.browser.opera) ) {
x -= parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
y -= parseInt(jQuery.css(elem, 'borderTopWidth')) || 0;
}
if ( options.padding ) {
x += parseInt(jQuery.css(elem, 'paddingLeft')) || 0;
y += parseInt(jQuery.css(elem, 'paddingTop')) || 0;
}
// Opera thinks offset is scroll offset for display: inline elements
if (options.scroll && jQuery.browser.opera && jQuery.css(elem, 'display') == 'inline') {
sl -= elem.scrollLeft || 0;
st -= elem.scrollTop || 0;
}
var returnValue = options.scroll ? { top: y - st, left: x - sl, scrollTop: st, scrollLeft: sl }
: { top: y, left: x };
if (returnObject) { jQuery.extend(returnObject, returnValue); return this; }
else { return returnValue; }
};
//使用 方法
$(window).ready(function(){
$("#ChangeButton").click(function(){
$("#LightboxPanel").height($(document).height());
$("#LightboxPanel").width($(document).width());
$("#LightboxPanel").css("left",0-$(".page").offset().left);
$("#LightboxPanel").css("top",0-$(".page").offset().top);
$("#LightboxPanel").fadeIn(500);
$("#YouDetailsPanel").fadeIn(1000);
});
$("#LightboxPanel").click(function(){
$("#LightboxPanel").fadeOut(500);
$("#YouDetailsPanel").fadeOut(1000);
});
$(".btn").mouseover(function(){
$("#CommentPanel").text($(this).find(".comment").text());
//alert($(this).position().top);
$("#CommentPanel").css("left",$(this).offset().left-14);
$("#CommentPanel").css("top",$(this).offset().top);
$("#CommentPanel").show();
}) ;
$(".btn").mouseout(function(){
$('.btn .title').hide();
});
$(document).keyup(function(event){
if (event.keyCode == 27) {
$("#LightboxPanel").hide();
$("#YouDetailsPanel").hide();
}
});
});
var x = 0, y = 0, elem = this[0], parent = this[0], sl = 0, st = 0, options = jQuery.extend({ margin: true, border: true, padding: false, scroll: true }, options || {});
do {
x += parent.offsetLeft || 0;
y += parent.offsetTop || 0;
// Mozilla and IE do not add the border
if (jQuery.browser.mozilla || jQuery.browser.msie) {
// get borders
var bt = parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
var bl = parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
// add borders to offset
x += bl;
y += bt;
// Mozilla removes the border if the parent has overflow property other than visible
if (jQuery.browser.mozilla && parent != elem && jQuery.css(parent, 'overflow') != 'visible') {
x += bl;
y += bt;
}
}
var op = parent.offsetParent;
if (op && (op.tagName == 'BODY' || op.tagName == 'HTML')) {
// Safari doesn't add the body margin for elments positioned with static or relative
if (jQuery.browser.safari && jQuery.css(parent, 'position') != 'absolute') {
x += parseInt(jQuery.css(op, 'marginLeft')) || 0;
y += parseInt(jQuery.css(op, 'marginTop')) || 0;
}
// Exit the loop
break;
}
if (options.scroll) {
// Need to get scroll offsets in-between offsetParents
do {
sl += parent.scrollLeft || 0;
st += parent.scrollTop || 0;
parent = parent.parentNode;
// Mozilla removes the border if the parent has overflow property other than visible
if (jQuery.browser.mozilla && parent != elem && parent != op && parent.style && jQuery.css(parent, 'overflow') != 'visible') {
y += parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
x += parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
}
} while (parent != op);
} else {
parent = parent.offsetParent;
}
} while (parent);
if ( !options.margin) {
x -= parseInt(jQuery.css(elem, 'marginLeft')) || 0;
y -= parseInt(jQuery.css(elem, 'marginTop')) || 0;
}
// Safari and Opera do not add the border for the element
if ( options.border && (jQuery.browser.safari || jQuery.browser.opera) ) {
x += parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
y += parseInt(jQuery.css(elem, 'borderTopWidth')) || 0;
} else if ( !options.border && !(jQuery.browser.safari || jQuery.browser.opera) ) {
x -= parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
y -= parseInt(jQuery.css(elem, 'borderTopWidth')) || 0;
}
if ( options.padding ) {
x += parseInt(jQuery.css(elem, 'paddingLeft')) || 0;
y += parseInt(jQuery.css(elem, 'paddingTop')) || 0;
}
// Opera thinks offset is scroll offset for display: inline elements
if (options.scroll && jQuery.browser.opera && jQuery.css(elem, 'display') == 'inline') {
sl -= elem.scrollLeft || 0;
st -= elem.scrollTop || 0;
}
var returnValue = options.scroll ? { top: y - st, left: x - sl, scrollTop: st, scrollLeft: sl }
: { top: y, left: x };
if (returnObject) { jQuery.extend(returnObject, returnValue); return this; }
else { return returnValue; }
};
//使用 方法
$(window).ready(function(){
$("#ChangeButton").click(function(){
$("#LightboxPanel").height($(document).height());
$("#LightboxPanel").width($(document).width());
$("#LightboxPanel").css("left",0-$(".page").offset().left);
$("#LightboxPanel").css("top",0-$(".page").offset().top);
$("#LightboxPanel").fadeIn(500);
$("#YouDetailsPanel").fadeIn(1000);
});
$("#LightboxPanel").click(function(){
$("#LightboxPanel").fadeOut(500);
$("#YouDetailsPanel").fadeOut(1000);
});
$(".btn").mouseover(function(){
$("#CommentPanel").text($(this).find(".comment").text());
//alert($(this).position().top);
$("#CommentPanel").css("left",$(this).offset().left-14);
$("#CommentPanel").css("top",$(this).offset().top);
$("#CommentPanel").show();
}) ;
$(".btn").mouseout(function(){
$('.btn .title').hide();
});
$(document).keyup(function(event){
if (event.keyCode == 27) {
$("#LightboxPanel").hide();
$("#YouDetailsPanel").hide();
}
});
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)