Мне нравится думать, что я не макет, но я не могу заставить свой jQuery горизонтальный слайд-шоу анимировать гладко особенно в FireFox (на Mac). У кого-либо есть совет?
Анимация делается как так:
$('#lookbook').stop().animate({left: -((lookbook-1)*825)+'px'}, { duration: 800, complete: cap_fade(1)});
Ссылка в качестве примера:
В Chrome анимация выглядит гладкой. Однако я считаю, что есть несколько вещей, которые вы можете сделать для улучшения плавности:
Во-первых, можно заранее загрузить все изображения, как вы делаете здесь (вверху). Однако отображение их всех сразу, как в «Ссылка на пример» , ухудшает производительность, поскольку все они анимируются одновременно:
<div id="lookbook">
<div><img src="/q_images/lib/lookbook/1.jpg"></div>
<div><img src="/q_images/lib/lookbook/2.jpg"></div>
...
<div><img src="/q_images/lib/lookbook/15.jpg"></div>
</div>
Вместо этого вы можете просто указать следующий и предыдущий изображение по обе стороны от текущего изображения, но тогда не оставляйте остальные изображения на странице, пока они не понадобятся. (Хотя их предварительная загрузка все еще хороша.)
Другие вещи, которые могут немного улучшить производительность, - это такие вещи, как следующее:
Я тестировал Firefox, Chrome (dev) и Safari в Windows, и анимация заикается во всех браузерах (но больше в FF).
Чтобы повысить производительность JavaScript, вы можете избавиться от всех вызовов getElementById или $ ("div # mydividentyfier"). Если вы сохраните их в переменных, они будут кешированы. Пример: Это может немного повысить производительность:
var lookbook = $('#lookbook');
var look_caption = $('#look_caption');
if (lookbook.length) {
lookbook.width(lookbook).width()*$('#lookbook img').length)
if (look_caption) {
look_caption.html(lookcaps[0]);
look_caption.fadeIn();
}
Вместо:
if ($('#lookbook').length) {
$('#lookbook').width($('#lookbook').width()*$('#lookbook img').length)
if ($('#look_caption')) {
$('#look_caption').html(lookcaps[0]);
$('#look_caption').fadeIn();
}
Я также рекомендовал бы использовать URI данных для изображений, так как это уменьшает количество httpRequests, которые вы должны сделать для получения страницы загружен.
Вы также можете использовать это
.animate({left:'-=825'}); //next
//and
.animate({left:'+=825'}); //previous
вместо
.animate({left: -((lookbook-1)*825)+'px'});