2015-05-14 28 views
0

我正在使用SlickGrid.js庫,它非常棒!SlickGrid.js視口可見性與Internet Explorer切換問題

目前唯一的主要問題是Internet Explorer(已在9,10和11中確認),但符合標準的瀏覽器(如Chrome和FF)可以正常工作。

問題:當網格滾動然後隱藏然後在IE中重新顯示時,滾動位置重置爲網格頂部,並且視口/數據被切斷或完全隱藏(取決於滾動量) 。

這裏是一個演示SlickGrid.js IE漏洞(使用作者的simple example 1)小提琴:

http://jsfiddle.net/crwxoc17/1/

任何人對此有一個通用的修補程序或補丁光滑網格?

我可以打電話給grid.resizeCanvas()來解決問題,但它會將滾動條重置爲頂部,而且對於每個單獨的網格來處理Internet Explorer都非常煩人。

半工作的修復,但仍然螺絲了scrolltop

function onShowGrid1() { grid.resizeCanvas(); }

(查看JS代碼了,但我還沒有證實這個錯誤是微軟或SlickGrid的)

回答

2

這問題適用於IE中的溢出設置爲滾動或自動並且其可見性被切換的任何元素。這裏有一個簡單的例子:https://jsfiddle.net/qkhxL6r8/4/

這就是說,如果你想保留scrollTop位置,你可以擴展SlickGrid或者創建一個包裝器來訂閱onScroll事件,記錄scrollTop值並設置它在顯示或隱藏網格時在視口元素上。我修改您的示例代碼作爲概念證明這裏:http://jsfiddle.net/h9cu2cmp/4/

var lastScrollTop; 
var scrollTimeout; 

function updateScrollTop(e, args){ 

    clearTimeout(scrollTimeout); 
    scrollTimeout = setTimeout(function(){ 
     lastScrollTop = args.scrollTop; 
    }, 30); 
} 

//... 

grid.onScroll.subscribe(updateScrollTop); 

$('body').on('click', '.toggle-button', function(){ 
    $("#myGrid").toggle(); 
    if(lastScrollTop !== undefined){ 
     $("#myGrid").find('.slick-viewport').get(0).scrollTop = lastScrollTop; 
    } 
}); 

如果您使用的是遠程數據提供商可以觸發ensureData的更新scrollTop的使用grid.onViewportChanged.notify()

+0

沒錯,所以它是一個IE錯誤。人物。在Windows Phone 8.1 w/IE 11上也有同樣的問題。謝謝你的回報 – nothingisnecessary