扩展jQuery以在视口外创建自定义过滤器元素

扩展jQuery以在视口外创建自定义过滤器元素,jquery,Jquery,在重新扩展jQuery以确定某个元素是否在屏幕外时发现了这个非常好的问题/答案: 也找到了此文章,但无法用于解决问题: 使用scurker(已接受的答案)代码,当黄色DIV滚动到屏幕外时,应发出警报(并隐藏元素)。没有。找不到问题 jQuery.expr.filters.offscreen=函数(el){ 返回( (el.offsetLeft+el.offsetWidth)window.innerWidth | | el.offsetLeft>window.innerHeight) )

在重新扩展jQuery以确定某个元素是否在屏幕外时发现了这个非常好的问题/答案:

也找到了此文章,但无法用于解决问题:


使用scurker(已接受的答案)代码,当黄色DIV滚动到屏幕外时,应发出警报(并隐藏元素)。没有。找不到问题

jQuery.expr.filters.offscreen=函数(el){
返回(
(el.offsetLeft+el.offsetWidth)<0
||(标高偏移+标高偏移)小于0
||(el.offsetLeft>window.innerWidth | | el.offsetLeft>window.innerHeight)
);
};
变量d1=0,d2=0,d3=0,dir='dn',cpos=0,lpos=0;
变量div1=$('d1')、div4=$('d4')、div5=$('d5');
$(窗口)。滚动(函数(){
cpos=$(窗口).scrollTop();//获取当前滚动位置
html(cpos);
dir=(cpos>lpos)?'dn':'up';//获取滚动方向
//html(dir);
如果(dir=='dn'){
d1=cpos+(cpos*1.25);
}否则{
d1=cpos-(cpos*1.25);
}
div1.html(d1);//更新pos编号
div1.dequeue().stop().animate({'top':d1+'px'});
lpos=cpos;//第6行的存储
div1.is(':offscreen').hide();
html((div1.is(':offscreen'))?'yup':'no');
});
html{height:1800px;}
正文{背景:url('http://placekitten.com/g/500/500“)无重复中心固定;背景大小:封面;}
.divs{位置:固定;顶部:0;高度:120px;宽度:60px;}
#d1{背景:黄色;}
#d4{背景:小麦;左:380px;}
#d5{背景:白色;左侧:440px;}

编辑、更新

不确定是否使用
:offscreen
测试元素是否为“offscreen”-如原文所述

取决于你对“屏幕外”的定义。那是在这个范围内吗 视口,还是在页面的定义边界内

写一张支票看它是否在屏幕外(不是在屏幕上)是非常简单的 将视口考虑在内…-scurker

在jsfiddle中,
div1.is(“:offscreen”)
:offscreen
元素隐藏后返回
false
,导致
div5
html
处出现“no”。相反,可以使用jQuery检查
div1
是否
:隐藏

jQuery返回
布尔值

div1.is(':offscreen').hide()

.hide()
未链接到此
元素;而是链接到
is()
Boolean
返回值

尝试,更新

div1.filter(function() {
    return $(this).is(":offscreen")
}).hide();
// added
// modify `div5` `html` by checking if `div1` is `:hidden`
div5.html( div1.is(':hidden') ? 'yup':'no' );

jsfiddle

这很好,但这部分仍然不起作用:
div5.html((div1.is(“:offscreen”)?“是的”:“否”)如何触发将该文本(“是”)放入div5?你能修改你的JSFIDLE吗?好的,我明白你的意思。很好的解决方法。满分。谢谢
div1.filter(function() {
    return $(this).is(":offscreen")
}).hide();
// added
// modify `div5` `html` by checking if `div1` is `:hidden`
div5.html( div1.is(':hidden') ? 'yup':'no' );