예제로 공부하기

GGGGAME효과

Hyeon been 2023. 4. 24. 20:13

한번씩 읽고 가세요.

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90

GGGGAME효과 + 미션 1,2,3,4

 

 

HTML 코드

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>GAME Effect</title>
    <link rel="stylesheet" href="assets/css/bg.css">
    <link rel="stylesheet" href="assets/css/reset.css">
    <link rel="stylesheet" href="assets/css/game.css">
</head>

<body>
    <div class="cursor">
        <img src="assets/img/game_mouse01.png" alt="">
    </div>
    <header id="header">
        <h1>HB GAME WORLD</h1>
        <div class="time"></div>
    </header>

    <main>
        <div class="icon__box">
            <div class="icon1">
                <img src="assets/img/game_icon01.png" alt>
                <span>뮤직 듣기1</span>
            </div>
            <div class="icon2">
                <img src="assets/img/game_icon02.png" alt="뮤직">
                <span>뮤직 듣기2</span>
            </div>
            <div class="icon3">
                <img src="assets/img/game_icon03.png" alt="뮤직">
                <span>뮤직 듣기3</span>
            </div>
            <div class="icon4">
                <img src="assets/img/game_icon04.png" alt="뮤직">
                <span>뮤직 듣기4</span>
            </div>

        </div>
    </main>
    <!-- main -->
    <footer id="footer">
        <div class="info"></div>
    </footer>

스크립트 코드

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>

jquery와 gsap를 둘 다 사용하기 위해 라이브러를 둘 다 가져왔습니다.

        $(".icon1").draggable({
            containment: ".icon__box", scroll: false,
            start: function () {
                $(".cursor img").attr("src", "assets/img/game_mouse01.png")

            }

라이브러를 가져와 가능한 효과이다.

$(선택자).draggble 에 containment   icon__box,scroll: false, 이 경우, 드래그 가능한 요소는 클래스가 "icon__box"인 요소 내에서만 이동할 수 있습니다. scroll 옵션은 드래그 가능한 요소가 containment 영역을 벗어날 때 스크롤이 발생하지 않도록 설정합니다.

 

제이쿼리( jQuery)에서 containment 옵션은 드래그 가능한 요소가 이동할 수 있는 영역을 제한하는 데 사용됩니다. containment 옵션은 드래그 가능한 요소의 이동 경로를 제한하고, 부모 요소, 문서 전체 또는 다른 요소를 포함하는 요소를 지정하여 드래그 가능한 요소가 이동할 수 있는 영역을 제한합니다.

            start: function () {
                $(".cursor img").attr("src", "assets/img/game_mouse01.png")
            }

드래그를 시작하면 $(.cursor img (선택자))에 attr을 사용하여 .src요소를 mouse01.png로 바꿔줍니다.

 

제이쿼리( jQuery)의 attr() 메서드는 HTML 요소의 속성(attribute) 값을 가져오거나 설정하는 데 사용됩니다. 이 메서드를 사용하여 속성 값을 가져올 때는 선택한 요소 중 첫 번째 요소의 속성 값을 반환하며, 속성 값을 설정할 때는 선택한 모든 요소의 속성 값을 일괄적으로 설정합니다.

 

마우스를 화면에 오버할시 마우스가 바뀌는 효과

window.onload = function () {
            window.addEventListener("mousemove", e => {
                gsap.to(".cursor", {
                    duration: 0,
                    left: e.pageX - 5,
                    top: e.pageY - 10
                })
            });

GSAP를 사용하여 window.onload에 함수를 사용하여 window에 마우스오버 이벤트를 넣어줍니다.

gsap.to(".cursor"(선택자)) duration를 사용해 효과가 나타나는 속도를 설정하고  , left와 top으로 마우스 위치와 맞춰 줍니다. 

* {
    cursor: none;
}

css로 전체에 cursor none을 주어 마우스를 없애줍니다! 그리고

        <img src="assets/img/game_mouse01.png" alt="">

html코드에 넣고 싶은 마우스 커서 이미지를 넣어줍니다.

 

미션

1번 미션 : 시간 구현

window.onload 함수 안에

            function updateClock() {
                // 현재 시간을 생성
                const now = new Date();

                // 시, 분, 초를 추출
                const hours = now.getHours();
                const minutes = now.getMinutes();
                const seconds = now.getSeconds();
                const year = now.getFullYear();
                const month = now.getMonth() + 1;
                const day = now.getDate();

                // 시간을 표시할 형식을 설정
                const timeFormat = `${year}년 ${month}월 ${day}일  ${hours} : ${minutes} : ${seconds}`;

                // 시간을 요소의 내용으로 설정
                clock.innerHTML = timeFormat;
            }

함수 updateClock을 만들어 주고 그안에 변수 now를 만들어 줍니다. 변수 now는 new Date()를 만듭니다. 

그 후 또 변수

                const hours = now.getHours();
                const minutes = now.getMinutes();
                const seconds = now.getSeconds();
                const year = now.getFullYear();
                const month = now.getMonth() + 1;
                const day = now.getDate();

를 만들어줍니다. 

  • getHours() : Date 객체에서 시간 값(0 ~ 23)을 반환합니다.
  • getMinutes() : Date 객체에서 분 값(0 ~ 59)을 반환합니다.
  • getSeconds() : Date 객체에서 초 값(0 ~ 59)을 반환합니다.
  • getFullYear() : Date 객체에서 년도 값을 반환합니다.
  • getMonth() : Date 객체에서 월 값(0 ~ 11)을 반환합니다. 0이 1월을 나타내고, 11이 12월을 나타냅니다.
  • getDate() : Date 객체에서 날짜 값(1 ~ 31)을 반환합니다.

시간을 표시할 형식을 설정
 const timeFormat = `${year}년 ${month}월 ${day}일  ${hours} : ${minutes} : ${seconds}`;

그 후 출력해줍니다.

                clock.innerHTML = timeFormat;

 

2번 미션 : OS 크기 구현

window.onload 함수 안에 os를 구하는 함수도 넣어줍니다.

            // 사용자 운영체제 정보를 가져오는 함수
            function UserOSInfo() {
                // navigator.platform 값을 이용하여 사용자 운영체제 정보를 가져옴
                const osInfo = navigator.platform;
                const width = window.innerWidth;
                const height = window.innerHeight;

                // 결과를 출력
                document.querySelector('.info').innerHTML = `Your OS is ${osInfo} ${width} x ${height} pixels.`;
            }
            UserOSInfo()

함수 UserOSInfo를 만들어줍니다.  그 안에 사용자의 os를 구한 값인 변수 osinfo와 높이 넓이 값을 구한 변수 wiidth와 height를 만들어줍니다.

navigator.platform 값을 이용하여 사용자 운영체제 정보를 가져옵니다.

  • navigator.appCodeName : 웹브라우저 코드이름
  • navigator.appName : 웹브라우저 이름
  • navigator.appVersion : 웹브라우저 버전
  • navigator.cookieEnabled : 웹브라우저 쿠키 사용 가능 유무
  • navigator.language : 웹브라우저 언어
  • navigator.onLine : 사용자 온라인 상태 여부
  • navigator.platform : 플랫폼
  • navigator.userAgent : 브라우저 구분값(웹브라우저 이름 전체)

그 후 결과 값을('.info')에 출력해줍니다.

 document.querySelector('.info').innerHTML = `Your OS is ${osInfo} ${width} x ${height} pixels.`;

3번 4번 미션 : 아이콘 클릭 해더 배경 체인지,현재 뮤직듣기를 클릭했습니다.

 

        $(".icon1").draggable({
            containment: ".icon__box", scroll: false,
            start: function () {
                $(".cursor img").attr("src", "assets/img/game_mouse01.png")
            },
            drag: function () {
                $("#header").attr("style", "background:red")
                $("#header h1").attr("style", "transform: rotate(20deg)")
                $(".info").html("뮤직듣기1이 드래그 중 입니다.")
            },
            stop: function () {
                $("#header").removeAttr("style");
                $("#header h1").removeAttr("style");
                $(".info").html("");
                function UserOSInfo() {
                // navigator.platform 값을 이용하여 사용자 운영체제 정보를 가져옴
                const osInfo = navigator.platform;
                const width = window.innerWidth;
                const height = window.innerHeight;

                // 결과를 출력
                document.querySelector('.info').innerHTML = `Your OS is ${osInfo} ${width} x ${height} pixels.`;
            }
            UserOSInfo()
            }
        });

3번은 제이쿼리문 안에  start다음 drag도 만들어줍니다. 그럼 드래그가 진행중일때 효과를 주며

$("#header").attr("style", "background:red")
$(".info").html("뮤직듣기1이 드래그 중 입니다.")

헤더에.attr을 사용하여  스타일 백그라운드 를 바꿔줍니다.

그리고 운영체제가 나오는 info에 .html을 사용하여 문구도 바꿔줍니다.

그 후 

stop도 만들어주면 드래그 stop할때 나타나는 효과를 정해줍니다.

$("#header").removeAttr("style");
$("#header h1").removeAttr("style");
$(".info").html("");

헤더에 준 style을 removeAttr을 이용해 지워줍니다.

info에 넣어준 문구도 빈문자열로 바꿔주고,

 

함수   UserOSInfo()를 넣어주어 다시 os가 나오게 해줍니다.

                function UserOSInfo() {
                // navigator.platform 값을 이용하여 사용자 운영체제 정보를 가져옴
                const osInfo = navigator.platform;
                const width = window.innerWidth;
                const height = window.innerHeight;

                // 결과를 출력
                document.querySelector('.info').innerHTML = `Your OS is ${osInfo} ${width} x ${height} pixels.`;
            }
            UserOSInfo()
            }