React Parallax Scrolling 웹 디자인 솔루션
5342 단어 webdevuxreactjavascript
React Parallax Scrolling 웹 디자인 솔루션
Teachable 과정을 찾아보십시오.
우리가 작업하고 있는 일반적인 솔루션은 다음과 같습니다.
우리는 HOC(Higher Order Component)를 생성할 것입니다.
JSX 요소를 사용하는 함수입니다.
전. highOrderFunction()
그런 다음 JSX 구성 요소를 반환합니다.
전. ParallaxComponent
그런 다음 다음과 같이 페이지에 렌더링합니다.
시차의 논리는 다음과 같습니다.
페이지에 JSX 요소를 고정할 것입니다(이 경우 원 모양의 DIV).
페이지를 아래로 스크롤하면 JSX 요소가 위로 스크롤됩니다.
요소를 수동으로 위로 스크롤하므로 이동 속도를 제어할 수 있습니다.
이것은 우리의 시차 효과를 만듭니다.
화면에 JSX를 표시해 보겠습니다.
간단한 'div'.
return (
<div>
<img src="./back.png" alt="" />
<div style={styles.obj}></div>
</div>
);
원으로 스타일을 지정하겠습니다.
obj: {
margin: 0,
padding: 0,
height: '200px',
width: '200px',
position: 'fixed',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
borderRadius: '50%',
backgroundColor: '#0083FF',
boxShadow: '0px 0px 20px 10px #0083FF'
}
Higher-Order Component를 작성해 봅시다.
시차 애니메이션을 구현하려면 6개의 변수가 필요합니다.
JSXElement - HOC에 전달하는 JSX 요소
start_position - 문서/페이지 상단을 기준으로 이 요소가 시작되는 위치(y 위치)
ease - 페이지와 관련하여 JSX 요소 스크롤 속도를 제어합니다
last_offset - 전체적으로 얼마나 위 또는 아래로 스크롤했는지 추적합니다
animation_running - requestAnimationFrame() 루프를 시작하고 중지하는 데 사용합니다
5가지 주요 단계.
const ref = React.createRef();
const JSXElementWithRef = React.cloneElement(
JSXElement,
{ ...JSXElement.props, ref: ref },
)
this.setState({
ease: _weight,
WrappedJSXElement: JSXElementWithRef
}, () => {
this.setState({ start_position: ref.current.offsetTop }, () => {
this.wrappedJSXElement = ref;
document.addEventListener("scroll", this.animate_scroll);
});
});
render() {
return (
<Fragment>
{this.state.WrappedJSXElement}
</Fragment>
)
}
페이지를 스크롤할 때마다 JSX 요소를 스크롤하려고 합니다.
휠을 100번 클릭하면 JSX 요소도 100번 스크롤하라는 요청을 입력해야 합니다.
animate_scroll = () => {
if (!this.animation_running) {
this.animation_running = true;
requestAnimationFrame(this.animation_loop);
}
}
실제 애니메이션 루프...
animation_loop = () => {
let current_offset = window.pageYOffset;
let difference = current_offset - this.last_offset;
difference *= this.state.ease;
if (Math.abs(difference) < 0.05) {
this.last_offset = current_offset;
this.animation_running = false;
return;
}
this.wrappedJSXElement.current.style.top = `${this.state.start_position - this.last_offset}px`;
this.last_offset += difference;
requestAnimationFrame(this.animation_loop);
}
여기서는 4가지 주요 작업을 수행합니다(이 순서가 아님).
페이지가 시작되는 곳.
차이를 계산하는 방법.
모든 유형의 JSX 요소에 대해 이 논리를 사용할 수 있습니다.
DIV, 단락, 범위, 이미지...
소스 파일here을 가져올 수 있습니다.
보다 심층적인 가이드를 원하시면 YouTube에서 전체 비디오 자습서를 확인하십시오.
React Parallax Scrolling 웹 디자인 솔루션
Reference
이 문제에 관하여(React Parallax Scrolling 웹 디자인 솔루션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/anobjectisa/react-parallax-scrolling-web-design-solution-25h4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)