Как с помощью jQuery можно изменить положение и размер объекта при прокрутке внутри блока?

Как можно увеличить и переместить объект за пределы в зависимости от скролла?

У меня есть задний фон дороги (background) и передний план с автомобилем (.car), который имеет абсолютное позиционирование. Я хочу, чтобы автомобиль перемещался вперед и немного увеличивался, чтобы создать эффект движения, но только когда автомобиль находится в поле зрения пользователя. То есть я хочу, чтобы блок двигался внутри контейнера, в зависимости от прокрутки пользователя, только когда он виден.

Вот код, который я попробовал, но он не дает нужного результата. Я не сильно разбираюсь в jQuery.

$(window).on('scroll', function() {
    car = $('.car');
    scrollTop = $(this).scrollTop();
    changed = scrollTop - $('.road').outerHeight();
    changed2 = (scrollTop - $('.road').outerHeight()) / 5;
    var scrollBottomCar = $('.road').height() - car.offset().top - car.outerHeight();

    car.css('transform', 'translateY('+changed+'px) translateX(-'+changed2+'px)');
});

Спасибо заранее за помощь!
  • 16 ноября 2023 г. 11:30
Ответы на вопрос 2
Для достижения желаемого эффекта движения и увеличения автомобиля при прокрутке внутри блока, вам понадобится выполнить несколько шагов:

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

```javascript
car = $('.car');
var initialTop = car.offset().top;
var initialLeft = car.offset().left;
var initialSize = car.width();
```

2. В обработчике события прокрутки выполните следующие действия:

```javascript
$(window).on('scroll', function() {
  // Получите текущее значение прокрутки
  var scrollTop = $(this).scrollTop();
  
  // Проверьте, если автомобиль находится в поле зрения пользователя
  if (scrollTop >= initialTop && scrollTop <= initialTop + $('.road').height()) {
    // Вычислите новое положение и размер автомобиля на основе прокрутки
    var changedTop = scrollTop - initialTop;
    var changedLeft = changedTop / 5;
    var changedSize = initialSize + 0.1 * changedTop;

    // Установите новые значения положения и размера автомобиля
    car.css({
      'top': changedTop + 'px',
      'left': initialLeft - changedLeft + 'px',
      'width': changedSize + 'px'
    });
  }
});
```

В этом коде мы сначала определяем начальные значения для положения и размера автомобиля. Затем в обработчике события прокрутки мы проверяем, находится ли прокрутка в пределах видимости автомобиля, и, если да, вычисляем новые значения положения и размера на основе прокрутки. Затем мы устанавливаем эти значения с помощью CSS-свойств для автомобиля.

Надеюсь, это поможет вам достичь желаемого эффекта!
.body добавить стиль "margin: 0; padding: 0;" чтобы убрать отступы и поля|
.section добавить стиль "height: 200vh;" чтобы создать прокрутку|
.container добавить стиль "position: absolute; bottom: 0; left: 50%; transform: translateX(-50%);" чтобы разместить контейнер по центру внизу|
.bg-dark добавить стиль "overflow: hidden;" чтобы скрыть все, что выходит за пределы контейнера|
.car добавить стиль "position: absolute; bottom: 0;" чтобы разместить автомобиль внизу контейнера|
.scroll проверить, если видимая часть страницы перекрывается секцией на всю высоту, то переход на следующую секцию|
.scale изменить размер автомобиля в зависимости от прокрутки секции|
.translateX изменить положение автомобиля по оси X в зависимости от прокрутки секции|
.transform применить изменения размера и положения к автомобилю|
Похожие вопросы