버튼을 눌렀을 때 어떤 함수가 작동하게 끔 설정해보자.


함수는 배열의 값을 넣었다 뺏다 하는 함수를 만들것이고


배열에서 값을 앞에 먼저 넣거나 뒤에 먼저 넣는 예제를 만든다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>배열 2</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--버튼 역할만 수행-->
        <input type="button" value="PUSH" onclick="arrPush()"/>
        <!--버튼+submit 역할 수행 : form 안에서 사용시 주의, form에선 누르기만 해도 서버에 전송될 수 있음-->
        <button onclick="arrPop()">POP</button>
        <br/>
        <input type="button" value="unshift" onclick="arrUnshift()"/>
        <input type="button" value="shift" onclick="arrShift()"/>
    </body>
    <script>

        var arrNum = [];
        var i = 0;

        function arrPush(){
            i++;
            arrNum.push(i);
            console.log(arrNum);
        }

        function arrPop(){
            console.log(arrNum.pop()); // 뺀 값을 반환
            console.log(arrNum); // 배열에서 하나씩 빠진다.
        }

        // [] [] [] [] <- push() (값을 넣음)
        // [] [] [] pop() -> [] (값을 뺌)
        // unshift() -> [][][][] (앞에서부터 집어 넣음)
        // [] <- shift() [][][] (앞에 값을 뺌)

        /*버튼 추가 후 shift와 unshift 사용 하기*/
        
        function arrUnshift(){
            i++;
            arrNum.unshift(i);
            console.log(arrNum);
        }

        function arrShift(){
            console.log(arrNum.shift()); // 뺀 값을 반환
            console.log(arrNum); // 배열에서 하나씩 빠진다.
        }
    </script>
</html>



버튼의 경우 onclick 이벤트  속성을 선언하고 속성에 Script에 만들어둔


함수()를 입력하면 버튼을 누를 때 마다 적용된다.

js에서 함수는 변수처럼 생성한다.


따로 특징은 다음 예제의 주석에서 설명한다.


블로그 내용을 쭉 따라 와서 java를 봤다면 비슷하기 때문에 보는데 문제는 없을 것이다.


<html>
    <head>
        <meta charset="UTF-8">
        <title>Java Script</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        //객체에 함수
        var Check = {};
        Check.balance = 10000;
        Check.deposit = function(amount){// js는 데이터 타입을 안받는다.
            console.log(amount + "원을 예금 하셨습니다.");
            this.balance += amount;
            console("총액 : " + this.balance)
        };

        //실행(매개 변수가 없어도 된다. 데이터 타입이 다 틀려도 그냥 대입이 되어 연산 된다.)
        Check.deposit();
        Check.deposit(1000);
        

    </script>
</html>












배열도 마찬가지로 java와 유사하다.


하지만 문자열 숫자열 등 상관없이 값을 넣을 수 있는데


왠만하면 한가지 타입만 넣는것을 권장한다.


배열을 사용하는 이유가 반복문을 통해서 같은 작업을 하게 되는데


자료형이 틀리면 오류가 발생할 수 있기 때문에 조심해야 한다.



js 자체가 거의 자료형 구분이 없다고 보면 되는데 연산 작업에는 자료형 구분이 중요하기 때문에


개인 판단에 맞겨서 알맞게 하면 된다.


참고로 "" 와 '' 구분도 상관없다.




java에서 전부 Object타입으로 선언하는 것과 같다.


내부에서 알아서 형변환이 이루어져 연산이 처리된다.


이러한 이유로 성능에 안좋다고 하지만 요즘 컴퓨터들이 상향 평준화 되어


연산이나 메모리 16기가를 채울 정도로 성능에 영향을 주는게 아니기 때문에 js가 주목받고 있다.




또한 배열과 비슷하다기 보다는 ArrayList와 비슷한데


js의 배열은 값을 추가할 수 있다는 특징이 있다.


예제를 한번 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>배열 1</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        // 배열 선언 법 1
        var arrNum = [];
        // 배열 선언 법 2
        var arrString = new Array();

        /*데이터 넣기*/
        arrNum = [1, 2, 3, 4];
        arrString = ['a', 'b', 'c', 'd'];


        arrNum[4] = 5;
        arrString[4] = 'e';

        arrNum.push(6);
        arrString.push("f");

        console.log(arrNum.length);
        console.log(arrString.length);

        console.log(arrNum);
        console.log(arrString);
        
    </script>
</html>









JS는 Java와 관련이 없지만 쓰임은 비슷한 부분이 있다.


그러므로 반복문 for, while 같은 기본 공통 기능들은 생략하고 바로 객체로 넘어간다.


var a = new Object( );


var car = { };


var obj = { 1:"값1", 2:"값2"};


3가지 방법으로 선언하고


a에 변수를 만들고 싶다면 a["변수 이름"]


car의 변수를 만들고 싶다면 car.변수이름


obj는 생성과 동시에 값이 만들어졌다.


그 외에


변수 선언의 예는 var attr = "score"; 처럼 선언하면 된다.


아래 예제를 통해 여러가지를 자세히 확인해 보자




<html>
    <head>
        <meta charset="UTF-8">
        <title>Java Script</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        // js 싱글 주석
        /*js 멀티 주석*/

        /*객체 선언법*/
        //객체 선언 법 1
        var person = new Object();
        //객체 선언 법 2
        var car = {};
        //객체 선언 법 3
        var obj = {
            attr:"속성",method:"함수",constr:"없음"
        };

        /*객체에 값 넣기*/
        var attr = "score";

        /*Java와 다르게 선언을 안해도 객체를 알아서 만들어서 넣는다,이 특징을 유연하다고 한다.*/
        /*원래는 위의 객체 선언 법 3처럼 객체의 내부 변수를 선언해주어야 하지만*/
        /*아래와 같이 써도 만들어진다는 뜻*/
        car.name = "Fiat";
        car.model = "500";
        car.weight = 850;
        car.color = "white";
        car.isAuto = true;

        person["name"] = "kim";
        person["age"] = 26;
        person["married"] = true;
        // 변수 안의 값을 속성명으로 사용 할 수 있다.
        person[attr] = "속성"
        // 위의 var attr의 값이 들어가 person.score가 생성된다.

        /*콘솔로 값 출력하기*/
        console.log(car.name);
        console.log(person.age);
        console.log(person.score);
        console.log(obj.attr);
        console.error(car.model); // 에러
        console.warn(car.color); // 경고
        // 객체의 값을 전부 출력, 객체를 출력하면 됨
        console.log(obj);
        
        // 개발자가 콘솔을 통해서 값을 확인하는데
        // 만약 지우지 않고 공식적으로 서버에 올리면 
        // 보안상 취약해지기 때문에 콘솔 구문은 작업이 끝나면 지우도록 하자.
    </script>
</html>



콘솔의 출력은 Ctrl + Shift + p를 통해서 브라우져로 실행하고


F12를 누르면 코드를 볼 수 있고 콘솔창도 볼 수 있다.







자바 스크립트는 HTML을 동적으로, 기능을 좀 더 좋게 하기위해 만들어진 언어이다.


자바와는 관련이 없다.


그런데 오라클에서 자바라는 이름을 쓰지 말라고 해서 ECM 스크립트라고 정식 명칭이 바뀌었다고 한다.


하지만 이미 자바 스크립트로 많이 알려졌기 때문에 자바 스크립트로 부른다.




그리고 자바 스크립트의 이용자, 웹개발자가 많아짐에 따라서


언어를 만드는 업체들에서 웹개발 용어 쪽을 따르는 경향이 있다고 한다.


그러므로 자바 스크립트를 배우면 활용성이 매우 좋다.



자바 스크립트는 CSS, Style 언어처럼 HTML에 추가로 작성하는 언어이다.


보통 Body 아래부분에 <script></script>와 같이 사용하며 style 옆 head 안쪽에 사용할 수 있지만


head는 처음 페이지가 열릴 때 읽혀지는 부분으로 페이지가 느려지는 등 원인으로 head 안에 쓰지 않는 걸 권장한다.




기본 뼈대는 이러하다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>Java Script</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <!--html 주석-->
    </body>
    <script>
        // js 싱글 주석
        /*js 멀티 주석*/
    </script>
</html>



html_css.zip



압축을 해제해서 html 파일을 txt로 열어도 되고, 


https://qdgbjsdnb.tistory.com/120에서 설치한 Visual Studio Code를 이용해서 열어도 된다.

보기


1 메인페이지






메인페이지 - iframe을 이용해 다른 html 파일 합치기, 공지 화면 만들기(숨기기 해놓았으니 아래 완성파일을 참조)



2. 메뉴 HTML을 눌렀을 때





마우스 hover를 이용해서 글을 보였다가 숨겼다가 기능을 만들어보자. 링크 등 기능도 간단하게



3. 메뉴바의 CSS를 눌렀을 때





나열 기능을 이용해서 상자를 적절히 배치



4. java-script 버튼을 눌렀을 때


화면의 div 상자들의 위치를 position을 통해 적절히 배치해보자



5. J-Query를 눌렀을 때






스프라이트 이미지를 마우스를 올렸을때 움직이는것처럼 이미지를 바꿔보자



결과 파일


ex.zip



도트에서 움직이는 것처럼 착시현상을 주려면 이미지가 8장이 필요하다.


예를들면 친숙한 게임으로 메탈슬러그가 있는데 모덴군 군인들은 이러한 이미지로 구현이 된다.






(출처 : http://www.suitgames.com/forum/printthread.php?tid=3842&page=4)


이러한 이미지를 저장해서 불러올 때


여러 이미지에 각각의 동작을 그려 불러오면 속도가 느려지고 용량 또한 커지게 된다.


특히 과거의 메모리 16mb짜리를 쓰던 고전 게임들의 경우 이러한 단점이 영향이 컷다.


그래서 나온게 스프라이트 이미지로 여러 이미지를 하나의 시트에 모아놓은 형태이다.


이미지를 사용할 때 잘라서 어디 부분의 이미지를 불러와서 연속으로 보여주어


애니메이션처럼 보여주는 것이다.


좋은 스프라이트 이미지는 크기와 간격이 일정 한 것인데 사용하려면 이미지의 간격과 위치가 일정해야


코드에 쓰기 좋다. 해보면 알것이다. 전부 제각기 위치한다면 위치 잡기가 피곤해진다.


위의 병사 이미지를 활용한 예제를 확인해보자.



투명 이미지 파일 : 

<- 오른쪽 클릭 - 다른 이미지로 저장, 투명해서 안보임



<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "img/btn.png">
        <style>
            .soldier1{
                width: 32px;
                height: 42px;
                background: url("img/MSspriteimg.png") 0 0;
            }
            .soldier2{
                width: 33px;
                height: 42px;
                background: url("img/MSspriteimg.png") -32px 0;
            }
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <img class="soldier1"/>
        <!--테두리 제거 방법 1 : 투명 이미지-->
        <img src="img/img_trans.png" class="soldier2"/>
        <!--테두리 제거 방법 2 : 다른 태그 이용-->
        <!--이미지 태그는 기본적으로 이미지 지정을 선언 시 안하면 테두리가 생긴다.-->
        <div class="soldier1"></div>

        <!--
            img태그는 이미지가 없을 경우 테두리를 생성한다.
            그래서 (투명)이미지를 넣어 준다.
            이때 넣어준 이미지가 배경 이미지를 가릴 수 있어서
            투명 이미지를 사용한다.
        -->

    </body>

</html>



결과는 다음과 같다.





한번 hover을 사용해서 마우스를 올렸을 때 이미지가 바뀌게 해보자.


게임처럼 움직이게 하기 위해선 java Script와 함께 코딩을 해야 가능하다.










+추가


http://www.spritecow.com/ 스프라이트 카우라는 사이트인데


이 사이트에 Open Image를 눌러 원하는 sprite 이미지를 띄어놓고


각 동작들을 클릭하면 아래와 같이 코드, 좌표를 잡아준다.






z-index는 누가 화면 상단에 있을지 순서를 부여하는 것.


개념 자체는 x, y, z축 3차원 개념, 입체적인 개념인것 같다.


오브젝트가 겹쳤을 때 어떤 오브젝트가 위에 보이게 할 지 순서를 매기는 것이다.


공지, 팝업 같은 기능에 자주 쓰인다.





다음 opacity는 투명도 옵션을 말한다.


값은 0~1까지 부여되며


0으로 갈 수록 투명해진다.


0.2~0.5 정도가 반투명하게 사용 할 때 적당한 값이다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "img/btn.png">
        <style>
            div{
                width: 300px;
                height: 300px;
                text-align: center;
            }
            #div1{
                border: 3px dashed green;
                background-color: yellow;
                position: relative;
                top: 10px;
                z-index: 8;
                opacity: 0.5;
            }
            #div2{
                border: 3px dashed red;
                background-color: orchid;
                position: absolute;
                top: 250px;
                left: 20px;
                z-index: 3;
            }
            #div3{
                border: 3px dashed hotpink;
                background-color: mediumspringgreen;
                position: absolute;
                top: 100px;
                left: 250px;
                z-index: 5;
            }
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <div id="div1">DIV1</div>
        <div id="div2">DIV2</div>
        <div id="div3">DIV3</div>
    </body>

</html>







예전에 예제로 사용한 화면에 공지를 띄어보자



position 은 특정 요소의 위치 속성을 지정해준다.


static은 relative 포지션을 사용하는 요소의 기준이 되는 속성


relative 다른 요소와 연관 되어 움직이는 속성( static 이 없으면 다른 relative를 기준으로 삼음)


absolute : 부모를 기준으로 절대값으로 움직이는 속성


fixed : 보이는 화면에서 고정되어 보여줌(스크롤을 내려도 따라온다.)




static은 잘 사용하지 않지만 다른 요소는 자주 사용하므로 꼭 기억해두자.



<html>
    <head>
        <meta charset="UTF-8">
        <title>Position</title>
        <link rel="icon" href="img/btn.png">
        <style>
            div{
                width: 200px;
                height: 200px;
                text-align: center;
            }
            div.static{
                position: static;
                background-color: aqua;
            }
            /*원래 기준은 화면 최상단 좌측인데*/
            /*기준이 static 설정한 박스로 바뀜*/
            div.relative{
                position: relative;
                background-color: coral;
                top:1000px;
                left: 200px;
            }
            div.absolute{
                position: absolute;
                width:100px;
                height: 100px;
                border: 3px solid red;
                /*0%로 주면 부모 요소와 겹치는걸 볼 수 있다.*/
                top: 25%;
                left: 25%;
            }
            div.fixed{
                position: fixed;
                width:100px;
                height: 100px;
                background-color: khaki;
                top: 10%;
                right: 10%;
            }
        </style>
    </head>
    <body>
        <!--relative의 기준이 되는 속성-->
        <!--static이 없으면 처음 생성된 relative를 기준으로 삼는다.-->
        <div class="static">posision:static</div>
        <!--다른 요소와 연관되어 움직인다.-->
        <div class="relative">posision:relative
            <!--부모를 기준으로 움직임-->
            <!--아래의 예의 부모는 relative가 된다.-->
            <!--하지만 정렬을 하면 부모 인자를 무시하고 겹쳐서 나온다.-->
            <div class="absolute">position<br/>absolute</div>
        </div>
        <!--보이는 화면에서 고정되어 보여줌(스크롤을 내려도 따라온다.)-->
        <div class="fixed">position:fixed</div>
    </body>
</html>















우측의 스크롤을 보면 내려올때 fixed의 상자가 따라오는 것을 볼 수 있다.

float을 통해 요소를 나열했는데 한쪽으로만 쭉 나열되면 곤란하다.


중간에 끊어줘서 나열해줘야 하는데


그럴 땐 clear 키워드를 사용한다.


사용할 요소를 지정하여 clear: left; 사용하면 다음줄로 넘어간다.


left말고 다른 속성도 직접 써보고 참조해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Float Clear</title>
        <link rel="icon" href="img/btn.png">
        <style>
            div{
                width: 50px;
                height: 25px;
                border: 3px solid yellowgreen;
                margin: 5px;
                float: left;
            }
            /*clear로 다음줄로 밀기*/
            div.first{
                /*클래스는 중복을 피하기 위해*/
                /*왠만하면 [요소].[클래스 이름] 이와 같이 사용하자.*/
                border: 3px solid red;
                clear: left;
            }
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
        <div></div>

        <div class="first"></div>
        <div></div>
        <div></div>

        <div class="first"></div>
        <div></div>
        <div></div>
    </body>
</html>






4번째와 7번째에 first라는 이름을 부여하고 clear를 사용하였다.

+ Recent posts