Как реализовать дизайн с реагирующей пружиной?
В репозитории проекта в приложении JS-файлы установлено приложение response-redux с CSS. Теперь я должен анимировать картинки с помощью мыши, как на этом сайте: https://www.madwell.com/
Компонент изначально был функциональным компонентом, и я изменил его на компонент на основе классов следующим образом:
`` `
class BannerContainer extends React.Component{
constructor(props){
super(props);
this.state = {
x: 0,
y: 0
};
this.handleMouseMove = this.handleMouseMove.bind(this);
}
componentDidMount(){
window.addEventListener("mousemove", this.handleMouseMove);
}
componentWillUnmount(){
window.removeEventListener('mousemove', this.handleMouseMove);
}
handleMouseMove({ x, y }){
this.setState({
x : x / window.innerWidth,
y : y / window.innerHeight
})
}
render(){
const { banner = {} } = this.props;
const {
title = ' <br> ',
text = ' <br> ',
image__google_350x80 = '',
image__app_350x80 = '',
image__bg1_1166x1878 = '',
image__bg2_961x1782 = '',
image__curve_730x151 = ''
} = banner;
return (
<Container>
<BGPatch>
{console.log(this.state.x , this.state.y)}
<img src={'/images/bg_purple.jpg'} alt="" />
</BGPatch>
`` `
В этом примере я могу слушать mouse-move
событие и и получить координаты X & Y соответственно. Но теперь я должен использовать react-spring
библиотека для его реализации, так как мне это сделать? Также CSS должен быть написан в отдельном файле JS для каждого компонента, как в react-spring
Например, они напрямую модифицируют opacity
или же trasform
в компоненте Spring напрямую, что я не хочу
пример компонента весны, приведенный на их документах
<Spring from={{ opacity: 0 }} to={{ opacity: 1 }}>
{props => <div style={props}>hello</div>}
</Spring>
1 ответ
Эффекты параллакса относительно легко сделать, если у вас есть координаты мыши, вот пример с похожим эффектом: https://twitter.com/0xca0a/status/1058505720574959616
Он использует крючки, но то же самое относится и к обычной пружине. Хотя это, вероятно, даже хороший пример, потому что он не рендерит компонент при перемещении мыши, что очень быстро. Я полагаю, что в вашем случае вы не будете использовать повороты, переводит, но дело в том, что вы получаете x / y и используете его для интерполяции ваших изображений в нужное положение.
РЕДАКТИРОВАТЬ: я раздвоил пример, эта версия использует переводы: https://codesandbox.io/embed/r5x34869vq