2012-08-15 140 views
5

我有一個< div id ='map'>地圖,當用戶向下滾動時滑動。然而,它似乎讓地圖永遠滾動,永遠不會讓用戶真正到達頁面的底部(有一個頁腳)。設置窗口滾動動畫的CSS值限制

我想要做的是得到< div>停止滾動,當它到達另一個動態大小(高度是變量)< div>的末尾。這兩個< div> s是並列在同一行中。

這裏是我使用,使用戶的滾動右邊的div移動的JavaScript代碼:

$(function() { 

    var $sidebar = $("#map"), 
     $window = $(window), 
     offset  = $sidebar.offset(), 
     topPadding = 15; 

    $window.scroll(function() { 
     if ($window.scrollTop() > offset.top) { 
      $sidebar.stop().animate({ 
       marginTop: $window.scrollTop() - offset.top + topPadding 
      }); 
     } 
     else { 
      $sidebar.stop().animate({ 
       marginTop: 0 
      }); 
     } 
    }); 
}); 
+1

哎......你有沒有HTML? – CraftyFella 2012-08-15 14:57:26

+0

它使用Twitter Bootstrap。在右側有一個ID爲'map'的Google Map。 – David 2012-08-15 15:25:25

回答

4

不能使用animate()方法與滾動功能會造成衝突,因爲滾動值會改變的,和jQuery不能無限重複相同的動畫。停止也不會挽救這個問題,或者我無法做到這一點。

而我suggest to use variationif陳述。

Here is not working animate sample with animate usage.

Here is same example working with css method.

$(window).scroll(function() { 
    var scrollVal = $(this).scrollTop(); 
    if (scrollVal > offset.top) { 
     $sidebar.css({ 
      'margin-top': (($window.scrollTop() - offset.top) + topPadding) + 'px' 
         //added +'px' here to prevent old internet explorer bugs 
     }); 
    } else { 
     $sidebar.css({'margin-top':'0px'}); 
    } 
}); 

注意:如果你想擴展您如果與else if語句,不要用else,它會創建太大沖突。對我來說,我對這個問題非常滿意。

UPDATE:

您可以approuch改變的極限計算過。我想你要修復的資產淨值和你的HTML是這樣的:

<div class="wrapper"> 
    <div class="header">header</div> 
    <span id="subnav">hold this</span> 
</div>​ 

和jQuery的計算應該是這樣的: Here is working jsFiddle.

$(document).ready(function() { 
    $(window).scroll(function() { 
     var headerH = $('.header').outerHeight(true); 
     //this will calculate header's full height, with borders, margins, paddings 
     console.log(headerH); 
     var scrollVal = $(this).scrollTop(); 
     if (scrollVal > headerH) { 
     //when scroll value reach to your selector 
      $('#subnav').css({'position':'fixed','top' :'0px'}); 
     } else { 
      $('#subnav').css({'position':'static','top':'0px'}); 
     } 
    }); 
});​ 
+0

現在它什麼都不做。我覺得這是因爲有一個可變的問題。想法? – David 2012-08-15 15:24:03

+0

你的計算太麻煩了,我更新了我的答案。 – 2012-08-15 15:36:56