Aligatro
@Aligatro
Turn food and coffee into software...

Как правильно переписать скрипт что-бы устранить лаги?

Доброго времени суток, друзья =)

Пожалуй перейду сразу к делу. В общем и целом на сайте содержится слайдер реализованный через bootstrap api. К этому слайдеру я попытался прикрутить эффект увеличения картинки (к сожалению как сделать плавное скольжение я не придумал) как в revolution slider. По факту из-за 10 строк js кода я превратил свой сайт в неповоротливого монстра, которого хотелось бы вылечить при этом оставив эффект плавного увеличения.

Как я это сделал... Просьба не пугаться -)

Итак имеются разные меняющиеся картинки которые помещены в тело слайдера, к каждой картинке прописан базовый scale в 1 единицу. И есть класс out в которому значение scale равняется трем.
.carousel-inner > .out  {
	transform: scale(3);
	transition:all 50s ease-in;
}

По задумке класс out должен появляться сразу после появления новой картинки, после чего начинается медленное увеличение изображения, создавая эффект как на revo. Для того чтобы добавить класс out к картинкам, я при помощи js привязал событие. Выглядит это так:
//инициируем событие через 500мс после появления картинки (сразу нельзя ибо она сразу появляется со scale(3))
$('#home-slider').on('slid.bs.carousel', function () {
		setTimeout(function () {
		$('#home-slider .active').addClass('out');
		}, 500);
})
//удаляем класс
$('#home-slider').on('slide.bs.carousel', function () {
		$('#home-slider .active').removeClass('out');
})

В итоге:

Ну в общем работать то все работает, но судя по devtool таймлайну, в момент этого приближения и работы js, скорость рендеринга падает до 30fps. Если есть возможность как-то убрать лаги и оставить эффект или установить более ровнорукий скрипт я буду счастлив =)

Всем огромное спасибо за ответы и потраченное время =)
  • Вопрос задан
  • 328 просмотров
Решения вопроса 1
paradokso
@paradokso
Начинающий фронт-эндер
ну в том участке кода Джееэс вроде нет ничего такого, что будет грузить.
Другое дело применение трансформации. Может у вас разрешение изображений большое? Попробуйте scale3D.
+ попробуйте транзишн вот так : transition:all 50s ease-in 0.5s;, тогда возможно можно обойтись без setTimeout
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Aligatro
@Aligatro Автор вопроса
Turn food and coffee into software...
Спасибо за помощь. В итоге проблема скрывалась в немного кривой реализации затемняющего layout'a который был положен на фон fixed картинки. Переписал этот участок и лаги прекратились.

FPS к сожалению по прежнему иногда проседает до 30, но это уже не так критично. Все же проигрывание scale анимации жрет чертовски много ресурсов -)) Верните престо! =)

Еще раз огромное спасибо -)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы