@GaryAnikin

Как осуществить анимацию большой таблицы?

Здравствуйте.

Задача:
Сделать подвижную таблицу(движущуюся вверх) как в аэропортах(табло с рейсами).

Решение:
Один div блок, в котором таблицы, перед каждой таблицей еще по div блоку как заголовки для этих таблиц.

Уменьшаем свойство top у главного div блока и при каждой итерации увеличиваем значение top первого div блока заголовка. При прикосновении первого и второго заголовков перестаем увеличивать значение top первого заголовка и начинаем увеличивать это значение для второго.
Код:
function MoveDownTable(selector,divisionNum){
selector.offset(function(i,val){
    return {top:val.top - 0.5};
});

var currentDivision = $('#div'+(divisionNum));
var nextDivision = $('#div'+(divisionNum+1));
var currentDivisionHeight=currentDivision.height()+10;


if (nextDivision.offset()!=undefined){  //Если найден следующий заголовок.
    if (!(nextDivision.offset().top-currentDivisionHeight<=currentDivision.offset().top)){ //Пока заголовки не соприкоснулись.
        stopMove=currentDivision.offset().top;     //Запоминаем положение активного заголовка и двигаем его вниз.
        MoveDownDivision(currentDivision);
    }
    if (nextDivision.offset().top<=stopMove) { //Как только следующий заголовок встает на место активного.
        divisionNum++;                          //Делаем его активным и на всякий случай устанавливаем его в правильное положение.
        nextDivision.offset(function(i,val){
            return {top:val.top};
        });
    }
} else {
    MoveDownDivision(currentDivision); // просто двигаем активный заголовок
}

var footerDivHeight=$('.mainFooter').height()+10;

if (MainDiv.offset().top>(MainDiv.height()-$(window).height()+footerDivHeight)*-0.5){ //Если таблица не вмещается в видимую область, двигаем её.
    requestAnimationFrame(function() {MoveDownTable(MainDiv,divisionNum);}); 
}else{ //Если прошла вся таблица, ждем 3 секунды и загружаем новую.
    setTimeout(FadeOutMain,3000);
}
}

function MoveDownDivision(currentDivision){
currentDivision.offset(function(i,val){
    return {top:val.top + 0.5};
});
}

Проблема:
Нужно, чтобы это двигалось плавно. Но при разрешении экрана 1920 на 1080 (экран расположен вертикально) и 4 таблицах по ~60 строк. Всякая плавность исчезает, неттопы с NVIDIA ION не справляются.
Вопрос собственно такой - Это из за моего кривого кода или на таких мощностях не возможно в Google Chrome рендерить движение этих таблиц плавно?

Заранее спасибо и прошу прощения за смысловую кашу в содержании.
  • Вопрос задан
  • 2650 просмотров
Пригласить эксперта
Ответы на вопрос 3
Ответ написан
Комментировать
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
jsfiddle.net/iiil/rvm4U/29
Вот пример со scroll
Он требует доработки. Но вроде бы не тупит.
В доработке не вижу смысла, так как Вам может не подойти, но посмотрите.
Будут вопросы - пишите.
Ответ написан
Комментировать
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
А почему не используете скролл? Может я задачу не понял, но должно быть что-то вроде вертикального слайдера?
Например весь блок с ним составляет высоту 500px, правильно ли я понял, что таблица может быть больше 500px, при этом все время, пока ползет таблица должен быть виден ее заголовок. Так?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы