jQuery发现当用户滚动出一个元素
jQuery find when user scrolled out an element
我有2个divs
:
<div id="div1"></div>
<div id="div2"></div>
我想添加css({'position':'relative'})
到div2只有当用户滚动页面和div1不再在页面上可见。当div1再次可见时,我想删除css规则。
有人能帮我吗?
你可以试试下面的代码:
$(window).bind('scroll', function() {
if ($(document).scrollTop() >= $('#div1').offset().top - $(window).height()) {
//Change css relative
}else{
}
});
你应该一直玩,直到你得到一个完美的结果。祝你好运
这是不完美的,但我已经给你写了一个快速插件来照顾这个:http://jsfiddle.net/m7ztR/1/
有两种用法:
它给你一个新的选择器console.log( $( "#elem" ).is( ":inView" )? "visible":"invisible" );
你也可以用它来获取所有可见的元素,例如:console.log( $( "p:inView" ).get() );
和类似事件侦听器的$("#watchThisElement")。(function(visible)){If (visible){//做这个…}其他{//做……}});
注意:由于一些原因,这是不完整的!!
- 它只处理垂直滚动
- 它不处理iframe(和可能搞砸可怕嵌套滚动)
- 没有解绑定
- 如果你观察很多元素,它可能会变慢
- 不考虑窗口大小调整
是我从我周围的类似代码中快速破解出来的。
如果jsfiddle链接失效,则实际代码和标记如下:
html:<div id="status">look at my background color!</div>
<div id="above">lots of space above ... </div>
<div id="trackMe">i'm being tracked!</div>
<div id="below">lots of space below ... </div>
css: #status{
position: fixed;
right: 0;
top: 0;
background-color: red;
}
#above, #below{
height: 800px;
background-color: yellow;
}
javascript: /**
* jquery (in)visibility plugin ...
*/
(function( $ ){
var w = $( window );
// add a custom ":inView" selector
$.expr[':'].inView = function(obj){
var $this = $(obj);
var relY = $this.offset().top - w.scrollTop();
return relY >= 0 && relY <= w.height();
};
$.fn.visibilityChange = function( fun ) {
return this.each(function() {
var elem = $(this);
var pVisible = elem.is( ":inView" );
$( document ).scroll( function( e ){
if( pVisible != elem.is( ":inView" ) ){
pVisible = !pVisible;
fun( pVisible );
}
});
});
};
})( jQuery );
$( "#trackMe" ).visibilityChange( function( visible ){
$( "#status" ).css( "background-color", visible? "green":"red" );
} );
我认为你应该在窗口上做一些技巧。Onscroll,窗口高度和div1的高度。就像在……在onscroll方法中执行一些代码…检查窗口高度,检查div1的高度,做一些计算,检查div是否在视线之外…如果这是真的…删除css
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 表追加而不附加最后一个元素
- 滚动到容器中的下一个元素-几乎到了
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript获取上一个元素的内容
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 在数组中的一个元素上设置多个值
- 无法选择除一个元素外的所有元素
- 使用jquery contains获取一个元素并添加类
- $(.class).empty总是缺少一个元素
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 如何在一个元素动画之后延迟
- jQuery转盘下一个元素没有滑入
- jquery从另一个元素中移除移除
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- 使用数据属性将HTML数据复制到另一个元素
- 如何选择给定类的上一个元素
- 动态修改一个元素,使其与给定的选择器匹配