2010-11-16 247 views
2

所以即时通讯基本上使用链接,滚动浏览一系列div选择正确的。 即点击开心,并滚动到'开心'div,JQuery,ScrollTop滚动到最后div而不是ID div

但是,滚动似乎没有去它的链接,但滚动到列表中的第三个div。

继承人的代码:

<div id="portfoliowrapper"> 
     <div class="title">My Portfolio</div> 
     <div class="row1"><a id="kazookilink" href="#">Kazooki</a></div> 
     <div class="row1"><a id="uodlink" href="#">Universe of Downhill</a></div> 
     <div class="row1"><a id="kudialink" href="#">Kudia</a></div> 
    </div> 
    <div id="description"> 
     <div id="top">description</div> 
     <div id="kazooki">kazooki</div> 
     <div id="uod">Universe of Downhill</div> 
     <div id="kudia">kudia</div> 
    </div> 



<script type="text/jscript"> 

     function goToByScroll(id){ 
     id = id.replace("link", "");  
     $("#description").animate({scrollTop: $("#"+id).offset().top},'slow'); 
     }; 

     $(".row1 > a").click(function(e) { 
     // Call the scroll function 
     goToByScroll($(this).attr("id"));   
     }); 

</script> 

回答

1

需要使用position(),而不是offset(),也需要设置#descriptionposition:relative

那么你需要考虑当前的scrollTop

最后您需要取消默认点击行为。

完整示例在http://www.jsfiddle.net/gaby/TneA6/

+0

这非常有效! – Jonathan 2010-11-18 13:08:07

+0

工作很好。谢谢- – Downpour046 2013-02-25 02:02:21

0

这可能只是滚动到页面的最底部 - 因为页面结束它无法使div的顶部与页面的顶部。尝试在页面底部添加一堆空白空间(<div style='height: 1000px;"></div>或其他),看看它是否仍然会导致意外的行为。

+0

好的,IVE试过了。点击链接时仍然滚动到div的底部。但是现在,当链接重新点击时,它会滚动到第一个div。 – Jonathan 2010-11-16 20:52:40

0

我猜你需要防止点击的日常行为:

$(".row1 > a").click(function(e) { 
     // prevent default behaviour 
     e.preventDefault(); 
     // Call the scroll function 
     goToByScroll($(this).attr("id"));   
    }); 

只是猜测,但。

+0

本来有这个,但没有区别。只是尝试再次添加它并进行测试,并没有区别与此。 – Jonathan 2010-11-16 20:54:23