Как использовать встроенные стили для использования transform: rotate() с react.js на свитке

#javascript #css #reactjs

#javascript #css #reactjs

Вопрос:

Создание этой страницы. У меня есть элемент, который я хочу повернуть при прокрутке. Предпочел бы использовать синтаксис react для создания этой «анимации».

 LeftGear = () =>  {
const rotate = window.scrollY / 10 % Math.PI

const divStyle = {
  backgroundColor: 'purple',
  transform: `scroll(${rotate})`,
}

return  <img
          className={this.changeClassName('circleImage')}
          src="../../assets/icons/red-gear.svg"
          alt="Circles Icon"
          style={divStyle}
        />
}

render(){
  return <LeftGear/>  
}
  

это работает, чтобы придать изображению фон, но не работает для этой прокрутки. Итак, мне интересно, что я делаю не так?

Комментарии:

1. Разве вы не должны добавлять «поворот» и «град»? поворот ()

Ответ №1:

Вращения работают с transform: rotate({n}deg) {n} номером вашего радиуса. В остальном привяжите прослушиватель событий и прослушиватель событий к окну с помощью перехвата useEffect. Вместо обновления divStyle объекта просто создайте ссылку на изображение и обновите style.transform свойство.

У React нет разумного способа справиться с этим, поэтому иногда вам просто нужно использовать какой-нибудь ванильный JS.

 import React, { useEffect, useRef } from 'react';

const LeftGear = () => {
  const imageRef = useRef();
  const divStyle = {
    backgroundColor: 'purple',
  }

  useEffect(() => {
    window.addEventListener('scroll', event => {
      requestAnimationFrame(() => {
        const rotation = window.scrollY / 10 % Math.PI;
        imageRef.current.style.transform = `rotate(${rotation}deg)`;
      });
    });
  }, []);

  return (
    <img
      ref={imageRef}
      className={this.changeClassName('circleImage')}
      src="../../assets/icons/red-gear.svg"
      alt="Circles Icon"
      style={divStyle}
    />
  )
}
  

Комментарии:

1. спасибо за ответ, проблема заключалась в значении перехода, 🙂 конечно, следует использовать rotate. попробовал ваше решение, но не смог использовать ‘useRef’, оно не определено, idk. еще раз спасибо

2. useRef и useEffect являются хуками из React, которые должны быть импортированы. Я добавил инструкцию import выше.