Web dev/React
React / useState, useEffect 로 background parallax 구현하기
양여리
2022. 4. 28. 23:18
728x90
반응형
리엑트로 퍼블리싱중이다.
scrollmagic을 써볼까하다가 그냥 배너하나 만드는것이라 직접 구현하는법에 대해 공부해봤다.
useState와 useEffect 를 사용해서 구현하였다.
1. useState로 scroll 좌표를 받아오고 useEffect로 스크롤 될때마다 이벤트를 준다.
2. 좌표를 opacity 에 적용한다.
import React,{useEffect, useState} from 'react'
import css from '../../assets/css/main/main.module.css'
export default function MainCica() {
const [position, setPosition] = useState(0);
const windowWidth = window.innerWidth;
function onScroll() {
setPosition(window.scrollY);
}
useEffect(() => {
window.addEventListener("scroll", onScroll);
console.log("움직임")
console.log(position)
return () => {
window.removeEventListener("scroll", onScroll);
}
});
return (
<>
<div className={css.cicaWrap}
style={{ backgroundPositionY: position / 4 -300 }}>
<div className={css.cica_image} >
<img src="/assets/images/cica-bg-item.png" alt="" style={windowWidth > 580 ? {opacity:(position -700 ) / 80} : {opacity:(position -400 ) / 80}}/>
</div>
<div className={css.text} style={windowWidth > 580 ? {opacity:(position -800 ) / 80} : {opacity:(position -500 ) / 80}}>
<div>
<img src="/assets/images/logo_white.png" alt="" />
<p>
시카페어 초록의 힘과<br/>
더마톨로지 케어로<br/>
민감해진 피부를 긴급 케어하세요
</p>
<button>cicapair more</button>
</div>
</div>
</div>
</>
)
}
모바일에서는 패럴럭스가 빨리나와서 조건문을 걸어주었다
728x90
반응형