2013-07-10 252 views
0

TL; DR:如何強制IE7加載所有被滾動div隱藏的元素?IE7不會加載滾動div內的內容,直到滾動

我正在構建一個「可摺疊」菜單來瀏覽一組頁面。這個菜單有兩個狀態爆炸和爆炸。
菜單項就像一本書的章節一樣,隨着用戶進入內容,「主動」菜單項向下移動。
在頁面加載時,我想讓項目所在的<div>立即向下滾動(!)到活動菜單項,減去一些偏移量。與往常一樣,這對Chrome和ff完美起作用,但在ie7上不起作用。

在爆炸狀態下,看起來ie7並不打擾在頁面加載時不可見的情況下「加載」項目。發生什麼事是ie7啓動沒有滾動條(或一個非常小的)的菜單div。當我將scrollTop設置爲所需的數量。 div向下滾動,直到滾動條'碰到'底部的div',然後ie7開始加載下一個比特的內容,並且我可以進一步滾動,直到找到另一個'底部'等。

我設法通過使用長度爲1000ms的動畫(只是選擇了一個數字)來解決此問題。它不符合指定的要求(並且看起來很醜),我不知道我可以如何強制ie7在請求之前加載此內容,因爲它似乎沒有加載它。

IE7用戶是我們最大的目標羣體,所以沒有跳過這個。並且讓沒有javascript的用戶可以使用它是一個巨大的優勢。

在內爆狀態下沒有問題,我嘗試在爆炸狀態下使用部分爆裂狀態CSS,稍後將它們設置爲正確的值,但沒有幫助。

下面是一些代碼:

scrollToCurrent = function(length){ 
    var prev = $("div.scroller div.selected").prev(); 

    // Check if previous exists 
    if($(prev).length > 0) { 
     // number of previous items * height of an item - half an items height 
     var scrollY = ($(prev).prevAll().length * $(prev).outerHeight()) - ($(prev).outerHeight()/2); 

     if(length === 0) { 
      $("div.scroller").scrollTop(scrollY); 
     } else { 
      $(".scroller").animate({ 
       scrollTop : scrollY 
      }, length); 
     } 
    } 
}; 

如果你需要更多的,讓我知道。

編輯: 基本的jsfiddle: http://jsfiddle.net/AmazingDreams/keeUY/ http://jsfiddle.net/AmazingDreams/keeUY/embedded/result/

+2

'IE7用戶是我們最大的目標羣體 - 嚴重嗎?你有一個悲傷的現實。順便說一句,你已經嘗試過一些插件?我知道,這不是你真正的問題,但可以節省時間 - 即使在與保守派人士合作時也是如此。要完成,[請看這裏](http://manos.malihu.gr/jquery-custom-content-scroller/) - 這是一個非常好的選擇。最後,爲了幫助你真正的問題,你可以發佈一個jsFiddle嗎? –

+0

'IE7用戶是我們最大的目標羣體'我認爲你是唯一擁有IE7的人...... 0.8%擁有IE7 ... –

+0

這0.8%是我們的目標羣體,我無法提供幫助。我會看看我能不能把一個jsFiddle放在一起。並仔細看看這個插件。 – AmazingDreams

回答

0

UPDATE

最終的解決方案被證明是非常簡單的。由於沒有任何工作,修復一個情況打破了另一個(有沒有選擇的項目是否最初可見的主要區別)我決定只是猛擊sh * t滾動條:

我刪除了所有舊的'修復

scrollToCurrent = function(length){ 
     var prev = $("div.scroller div.selected").prev(); 

     // Check if previous exists 
     if($(prev).length > 0) { 
      // number of previous items * height of item - half an items height 
      var scrollY = ($(prev).prevAll().length * $(prev).outerHeight()) - ($(prev).outerHeight()/2); 

      if(length === 0) { 
       var i = 0; 
       var maxpushes = 100; 

       // Push just as long as needed to get the scrollbar to where we want it to (fixes ie7 issue) 
       while($("div.scroller").scrollTop() < scrollY) { 
        $("div.scroller").scrollTop(scrollY); 

        // Make sure it can never turn into an endless loop 
        i++; 
        if(i > maxpushes) { 
         break; 
        } 
       } 
      } else { 
       $(".scroller").animate({ 
        scrollTop : scrollY 
       }, length); 
      } 
     } 
    }; 

OLD非工作嘗試

我設法‘修復’它通過把這個作爲一個附加項目:已更新修正下方

<div class="cycle inactive"> 
     <?php // I fix IE7 issues ?> 
    </div> 

我認爲<div>中的換行符佔了99%的工作量。所以保持那條線。

我不認爲這是'''修復,我會離開這個問題打開,首先我想這個東西穩定一段時間。

編輯:

那麼,這個「重大更新」剛一轉身的問題(即崩盤​​停止工作,爆炸工作)。更新修正:

<?php // Only show if menu starts exploded ?> 
<?php if(! $imploded): ?> 
    <div class="cycle inactive"> 
     <?php // I fix IE7 issues ?> 
    </div> 
<?php endif; ?>