Почему анимация jQuery изменчивая в браузерах на основе webkit?

Я работаю с очень простой анимацией: сдвигая линию изображений влево:

$('#button').click(
    function() {
        $('div#gallery').animate({scrollLeft:'+=800px'}, 1000);
    }
);

(Предполагается, что это галерея изображений, я скрываю переполнение, чтобы показывать только одно изображение за раз.)

В любом случае, несмотря на попытки различных параметров ослабления, даже на медленных скоростях, анимация была очень изменчивой в Chrome и Safari, но всегда была гладкой в ​​Internet Explorer и Firefox. (Большинство вопросов, поднятых в Интернете, касательно IE или Firefox, являются прерывистыми!)

Я нашел причину, для меня. Это очень частный случай, который, вероятно, не будет применяться к большинству, но, возможно, это поможет кому-то независимо. Я отправлю свой ответ ниже. (Полагаю, это руководство сайта допускает это.)

Ответы

Ответ 1

Для меня это не имело значения, если это были 24-битные PNG, 8-битные PNG, GIF, JPEG и т.д., если на экране было большое изображение, были проблемы с моими анимациями. Если у вас есть элементы z-index'ed над большим изображением, попробуйте добавить этот CSS к своему элементу:

-webkit-transform: translateZ (0);

Для меня это сработало, но оно оставило анимационные артефакты.

Что окончательно разрешило это для меня было просто изменить это:

$('#myimage').animate({
    height: 0,
    top: '-=50'
}, 500, 'linear');

Для этого:

$('#myimage').animate({
    height: '-=1'
}, 1, 'linear').animate({
    height: 0,
    top: '-=50'
}, 500, 'linear');

Я только добавил небольшую анимацию размером 1 миллисекунду в начале. Мое мышление состояло в том, что это, возможно, "готовый" Chrome для реальной анимации, и это сработало. Вы можете изменить его на 20 или 50 миллисекунд, чтобы быть в безопасности.

Ответ 2

В моем случае проблема была не с кодом, а с изображениями - в частности, большими изображениями, которые были (насильственно) уменьшены с помощью свойства ширины css. Конечно, большие изображения могут потребовать больше обработки для анимации, но IE и FF, по-видимому, справляются с ними, просто уменьшившись (в моем случае изображения шириной 2000 пикселей были увеличены до 800 пикселей в ширину). Между тем, похоже, что Chrome и Safari увязли в анимации таких изображений. Как только я упаковал все мои изображения в Photoshop, на самом деле было 800 пикселей в ширину, анимации были гладкими повсюду.

Другие сведения. Я использую jQuery 1.7. Я столкнулся с проблемой для анимации самого элемента img, а также элемента div с фоновым изображением.

Ответ 3

Я понимаю, что этот поток устарел, но в интересах эффективного кодирования... я столкнулся с подобной проблемой с изменчивой анимацией с использованием Chrome недавно и в поиске решения наткнулся на этот поток (но не на FF или IE ) проследил проблему до одного из моих значков коллапса, используя png, а не gif (как только я поменял png для gif), браузер webkit не имел проблем, вызывающих плавные анимации (но как только я поменял png обратно в, мои анимации были снова рушится...)