2015-05-14 3 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 код, но я до сих пор не подтверждено, является ли ошибка Microsoft, или SlickGrid в)

ответ

2

Это проблема применяется к любому элементу в IE с переполнением, установленным для прокрутки или авто и чья видимость переключается. Здесь есть простой пример: https://jsfiddle.net/qkhxL6r8/4/

Сказанное: если вы хотите сохранить положение scrollTop, вы можете расширить SlickGrid или создать оболочку класса, который подписывается на событие onScroll, записывает значение scrollTop и устанавливает его на элементе viewport при отображении или скрытии сетки. Я изменил свой пример кода, как доказательство концепции здесь: 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

Yep, так что это ошибка IE. Цифры. Такая же проблема также отмечалась в Windows Phone 8.1 с IE 11. Спасибо за воспроизведение – nothingisnecessary