2014-09-19 57 views
0

我一直在嘗試幾個小時來實現我的項目上的平滑滾動,但似乎我無法使其工作。固定定位容器上的平滑滾動

我已經發現問題出在哪裏。如果錨標籤所在的容器位於固定位置或絕對位置,則我所嘗試的任何操作都不起作用。

我已經在過去的項目中用不同的jquerys庫實現了平滑的scrooling,沒有任何問題,但這是我第一次必須將容器放在固定或絕對位置上。

我找到的最簡單的庫是「smoothscroll.js」,指令here。 (但我已經嘗試了很多,我覺得與他們同樣的問題

我的HTML(簡化爲打一個比方):

<div class="contenido"> 
    <a name="Castellana" style="font-size: 50px; color: Red; background-color: yellow; display: block;">LINK1</a> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 

    <a name="Florbaja" style="font-size: 50px; color: Red; background-color: yellow; display: block;">LINK2</a> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 


    <a name="Staff" style="font-size: 50px; color: Red; background-color: yellow; display: block;">LINK3</a> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
    <br /> 
</div> 

和我的CSS:

.MenuSuperiorSeccion {  
    height:30px; 
    background-color:rgba(220,220,220,0.9); 
    position:fixed; 
    top:30px; 
    text-align:center; 
    overflow:hidden; 
    text-align:left; 
    } 
.MenuSuperiorSeccion ul {margin-top:5px;}  
.MenuSuperiorSeccion li { 
    display:inline-block; 
    text-transform:uppercase; 
    margin-left:20px;  
    font-weight:300; 
    } 
.MenuSuperiorSeccion li a {color:#666;} 
.MenuSuperiorSeccion li a:hover {color:#fff; font-weight:400; line-height:0;} 


.contenido {  
    background-color:aqua; 
    position:fixed; 
    bottom:90px; 
    top:90px; 
    width:400px; 
    overflow:auto; 
    padding:20px; 
    text-align:left; 
    } 

這裏你有JSfiddle

正如你所看到的,雖然沒有js在播放錨鏈接工作得很好,如果你有任何人可以幫助我實現一個平滑的滾動到這些錨點我會我永遠gratefull。我非常渴望atm。

注:(通常只要我努力使圖書館的工作,主播停止工作)

感謝,並請原諒我的英語很差

編輯:從下面的uncorrect答案邁出的又一例子。

這工作得很好:http://jsfiddle.net/vdv9qko8/4/(用jQuery)

如果我添加到容器:

.fixed { 
    position:fixed; 
    top:120px; 
    height:400px; 
    overflow:auto; 
} 

它停止工作:http://jsfiddle.net/vdv9qko8/3/

回答

1

首先,在第一個小提琴中,您嘗試瀏覽與name的鏈接,應將其替換爲id

其次,在你最後一個小提琴中,你試圖animatehtmlbody標籤而不是.fixed div。

下面是第一小提琴的解決方案:

$("a").click(function(event){ 

    event.preventDefault(); 
    navto = $($(this).attr("href")).offset().top + $('.contenido').scrollTop() - 90; 

    if($($(this).attr("href")).offset().top != 90){ //prevent scroll to current link 
     $('.contenido').animate({ 
      scrollTop: navto 
     }, 800 
     ); 
    } 

}); 

直播DEMO

Solution to last fiddle

+0

Ty太多了。如果可以的話,我會給你更多的代表。我真的推測它 – 2014-09-19 13:11:29

+0

請將您的想法轉發給此門戶的權限:P – 2014-09-19 13:15:04

-1

您可以使用jQuery的這一要求:

$(function() { 
    $('a[href*=#]:not([href=#])').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
     var target = $(this.hash); 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
     $('html,body').animate({ 
      scrollTop: target.offset().top 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 

哈瓦看看: DEMO

+0

不,你不能。我試過(正如我所說)有很多種方法可以做到這一點,那就是其中之一。我做了一個jsfiddle ...如果你包含這個代碼,你可以看到這不會解決我的問題。事實上,正常工作atm(沒有轉換)的鏈接停止工作。 – 2014-09-19 10:37:58

+0

http://jsfiddle.net/vdv9qko8/2/ – 2014-09-19 10:41:28

+0

哦,我的...請閱讀問題的標題。我知道如何在普通容器上進行這項工作。我想讓它在我的固定或絕對容器上滾動:自動。如果您想製作小提琴,請使用MINE並嘗試在此處使用。 – 2014-09-19 10:46:00