사이트 제작

패럴랙스 이펙트 사이트 제작하기2

진블로그 2023. 4. 20. 20:20
다른 명언

728x90
반응형

패럴렉스 효과는 웹사이트의 시각적인 효과를 증대시켜주는 역할을 합니다. 또한 사용자에게 더욱 동적이고 생동감 있는 웹사이트 경험을 제공해줄 수 있습니다. 하지만, 과도하게 사용하면 사용자에게 불편함을 줄 수 있으므로 적절히 활용하는 것이 중요합니다.

 

패럴랙스 효과를 사용하여 사이트를 제작 하였습니다.

완성된 화면

 

Skrollr

Skrollr은 자바스크립트 라이브러리 중 하나로, 스크롤 이벤트에 반응하여 웹 페이지 요소의 애니메이션을 제어할 수 있게 해줍니다. 이 라이브러리를 사용하면 스크롤 위치에 따라 웹 페이지의 요소를 동적으로 조작하여 다양한 효과를 구현할 수 있습니다.
Skrollr을 사용하기 위해서는 먼저 skrollr.js 파일을 다운로드하고 웹 페이지에 포함해야 합니다. 그리고 요소에 data- 속성을 사용하여 원하는 애니메이션 효과를 설정할 수 있습니다.

<script src="https://cdnjs.cloudflare.com/ajax/libs/skrollr/0.6.30/skrollr.min.js"></script>
<script type="text/javascript">
    let s = skrollr.init();
    window.addEventListener("scroll", () => {
        let scrollTop = window.pageYOffset || window.scrollY;
        document.querySelector(".scrollTop").innerText = parseInt(scrollTop);
    });
</script>

우선 스크립트로 패럴랙스 효과를 이용하기 쉽도록 도와주는 서버를 불러옵니다.

영역을 좌측상단에  고정하여 기준점을  잡고 스크롤을 했을 때 값이 변경되도록 합니다.

값이 변경되었을 떄 이벤트 효과를 주어 스크롤을 하였을 때 이미지가 움직이게 보이는 효과를 주었습니다.

 

html코드 입니다.


<body>
    <div class="scrollTop"></div>
    <section id="section1">
        <div class="s1-text1 fixed"
            data-0="font-size: 0vw; opacity: 1"
            data-1000="font-size: 30vw; opacity: 1"
            data-1000="font-size: 30vw; opacity: 1"
            data-3000="font-size: 0vw; opacity: 0">
            Bonjour</div>
        <div class="s1-text2 fixed"
            data-2500="font-size: 0vw; transform: translate(-50%, -50%) rotate(0deg)"
            data-3000="font-size: 40vw; transform: translate(-50%, -50%) rotate(720deg)"
            data-0="opacity: 1"
            data-4600="opacity: 0">
            Hello</div>
        <div class="s1-img1 fixed"
            data-3000="width: 200vw; opacity: 1"
            data-4500="width: 40vw; opacity: 1"
            data-4800="width: 40vw; opacity: 1"
            data-6000="width: 200vw; opacity: 0"
        >
            <div class="s1-img1-1"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div
                    data-3800="transform: rotate(0deg)"
                    data-4500="transform: rotate(360deg)"
                ></div>
                <div
                    data-3800="transform: rotate(0deg)"
                    data-4500="transform: rotate(360deg)"
                ></div>
            </div>
            <div class="s1-img1-2"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-3"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-4"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-5"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-6"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-7"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-8"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-9"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
            <div class="s1-img1-10"
                data-3800="transform: rotate(0deg)"
                data-4500="transform: rotate(360deg)"
            >
                <div></div>
                <div></div>
            </div>
        </div>
        <div class="s2-text fixed"
            data-5000="width: 200vw; opacity: 0"
            data-6500="width: 40vw; opacity: 1"
            data-8000="width: 40vw; opacity: 0"
        >Success is not the key to happiness. Happiness is the key to success. If you love what you are doing, you will be successful.
        <br><br>Albert Schweitzer</div>

        <div class="box fixed"
            data-7500="width: 20vw; opacity: 0; transform:  translate(-50%, -50%) rotate(0deg);"
            data-10000="width: 70vw; opacity: 1; transform: translate(-50%, -50%) rotate(360deg);"
            data-13000="width: 70vw; opacity: 0; transform: translate(-50%, -50%) rotate(720deg);"
        ></div>
        <div class="s3-text fixed"
            data-12500="width: 200vw; opacity: 0"
            data-13500="width: 40vw; opacity: 1; transform: translate(-50%, -50%)"
            data-14500="width: 500vw; opacity: 1; transform: translate(-50%, -470%)"
        >hope you enjoyed my parallax website!</div>

        <div class="s3-img fixed"
            data-13800="width: 40vw; opacity: 0; transform:  translate(-50%, -50%) rotate(0deg); background-image: url(img/academy.jpg)"
            data-15500="width: 40vw; opacity: 1; transform: translate(-50%, -50%) rotate(360deg); background-image: url(img/academy.jpg)"
        ></div>
    </section>
</body>

div에 클래스를 선언하고 내부에 화면이 위치해 있는 값을 data- 에 주어 영역을 정합니다.

div 박스를 만들어 변하게 만들고 싶은 영역을 속성 data-를 사용해 스타일을 설정합니다.

각 영역에 속성을 주어 스크롤을 할 때 이미지가 변하도록 제작 하였습니다.

728x90