Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SlickGrid.js使用Internet Explorer切换视口可见性问题_Javascript_Jquery_Internet Explorer_Slickgrid - Fatal编程技术网

Javascript SlickGrid.js使用Internet Explorer切换视口可见性问题

Javascript SlickGrid.js使用Internet Explorer切换视口可见性问题,javascript,jquery,internet-explorer,slickgrid,Javascript,Jquery,Internet Explorer,Slickgrid,我正在使用图书馆,它非常棒 目前唯一的主要问题是Internet Explorer(在9、10和11中确认),但符合标准的浏览器(如Chrome和FF)工作正常 问题:当网格滚动后隐藏,然后在IE中重新显示时,滚动位置重置为网格顶部,视口/数据被切断或完全隐藏(取决于滚动量) 下面是一个演示SlickGrid.js IE bug的提琴(使用作者的): 有人对此有一个通用的修复程序或是光滑网格的补丁吗 我可以调用grid.resizeCanvas()来解决这个问题,但它会将滚动条重置为顶部,并且

我正在使用图书馆,它非常棒

目前唯一的主要问题是Internet Explorer(在9、10和11中确认),但符合标准的浏览器(如Chrome和FF)工作正常

问题:当网格滚动后隐藏,然后在IE中重新显示时,滚动位置重置为网格顶部,视口/数据被切断或完全隐藏(取决于滚动量)

下面是一个演示SlickGrid.js IE bug的提琴(使用作者的):

有人对此有一个通用的修复程序或是光滑网格的补丁吗

我可以调用
grid.resizeCanvas()
来解决这个问题,但它会将滚动条重置为顶部,并且只为处理Internet Explorer而对每个网格执行此操作非常烦人

半工作修复,但仍会拧紧
滚动顶部

函数onShowGrid1(){grid.resizeCanvas();}


(现在正在查看JS代码,但我尚未确认该漏洞是Microsoft的还是SlickGrid的)

此问题适用于IE中溢出设置为滚动或自动且可见性已切换的任何元素。这里有一个简单的例子:

也就是说,如果希望保留scrollTop位置,可以扩展SlickGrid或创建一个包装器类,该类订阅onScroll事件,记录scrollTop值,并在显示或隐藏网格时在viewport元素上设置它。我在这里修改了您的示例代码作为概念证明:


如果您使用的是远程数据提供程序,则可以使用grid.onViewportChanged.notify()为更新的scrollTop触发ensureData,因此这是一个IE错误。数字。在Windows Phone 8.1 w/IE 11上也注意到了同样的问题。谢谢你的批评
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;
    }
});