2012-06-08 88 views
0

想要在$(window).resize和$(“#foo”)。scroll上触发相同的函数。

http://jsfiddle.net/ySukf/1/

需要#stick坚持的#foo顶部。问题在于,滚动时以及调整窗口大小时,#stick的位置会有点跳动。任何帮助?

+0

我不太明白你的'#DIV anchor'做什么... – Eric

+0

@Eric的'#anchor当'#stick'被'position:fixed'从文本流中取出时''div有压低内容的数量(等于'#stick'的高度)' – asymptote

+0

啊,我现在明白了。 – Eric

回答

2

Here's a solution

首先,我们增加两个容器 - 一个.content DIV中#foo.inner DIV中#stick

<div id="foo"> 
    <div class="content"> 
     <p>Lorem ipsum dolor sit amet.</p> 
     <div id="stick"> 
      <div class="inner">stick</div> 
     </div> 
     <p>...</p> 
    </div> 
</div>​ 

注意#anchor走了。

的容器中的CSS被一分为二:

#foo { 
    position: relative; 
    margin: 50px auto; 
    width: 200px; 
    height: 200px; 
} 
#foo .content { 
    width: inherit; 
    height: inherit; 
    overflow: auto; 
} 

而且我们采用以下的#stick。内框从外部继承它的大小。

#stick { 
    width: 100px; 
    height: 50px; 
} 
#stick .inner { 
    width: inherit; 
    height: inherit; 
    background: pink; 
} 
#stick.stuck .inner { 
    position: absolute; 
    top: 0; 
} 

几乎一切都需要在CSS护理 - JavaScript是:

$(document).ready(function() { 
    $("#foo .content").scroll(stickyTop); 
    $(window).resize(stickyTop); 
}); 

function stickyTop() { 
    //position is now relative to #foo 
    if ($("#stick").position().top < 0) 
     $("#stick").addClass('stuck'); 
    else 
     $('#stick').removeClass('stuck'); 
}​ 
+0

工程就像一个魅力。谢谢@Eric。 – asymptote

+0

顺便说一句,这是我所需要的:http://dl.dropbox.com/u/1435947/so/i/index.html – asymptote

+0

不错,这也是我的最终解决方案,但这看起来更干净:) –

相关问题