화면 스크롤시 효과주기
20 Oct 2020 | memo화면 스크롤시 효과주기
토이프로젝트때 사용했으냐, 이 프로젝트에는 어울리지않는 효과인거같아 폐기처분하기전에 혹시 나중에 다른거에 적용할 수 있으니 여기에 기록해둡니다.
코드
import React, { useEffect } from 'react';
import styled, { keyframes } from 'styled-components';
import aboutClip from './aboutClip.mp4';
const typing = keyframes`
0%{
width:0%;
}
50%{
width:100%;
}
100%{
width:0%;
}
`;
const AboutContainer = styled.div`
background: #111;
cursor: initial;
`;
const Section = styled.section`
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
clip-path: circle(1000px at center center);
video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
`;
const Wrapper = styled.div`
position: relative;
margin-top: 250vh; // 포인트
padding: 100px;
background: #111;
height: 40vh;
h2 {
font-size: 2.5em;
margin: 0;
margin-bottom: 20px;
color: transparent;
position: absolute;
top: 0%;
left: 0%;
text-transform: capitalize;
white-space: nowrap;
::before {
content: 'SKETCHBOOK 프로젝트는..';
width: 100%;
height: 100%;
color: #da4747;
overflow: hidden;
border-right: 3px solid white;
position: absolute;
top: 0;
left: 0;
/* 커서 역할 */
/* steps는 content길이 */
animation: ${typing} 5s steps(18) infinite;
}
}
p {
font-size: 1em;
color: #fff;
font-family: 'elvetica Neue",Helvetica,Arial,sans-serif';
}
`;
const About = () => {
// 스크롤 내릴때마다 원이 줄어들고 올리면 원이 다시 넓어짐
useEffect(() => {
const banner = document.querySelector('.banner');
window.addEventListener('scroll', function () {
const value = 1000 - window.scrollY;
banner.style.clipPath = 'circle(' + value + 'px at center center)';
});
}, []);
// 새로고침시 스크롤 맨 위로
useEffect(() => {
window.onload = function () {
setTimeout(function () {
window.scrollTo(0, 0);
}, 100);
};
}, []);
return (
<AboutContainer>
<Section className='banner'>
<video src={aboutClip} autoPlay muted loop></video>
</Section>
<Wrapper>
<h2>SKETCHBOOK 프로젝트는..</h2>
<p>
지루하고 반복되는 일상을 잠시 벗어날 수 있게끔 당신에게 여유를
제공합니다.
</p>
</Wrapper>
</AboutContainer>
);
};
export default About;