@FalseCode

Как сделать такой эффект параллакс?

Всем привет.

У меня на сайте много блоков, по наведению на которые двигаются картинки.

Проблема в том что когда я навожу на блок то у меня картинки резко переходят к позиции которая считается через js.

Вопрос в том что я хочу двигать картинки относительно их изначального положения, так должно быть более плавно.

Прикрепляю пример кода



Еще прикол в том что на jsfiddle все работает так как я хочу кроме того что двигается только 1 элемент. А их может быть несколько
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@FalseCode Автор вопроса
Забыл написать...
Решил этот вопрос.
Помог "target.getBoundingClientRect();"
Прикрепляю код. Его можно почистить, у меня на это времени не хватило уже, но я уверен что можно уменьшить код и облегчить
function moveElement() {
    $('[data-parent-move]').each(function() {
        var $this = $(this),
            object = $(this).find('[data-move]'),
            valueX,
            valueY,
            posX,
            posY;

        $(this).on('mouseenter', function(){
            $(this).find('[data-move]').each(function(){
                posX = parseInt($(this).css('left'),10);
                posY = parseInt($(this).css('top'),10);
                moveOnBoard($(this), posX, posY);
            })
        })

        function moveOnBoard($this2, posX, posY){
            $this.on('mousemove', function(e){
                if(e.target.closest('[data-parent-move]')){
                  var target = e.target.closest('[data-parent-move]');
                  var targetCoords = target.getBoundingClientRect();
                  var xCoord = e.clientX - targetCoords.left;
                  var yCoord = e.clientY - targetCoords.top;
                  if ($this2.attr('data-move') == 'plus') {
                      valueX = (e.pageX * -1 / $this2.attr('data-move-speed'));
                      valueY = (yCoord * -1 / $this2.attr('data-move-speed'));
                      moveSide($this2, valueX, valueY, posX, posY);
                  } else {
                      valueX = (e.pageX * 1 / $this2.attr('data-move-speed'));
                      valueY = (yCoord * 1 / $this2.attr('data-move-speed'));
                      moveSide($this2, valueX, valueY, posX, posY);
                  }
                }
            })
        }
    })
}

function moveSide(object, valueX, valueY, posX, posY){
    object.css({
        'transform'  : 'translate(' + valueX + 'px,' + (valueY) + 'px)',
        'transition' : 'all .2s',
        'transition-timing-function' : 'ease-out'
    })
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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