Резкая анимация на iOS и Android

222
06 октября 2018, 19:40

Я сделала анимацию при клике, и на компьютере она выглядит хорошо. Проблема в том что на iOS и Android девайсах анимация очень резкая, и выглядит рвано. Очень долго искала способы это исправить, но до сих пор не смогла найти решения. Вот мой JS, полностью код можно увидеть на jsfiddle.

$('.project-image').on('click', function() {
var $this = $(this);
var img = $(this).attr('id');
var minusLeft = $(this)[0].offsetLeft - 8;
var minusTop = $(this)[0].offsetTop - 80;
$('.show-description').fadeOut(600, function () {
    $('.hide-description').fadeIn(600);
});
$('.flex-container img').not('#' + img).animate({
    opacity: 0,
}, 200, "linear", function() {
  $this.css({
    top:'-'+minusTop+'px',
    left:'-'+minusLeft+'px'
    })
setTimeout(function() {
    $('.flex-container img').not('#'+img).hide();
    $this.css("position", 'static');
    $('.flex-container').css('flex-flow', 'column wrap');
    $('.'+img+'-text-block').show();
    $('.'+img+'-text-block').animate({
        opacity:1
      }, 100)
}, 600)
});
})
$('.hide-description').on('click', function() {
$('.hide-description').fadeOut("slow", function () {
    $('.show-description').fadeIn(1000);
});
$('[class*="-text-block"]').hide()
$('.flex-container').css('flex-flow', 'row wrap')
$('.flex-container img').css({
    position: 'relative',
    top:0,
    left:0
})
$('[class*="-text-block"]').css('opacity', '0');
$('.flex-container img').animate({
    opacity: 1,
}, 400)
$('.flex-container img').show()
})
Answer 1

Во-первых, для анимации всегда и везде желательно использовать только свойства opacity и transform. Тот кусок кода, который у вас отвечает за перемещение элементов стоит переписать на:

$this.css({
  transform: 'translate(' +minusLeft+ 'px, ' +minusTop+ 'px)'
})

...

$('.flex-container img').css({
  position: 'relative',
  transform: 'translate(0, 0)'
})

Во-вторых, используйте только последнюю версию jQuery, раз уж используете его — там метод .animate() норм оптимизирован.

READ ALSO
Как сделать плавный скролл внутри блока?

Как сделать плавный скролл внутри блока?

Есть готовый код который при нажатии на кнопки скроллит содержимое внутри блока (На чистом js)Необходимо сделать при клике плавную прокрутку...

204
Что делать с SEO в SPA приложении?

Что делать с SEO в SPA приложении?

На текущий момент есть блог в виде Rails приложенияСтраницы проиндексированы поисковиками

188
Расчёт стоимости

Расчёт стоимости

Есть скрипт (ниже), который должен по задумке на состояние checkbox - checked записывать value этого checkbox(их много) в массив, делать тоже самое с другим...

176
Particleground и Angular js

Particleground и Angular js

Когда начинаю использовать роутинг из Angular 16

181