Javascript 检测固定项元素和多个静态元素之间的重叠

Javascript 检测固定项元素和多个静态元素之间的重叠,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我试图检测我的固定元素(类固定)与其他静态/可移动元素的重叠。根据结果true/false,我正在更改固定元素的字体颜色 因此,当固定元素与黑框重叠时,其字体颜色将变为白色或黑色。我的问题是,这只适用于第三个移动元素 第一个和第二个移动元素也重叠,但我的固定元素的字体颜色没有改变。因此,IF条件仅适用于第三个移动元素 有谁能帮我修改代码,使固定元素的字体颜色在重叠所有三个移动元素时发生变化 函数冲突($fixed,$moving){ var x1=$fixed.offset().left;

我试图检测我的固定元素(类固定)与其他静态/可移动元素的重叠。根据结果true/false,我正在更改固定元素的字体颜色

因此,当固定元素与黑框重叠时,其字体颜色将变为白色或黑色。我的问题是,这只适用于第三个移动元素

第一个和第二个移动元素也重叠,但我的固定元素的字体颜色没有改变。因此,IF条件仅适用于第三个移动元素

有谁能帮我修改代码,使固定元素的字体颜色在重叠所有三个移动元素时发生变化

函数冲突($fixed,$moving){
var x1=$fixed.offset().left;
变量y1=$fixed.offset().top;
var h1=$fixed.outerHeight(真);
var w1=$fixed.outerWidth(真);
var b1=y1+h1;
var r1=x1+w1;
var x2=$moving.offset().left;
变量y2=$moving.offset().top;
var h2=$moving.outerHeight(true);
var w2=$moving.outerWidth(true);
var b2=y2+h2;
var r2=x2+w2;
如果(b1b2 | r1r2)返回false;
返回true;
}
$(窗口)。滚动(函数(){
$(“.moving”).each(函数(){
//log($(this));
if(冲突($(“.fixed”),$(此))){
$('.fixed').css('color','white');
}否则{
$('.fixed').css('color','black');
}
});
});
。已修复{
颜色:黑色;
位置:固定;
顶部:50px;
}
.搬家{
宽度:400px;
高度:100px;
背景色:黑色;
}

固定元件













































































原因很简单,因为您对每一个应用了逻辑,因此只考虑最后一个。每个元素都将更改相同元素的字体颜色,并且只保留上次更改

例如,当您在第一个黑匣子中时,您将测试所有三个。第一个将给出,第二个,第三个,最后一个是假。这就是为什么它只适用于最后一个,因为当最后一个为真时,在其他两个应用黑色后,您将得到白色

相反,您需要应用OR逻辑,当其中一个为真时,您停止并不检查其他逻辑:

函数冲突($fixed,$moving){
var x1=$fixed.offset().left;
变量y1=$fixed.offset().top;
var h1=$fixed.outerHeight(真);
var w1=$fixed.outerWidth(真);
var b1=y1+h1;
var r1=x1+w1;
var x2=$moving.offset().left;
变量y2=$moving.offset().top;
var h2=$moving.outerHeight(true);
var w2=$moving.outerWidth(true);
var b2=y2+h2;
var r2=x2+w2;
如果(b1b2 | r1r2)返回false;
返回true;
}
$(窗口)。滚动(函数(){
var all=$(“.moving”);
对于(变量i=0;i
。已修复{
颜色:黑色;
位置:固定;
顶部:50px;
}
.搬家{
宽度:400px;
高度:100px;
背景色:黑色;
}

固定元件

























































































我煞费苦心地编写了以下碰撞代码-享受

/=tt | | tt=ot)和&(ol=tl | | tl=ol){
r=假;
返回false;
}
});
如果(r==false){
返回false;
}
});
返回r;
},
AnyCollized:函数(jQueryNode、IncludeOrders、includeMargins){
var r=假,im=!!包含缺陷;
每个功能(即,e){
变量o=$(e),ow=o.width(),oh=o.height(),os=o.offset(),ot=os.top,ob=oh+ot,ol=os.left,或=ow+ol;
var oT=parseFloat(o.css('borderTopWidth')),或=parseFloat(o.css('borderRightWidth')),oB=parseFloat(o.css('borderBottomWidth');
var oL=parseFloat(o.css('borderLeftWidth');
如果(包括订单){
如果(包括边缘){
oB+=parseFloat(o.css('marginBottom'))+oT;oT+=parseFloat(o.css('marginTop'));或+=parseFloat(o.css('marginRight'))+oL;
oL+=parseFloat(o.css('marginLeft');ot-=ot;or+=or;ob+=ob;oL-=oL;
}
否则{
或+=或+oL;ob+=ob+oT;
}
}
否则{
ot+=ot;or+=or;ob+=ob;ol+=ol;
}
每个函数(i,e){
变量t=$(e),tw=t.width(),th=t.height(),ts=t.offset(),tt=ts.top,tb=th+tt,tl=ts.left,tr=tw+tl;
var tT=parseFloat(t.css('borderTopWidth')),tR=parseFloat(t.css('borderRightWidth')),tB=parseFloat(t.css('borderBottomWidth'));
var tL=parseFloat(t.css('borderLeftWidth'));
如果(包括订单){
如果(包括边缘){
tB+=parseFloat(t.css('marginBottom'))+tT;tT+=parseFloat(t.css('marginTop'));tR+=parseFloat(t.css('marginRight'))+tL;
tL+=parseFloat(t.css('marginLeft');tt-=tt;tr+=tr;tb+=tb;tL-=tL;
}
否则{
tr+=tr+tL;tb+=tb+tT;
}
tw=t.外径(i