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