화면구현/HTML

다양한요소등록법

psys 2020. 7. 2. 11:34
728x90

그동안의 이벤트 접근법

<body>
    <input type="button" value="눌렁" onclick="f_click()">
    <script>
        function f_click() {

        }
    </script>
</body>

 

새로운 등록법

v_btn1에 클릭 이벤트를 등록

    <input type="button" id="id_btn1" value="등록법2">
    <script>
        var v_btn1 = document.getElementById("id_btn1");
        v_btn1.onclick=function(){
        }
    </script>

 

    <input type="button" id="id_btn1" value="등록법2">
    <script>
        var v_btn1 = document.getElementById("id_btn1");//버튼을 가리킴
        v_btn1.onclick=function(){
            alert("나 너 눌렀니?");
        }
    </script>

>> 실행순서

위에는 안 뜨고 아래만 뜬다(나중 이벤트로 덮어 씌워짐)

    <script>
        window.onload = function(){
            alert("페이지 로딩이 끝났어??");
        }
        window.onload = function(){
            alert("뭐!??!!?!??? 페이지 로딩이 끝났다고???");
        }
    </script>
같은 이벤트에 함수(이벤트핸들러)를 정의하면 덮어써버림. (곧 나중것만 실행됨)

 

권장되는 이벤트 등록법

    <input type="button" id="id_btn2" value="등록법3">
    <script>
        var v_btn2 = document.getElementById("id_btn2");
        v_btn2.addEventListener("click", function () {
            alert("이것이 권장되는 이벤트 등록법!")
        });
    </script>
    <script>
        window.addEventListener("load", function () {
            alert("페이지 로딩이 끝났어??");
        });
        window.addEventListener("load", function () {
            alert("뭐!??!!?!??? 페이지 로딩이 끝났다고???");
        });
    </script>
덮어쓰지 않고 추가가 됨

추가버튼 클릭시마다 사진 추가

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #container {
            width:300px;
            height:300px;
            border:1px solid red;
        }
    </style>
</head>
<body>
    <div id="container"></div>
    <input id="id_btn" type=button value="추가">
    <script>
        var v_btn = document.getElementById("id_btn");
        var v_container = document.getElementById("container");
        v_btn.onclick = function(){
            var v_img = "<img src=images/all1.jpg width=100 height=100 >";
            v_container.innerHTML += v_img;
        }
    </script>
</body>
</html>
img의 src, width, height들은 속성

 

메모리상에 img태그 자체를 생성

    <script>
        v_btn.onclick = function () {
            var v_img = documen.createElement("img");
        }
    </script>

메모리에 넣었기에 눈에 보이지 않는다!!

        v_btn.onclick = function () {
            var v_img = documen.createElement("img");//메모리상에 img태그 자체를 생성
            v_img.setAttribute("src", "images/all2.jpg");
            v_img.setAttribute("width", 100);
            v_img.setAttribute("height", 100);
        }

눈에 보이는 어딘가에 넣어줘야한다.(문서(html)에 넣어줄지를 알려줘야해)

        var v_btn = document.getElementById("id_btn");
        var v_container = document.getElementById("container");
        v_btn.onclick = function () {
            var v_img = document.createElement("img"); // 메모리상에 img객체를 만듬
            v_img.setAttribute("src", "images/all0.jpg");
            v_img.setAttribute("width", 100);
            v_img.setAttribute("height", 100);
            
            // 여기까지하면 눈에 안 보임, 문서(html) 어디에 넣어줄지를 알려줘야함
            v_container.appendChild(v_img);
        }
기능은 append가 많은데 브라우저 호환성에 문제가 있음
따라서 모든 브라우저에 호환되는 appendChild를 많이 사용한다.

테이블같은경우는 innerHTML을, 그외에는 이와같이 사용하면 가독성이 좋음

 

v_img.setAttribute("width",100); // 속성값 write
alert(v_img.getAttribute("width")); // 속성값 read

 

appendChild

버튼 클릭 시 왼쪽의 사진 오른쪽으로 이동시키기

    <style>
        .nemo {
            display: inline-block;
            width: 200px;
            height: 200px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div class="nemo" id="id_dv1">
        <img src="images/all0.jpg" width=100 height=100>
    </div>
    <div class="nemo" id="id_dv2">
        <img src="images/all1.jpg" width=100 height=100>
    </div><br>
    <input type=button id="id_btn" value="왼쪽꺼 오른쪽으로 이동">
</body>

 

이동~

    <script>
        var v_dv1 = document.getElementById("id_dv1");
        var v_dv2 = document.getElementById("id_dv2");
        var v_btn = document.getElementById("id_btn");
        var v_img1 = document.getElementById("id_img1");
        var v_img2 = document.getElementById("id_img2");
        v_btn.addEventListener("click",function(){
            // 이미 존재하는 객체를 appendChid로 다른 곳에 붙이면 이동해버림
            v_dv2.appendChild(v_img1);
            v_dv1.appendChild(v_img2);
        });
    </script>
더보기
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .nemo {
            display: inline-block;
            width: 200px;
            height: 200px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div class="nemo" id="id_dv1">
        <img id="id_img1" src="images/all0.jpg" width=100 height=100>
    </div>
    <div class="nemo" id="id_dv2">
        <img id="id_img2" src="images/all1.jpg" width=100 height=100>
    </div><br>
    <input type=button id="id_btn" value="왼쪽꺼 오른쪽으로 이동">
    <script>
        var v_dv1 = document.getElementById("id_dv1");
        var v_dv2 = document.getElementById("id_dv2");
        var v_btn = document.getElementById("id_btn");
        var v_img1 = document.getElementById("id_img1");
        var v_img2 = document.getElementById("id_img2");
        v_btn.addEventListener("click",function(){
            // 이미 존재하는 객체를 appendChid로 다른 곳에 붙이면 이동해버림
            v_dv2.appendChild(v_img1);
            v_dv1.appendChild(v_img2);
        });
    </script>
</body>

</html>

 

ex> 사진앨범! 돌리기

overflow: hidden; 넘치는애들 다 잘라
overflow: scroll; 넘치는애들 스크롤로
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #acja {
            overflow: hidden;
            width: 100px;
            height: 100px;
            border: 20px groove palevioletred;
        }

        #id_row {
            width: 415px;
            border: 1px solid palevioletred;
        }
    </style>
</head>

<body>
    <div id="acja">
        <div id="id_row">
            <img id="id_img1" src="images/all0.jpg" width=100 height=100>
            <img id="id_img2" src="images/all1.jpg" width=100 height=100>
            <img id="id_img3" src="images/all2.jpg" width=100 height=100>
            <img id="id_img4" src="images/all3.jpg" width=100 height=100>
        </div>
    </div>

    <input id="id_btn" type=button value="돌리깅">
    <script>
        var v_row = document.getElementById("id_row");
        var v_btn = document.getElementById("id_btn");
        var v_imgNum = 1;
        id_btn.onclick = function () {
            v_row.appendChild(document.getElementById("id_img" + v_imgNum));
            v_imgNum++;
            if (v_imgNum > 4) {
                v_imgNum = 1;
            }
        }
    </script>
</body>

</html>

얘두됑

    <script>
        var v_row = document.getElementById("id_row");
        var v_btn = document.getElementById("id_btn");
        var v_imgNum = 1;
        var v_imgChildren = v_row.children; // array like
        v_btn.addEventListener("click", function () {
            v_row.appendChild(v_imgChildren[0]);
        });
    </script>

'화면구현 > HTML' 카테고리의 다른 글

클래스속성  (0) 2020.07.08
마우스로끌기 완성~  (0) 2020.07.08
화면색상변경  (0) 2020.07.02
함수리턴  (0) 2020.06.25
재귀호출  (0) 2020.06.25