2020년 12월 15일

업데이트:


이벤트 연결 메소드

mouse 관련 이벤트

<h3>
    mouseenter/mouseleave <br>
    mouseover/mouseout
</h3>
<h4>mouseover-mouseout : 자식 요소에 접근 시에도 이벤트 핸들링함.<br></h4>
<div class="outer o1">
    <div class="inner"></div>
</div>
<p id="output"></p>


<hr>
<h4>mouseenter-mouseleave : 자식 요소에 접근 시에는 이벤트 핸들링을 하지 않음. </h4>
<div class="outer o2">
    <div class="inner"></div>
</div>
<p id="output2"></p>

<script>
    // mouseover, mouseout
    // 커서가 요소 위에 올라오거나 나갈 경우
    // + 자식 요소에 접근해도 동작을 함

    $(".o1").on("mouseover",function(){
        document.getElementById("output").innerHTML += "OVER! ";
    });
    $(".o1").on("mouseout",function(){
        document.getElementById("output").innerHTML += "OUT! ";
    });

    // mouseenter, mouseleave
    // 커서가 요소 위에 올라오거나 나갈 경우
    // + 자식 요소에 접근 시 이벤트가 발생하지 않음
    $(".o2").on("mouseenter",function(){
        document.getElementById("output2").innerHTML += "ENTER! ";
    });
    $(".o2").on("mouseleave",function(){
        document.getElementById("output2").innerHTML += "LEAVE! ";
    });
    

</script>



input 관련 이벤트

<h3>input 관련 이벤트</h3>
<pre>
focus :  요소가 focus를 받을 때
blur : 요소의 focus가 해제되었을 때

focusin :  선택한 요소의 자식이 focus를 받을 때
focusout :  선택한 요소의 자식이 focus가 해제되었을 때

change : 요소의 값이 변경되었을 때
    * select, checkbox, radio에 change 이벤트를 작성하는 경우
        -> 값이 변경 되었을 때

    * text 형태의 input, textarea에 change 이벤트를 작성하는 경우
        -> focus를 잃을 때 (== blur) 

select : 선택한 요소의 입력 영역 값이 블럭에 잡힌경우


</pre>
focus / blur : <input type="text" id="focus-blur"><br>

<div id="focus-in-out">
    focusin / focusout : <input type="text"><br>
</div>
change1 : <input type="checkbox" id="change1"><br>
change2 : <input type="text" id="change2"><br>
select : <input type="text" id="select"><br>


<script>
    // focus, blur
    $("#focus-blur").on("focus",function(){
        $(this).css("backgroundColor","lightblue");
    });
    $("#focus-blur").on("blur",function(event){
        $(event.target).removeAttr("style");
    });

    // focusin, focusof
    // 자식 요소에 초점이 맞춰졌을 때, 잃었을 때
    $("#focus-in-out").on("focusin",function(){
        $(this).children().css("backgroundColor","coral");
    });
    $("#focus-in-out").on("focusout",function(){
        $(this).children().removeAttr("style");
    });

    // change : 선택된 요소의 값이 변했을 때
    $("#change1").on("change",function(){
        console.log("체크박스 값이 변경됨");
        // 선택 되었을 때, 해제되었을 때 둘 다 적용됨
    });
    // change 이벤트가 textbox에서 인지되는 방법
    // == blut (포커스를 읽었을 때)
    $("#change2").on("change",function(){
        console.log("text box 값이 변경됨");
    });

    // select : 요소에 입력된 내용에 블럭이 잡힌 경우
    $("#select").on("select",function(){
        console.log("내용이 블럭에 잡힘");
    });
</script>



키보드 이벤트

<h3>키보드 이벤트</h3>
<pre>
    keydown : 키보드가 눌러질 때.(모든 키 인식함)
    keypress : 글자가 입력될 때. 펑션키, 기능키 사용 못함
    keyup : 키보드가 떼어질 때. 펑션키, 기능키 사용 못함

    **
    keydown, keyprss : 누르고 있는 만큼 인식함
    keyup : 떼어질 때 한번만 인식함
</pre>
<input type="text" id="test">
<script>
    // $("#test").on("keydown",function(event){
    //     console.log(event.key);
    //     // event.key : 어떤 키가 입력됐는지 출력(한글 : Process로 출력됨)
    // });

    // $("#test").on("keypress",function(event){
    //     console.log(event.key);
    //     // event.key : 어떤 키가 입력됐는지 출력(한글, 펑션키, 기능키 X)
    // });

    $("#test").on("keyup",function(event){
        console.log(event.key);
        // event.key : 어떤 키가 입력됐는지 출력(한글 : Process로 출력/ 펑션키, 기능키 X)
    });
</script>


동적으로 글자수 세기

<h3>동적으로 글자수 세기</h3>
<div>
    <p><span id="counter">0</span>/150</p>
    <textarea id="test2" cols="70" rows="5" style="resize:none"></textarea>
</div>
<script>
    // input 이벤트
    // 입력과 관련된 모든 동작을 인식하는 이벤트

    $("#test2").on("input",function(){
        console.log($(this).val().length);
        // .val : textarea에 입력된 값
        // .length : 문자열의 길이

        // span태그에 작성되는 내용을 입력받은 문자열의 길이로 변경
        $("#counter").text($(this).val().length);

        // 입력된 글자 수가 150을 넘어서게 되는 경우 글자 수를 빨간색으로 변경
        if($(this).val().length>=150){
            $("#counter").css("color","red");
        }else{
            $("#counter").css("color","color");
        }
    });

</script>



동적으로 아이디 조건 확인

<h3>동적으로 아이디 조건 확인</h3>
<!-- 
    아이디 입력 -> 입력 조건 검사(정규식) -> 중복 검사
    -->
<p>
    - 영어 대/소문자 + 숫자 + 특수문자(-_) 허용<br>
    - 총 6 ~14 글자

</p>
<label for="memberId">아이디 : </label>
<input type="text" name="memberId" id="memberId">
<span id="idCheck"></span>
<br>

<script>
    $("#memberId").on("keyup",function(){

        // 1) 입력된 값 얻어오기
        var memberId = $(this).val();

        // 2) 정규식 작성 후 검사
        var regExp = /^[A-Za-z\d-_]{6,14}$/;

        if(regExp.test(memberId)){
            $("#idCheck").text("사용 가능한 아이디 형식입니다.").css("color","gray");
        }else{
            $("#idCheck").text("사용할 수 없는 아이디 형식입니다.").css("color","red");
        }

    });
</script>


동적으로 비밀번호 일치 여부 확인

<h3>동적으로 비밀번호 일치 여부 확인</h3>
<p>
    - "비밀번호" 입력 후 "비밀번호 확인" 입력 시 비밀번호 일치 여부 메세지 출력<br>
    - "비밀번호" 를 미입력한 상태로 "비밀번호 확인" 입력 시 <br>
    "비밀번호 확인"에 입력된 내용을 모두 지우고<br>
    "비밀번호를 입력해 주세요." 경고창 출력 후 focus를 "비밀번호"로 이동
</p>

<!-- 비밀번호 확인을 위해서 type을 text로 진행함. -->
<label for="memberPw1">비밀번호 : </label>
<input type="text" name="memberPw1" id="memberPw1">
<span id="pwCheck"></span><br>

<label for="memberPw2">비밀번호 확인 : </label>
<input type="text" name="memberPw2" id="memberPw2">

<script>
    // 1. "비밀번호 확인" 입력 시 
    // "비밀번호"에 작성된 문자열에 길이를 얻어와 0인지 검사
    // 0인 경우 "비밀번호를 입력해주세요." 경고창 출력 후
    // focus를 "비밀번호" 으로 이동( "비밀번호" .focus())



    $("#memberPw1, #memberPw2").on("input", function(){
        var memeberPw1 = $("#memberPw1").val();
        
        if(memeberPw1.length == 0){
            alert("비밀번호를 입력해주세요.");
            $(this).val('');
            $("#memberPw1").focus();
        } else {
            if (memeberPw1 == $("#memberPw2").val()) {
                $("#pwCheck").text("비밀번호가 일치합니다.")
                    .css("color", "blue").css("font-weight", "bold");
            } else {
                $("#pwCheck").text("비밀번호가 불일치합니다.")
                    .css("color", "red");
            }
        }
});

</script>


trigger()메소드

<h1>trigger()메소드</h1>
특정 이벤트를 강제로 발생시키는 메소드로<br>
사용자 정의 이벤트 발생 시 사용<br>
이벤트 발생 시 인자 값 전달 가능
<div class="trg" id="trg">
    click Num : <span>0</span>
</div>
<div class="increment" id="increment">click me!</div>

<script>
    var ctn = 0;
    $("#trg").on('click', function () {
        ctn++;
        $("span").text(ctn);
    });

    // click me 버튼
    $("#increment").on("click",function () {
        // 주황색 박스에 있는 click 이벤트 동작을 수행
        $("#trg").trigger('click'); // click 이벤트핸들러를 요청함
    });
</script>
<p>
    trigger메소드는 해당 요소를 실제로 클릭하는 것이 아닌 <br>
    해당 요소에 올라가있는 click이벤트에 대한 이벤트핸들러를 호출하는 것. <br><br>
</p>

<a href="https://www.naver.com" id="goNaver" onclick="justClicked()">네이버로 이동</a>
<button id="btnTrg">trigger를 통한 a태그 클릭</button>
<script>
    $(function () {
        $("#btnTrg").on("click",function () {
            $("#goNaver").trigger("click");
            // a태그의 링크 이동
        });
    });
    function justClicked() {
        console.log("justClicked!!");
    }
</script>


show_hide

시각적 효과(display 속성 관련 메소드)

<h1>시각적 효과(display 속성 관련 메소드)</h1>
<p> Effect 메소드 : 페이지에 애니메이션 효과를 만들기 위한 메소드 집합 </p>
<pre>
1. $(‘s’).메소드명();
2. $(‘s’).메소드명([speed]);
3. $(‘s’).메소드명([speed], [easing], [callback]);
speed : 실행속도(밀리세컨초) / 숫자 or slow, fast
easing : 변경되는 지점별 속도 / linear, swing 가능
callback : 메소드 실행 후 실행할 함수
</pre>


show()와 hide()

<h3>show()와 hide()</h3>
<p>문서 객체를 크게 하며 보여주거나 작게 하며 사라지게 한다</p>
<p>
    $(선택자).show(speed,easing,callback)
</p>

<button id="show">보여주기</button>
<button id="hide">숨기기</button><br>
<img id="river" src="image/river1.PNG">

<hr>

<script>
    $("#show").on("click",function(){
        $("#river").show();
    });

    $("#hide").on("click",function(){
        $("#river").hide();
    });
</script>
<br>

<button id="toggle">토글버튼</button>
<!-- 토글버튼 : 버튼 하나로 on/off 동작을 하는 버튼 -->
<br>
<img id="dog" src="image/sibadog.gif">

<script>
    $("#toggle").on("click",function(){
        $("#dog").toggle(1000);
    });

    if($("#dog").css('display')!='none'){	
            $("#dog").hide(1000);
        }else{
            $("#dog").show(1000);
        }

</script>


fade

<pre>
- fadeIn : 점점 진하게 변하면서 보여지는 효과
- fadeOut : 점점 희미하게 변하면서 사라지는 효과
- fadeTo : 설정한 값까지 희미해지는 효과 ☞ opacity값으로 투명도 설정
- fadeToggle : fadeIn과 fadeOut을 동시에 적용하는 메소드

$(‘s’).fadeIn/ fadeout / fadeToggle
([속도],[구간별속도],[callback]);
$(‘s’).fadeTo([시간],[투명도],[구간별속도],[callback]);

</pre>

fadeIn(),fadeOut()

<h3>fadeIn(),fadeOut()</h3>
	<button id="fadein">fadeIn()</button>
	<button id="fadeout">fadeOut()</button><br>

	<img id="diningtable" src="image/diningtable.gif">

	<script>
        $("#fadein").on("click",function(){
            $("#diningtable").fadeIn(1000);
        });
        $("#fadeout").on("click",function(){
            $("#diningtable").fadeOut(1000);
        });
	</script>



toggle()

<h3>toggle()</h3>
<button id="toggle">fadeToggle()</button>
<br>
<img id="cute" src="image/cute1.gif">
<script>
    $("#toggle").on("click",function(){
        $("#cute").fadeToggle(1000, function(){ alert("토글완료");});
    });
</script>

<hr>
<h3>fadeTo()</h3>
<img id="flower2" src="image/flower2.PNG">

<script>
    $("#flower2").hover(function(){
        // mouseenter
        $(this).fadeTo(1000,0.2);
    },function(){
        // mouseleave
        $(this).fadeTo(1000,1);
    });
</script>



slide

<h1>slide() 메소드</h1>
<h3>slideUp(), slideDown()</h3>

<div>첫 번째 메뉴</div>
<p class="contents">1</p>
<div>두 번째 메뉴</div>
<p class="contents">2</p>
<div>세 번째 메뉴</div>
<p class="contents">3</p>
<div>네 번째 메뉴</div>
<p class="contents">4</p>
<div>다섯 번째 메뉴</div>
<p class="contents">5</p>

<script>
    $("div").on("click",function(){
        if($(this).next().css("display") == "none"){
        // $(this) : 클릭된 div 태그
        // .next : 클릭된 div 태그 다음에 존재하는 요소 <p>
        // .css("display") : p태그의 style 중 display 속성 값을 얻어 옴
        // display : 초기값 none으로 설정되어있음.
            $(this).siblings("p.contents").slideUp();
            // 클릭된 div 태그의 형제 요소 중 p태그이면서 class가 contents인 요소를 선택
            $(this).next().slideDown();
        }else{
            $(this).next().slideUp();
        }
    });
</script>


애니메이션

애니메이션 효과를 만들기 위한 메소드 집합

animate() 메소드

<h3>animate() 메소드</h3>
<p>
    <code>.animate( properties [, duration ] [, easing ] [, complete ] )</code> <br>
    properties : 변경할 css속성을 객체로 전달. <br>
    duration : 기본값은 400, millisec|slow|fast <br>
    easing : 속도 옵션. swing|linear 기본값은 swing. <br>
    더 많은 easign function은 jqueryUI 또는 별도의 plugin을 사용해야함. <br>
    * swing : 시작/끝은 느리고, 중간은 빠름. (css animation-timing-function : ease-in-out)
    complete : 애니메이션이 완료되었을때 호출될 콜백함수 작성 <br>
</p>

<button id="btn1">실행</button>
<div id="test1" class="test"></div>

<script>
    //w3schools에서 기본지원되는 속성확인
    //https://www.w3schools.com/jquery/eff_animate.asp
    //color같은 경우 기본적으로 지원하지 않음. 
    //jquery-ui의 color플러그인을 import해서 사용해야함.
    //https://api.jqueryui.com/color-animation/
    /*
    color plugin은 다음속성을 지원함.
        * backgroundColor
        * borderBottomColor
        * borderLeftColor
        * borderRightColor
        * borderTopColor
        * color
        * columnRuleColor
        * outlineColor
        * textDecorationColor
        * textEmphasisColor
    */
    $(function () {
        $("#btn1").on("click", function () {

            $("#test1").animate({ width: "500px", backgroundColor: "blue" }, 1000, function () {
                alert("애니메이션 적용 완료")
            });
        });
    });
</script>


<h3>이미지 animate()1</h3>
<img src="../image/cute1.gif" width="150px" height="100px" class="image" />
<script>
    $(document).ready(function () {
        $(".image").on("click", function (event) {
            $(this).animate({ 'left': '-158px' }, 'slow');//body의 기본 margin 8px을 추가함.
        });
    });
</script>

<hr>

<h3>이미지 animate()2</h3>
<p>
    가운데 위치한 div컨테이너 안에서 img를 우측으로 slide해서 감추어보자. <br>
    div컨테이너의 css속성 position, width, overflow등을 설정함.
</p>
<div id="scroller">
    <img src="../image/피카츄.gif" width="150px" height="100px" class="image2" />
</div>
<script>
    $(document).ready(function () {
        $(".image2").on("click", function (event) {
            console.log("a");
            $(this).animate({ 'right': '-160px' }, 1000);//-160은 image를 감싸고 있는 div에 대한 값이다.
        });
    });
</script>


댓글남기기