SlickGrid.js Internet Explorer 的视口可见性切换问题
SlickGrid.js viewport visibility toggling issues with Internet Explorer
我正在使用 SlickGrid.js 库,它非常棒!
目前唯一的主要问题是 Internet Explorer(已在 9、10 和 11 中确认),但符合标准的浏览器如 Chrome 和 FF 工作正常。
问题: 当网格滚动然后隐藏然后在 IE 中重新显示时,滚动位置重置为网格顶部,并且 viewport/data 要么切断或完全隐藏(取决于滚动量)。
这里有一个 fiddle 演示 SlickGrid.js IE 错误(使用作者的 simple example 1):
http://jsfiddle.net/crwxoc17/1/
有人对此有通用的修复或补丁到 slick grid 吗?
我可以调用 grid.resizeCanvas()
来解决这个问题,但它会将滚动条重置到顶部,并且为了处理 Internet Explorer 而对每个网格都执行此操作非常烦人。
半工作修复,但仍然搞砸了 scrolltop
:
function onShowGrid1() { grid.resizeCanvas(); }
(正在查看JS代码,但我还没有确认这个bug是微软的还是SlickGrid的)
此问题适用于 IE 中溢出设置为滚动或自动且其可见性已切换的任何元素。这里有一个简单的例子:https://jsfiddle.net/qkhxL6r8/4/
就是说,如果您希望保留 scrollTop 位置,您可以扩展 SlickGrid 或创建一个包装器 a class 订阅 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;
}
});
如果您使用的是远程数据提供程序,则可以使用 grid.onViewportChanged.notify()
为更新的 scrollTop 触发 ensureData
我正在使用 SlickGrid.js 库,它非常棒!
目前唯一的主要问题是 Internet Explorer(已在 9、10 和 11 中确认),但符合标准的浏览器如 Chrome 和 FF 工作正常。
问题: 当网格滚动然后隐藏然后在 IE 中重新显示时,滚动位置重置为网格顶部,并且 viewport/data 要么切断或完全隐藏(取决于滚动量)。
这里有一个 fiddle 演示 SlickGrid.js IE 错误(使用作者的 simple example 1):
http://jsfiddle.net/crwxoc17/1/
有人对此有通用的修复或补丁到 slick grid 吗?
我可以调用 grid.resizeCanvas()
来解决这个问题,但它会将滚动条重置到顶部,并且为了处理 Internet Explorer 而对每个网格都执行此操作非常烦人。
半工作修复,但仍然搞砸了 scrolltop
:
function onShowGrid1() { grid.resizeCanvas(); }
(正在查看JS代码,但我还没有确认这个bug是微软的还是SlickGrid的)
此问题适用于 IE 中溢出设置为滚动或自动且其可见性已切换的任何元素。这里有一个简单的例子:https://jsfiddle.net/qkhxL6r8/4/
就是说,如果您希望保留 scrollTop 位置,您可以扩展 SlickGrid 或创建一个包装器 a class 订阅 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;
}
});
如果您使用的是远程数据提供程序,则可以使用 grid.onViewportChanged.notify()
为更新的 scrollTop 触发 ensureData