본문 바로가기

회고록(TIL&WIL)

TIL 2023.02.08 jQuery 2

event

// DOM event
// ready & load
// ready -> load 순서로 됨
// 일반적으로 ready를 사용함
// load는 통신에서 사용되게 됨
$(document).ready(function(){
    console.log('ready');
});
$(window).load(function(){
    console.log('load');
});
$(function(){
    console.log('ready 생략');
})
// scroll
$(window).scroll(function(){
    console.log('scrolling', $(window).scrollTop(), $(document).height()+10-screen.availHeight);
})
// resize
$(window).resize(function(){
    console.log('사이즈 변경...', $(window).width(), $(window).height());
});
// error
$(document).ready(function(){
    $('img').error(function(){
        $('img').attr('src', 'imgs/logo.png');
    })
    .attr('src','imgs/thumnail0.jpg');

mouse event

$(document).ready(function(){
    // console.log($('button').length) // element가 몇개 잡혔는지 확인
    $('button').click(function(e){
        console.log('클릭', $(e.target).html(), $(this).html());
    });
    $('button').eq(0).click(function(e){
        console.log('클릭', e.target, this);
    })
    // btn2
    .next().dblclick(function(){
            console.log('더블클릭');
        })
    // btn3
    .next().mousedown(function(){
            console.log('down');
        }).mouseup(function(){
            console.log('up');
        })
    // btn4
    .next().mouseenter(function(){
            console.log('안으로');
        }).mouseleave(function(){
            console.log('밖으로');
        })
    // btn5
    .next().mouseover(function(){
            console.log('안으로');
        }).mouseout(function(){
            console.log('밖으로');
        })
    // btn6
    .next().hover(function(){
        console.log('안으로 오거나 밖으로 나갈 때')
    })
    $('div').mouseenter(function(){
            console.log('안으로');
        }).mouseleave(function(){
            console.log('밖으로');
        })
    $('a').click(function(e){
        e.preventDefault(); // level 3의 방식
        console.log('페이지 이동x');
        // jquery는 dom level 3로 작동되나
        // level 2 처럼 사용 할 수 있음
        // return false;
    })
});
$(function(){
    $('button').eq(0).click(); // 이벤트 트리거
})

key event

$(document).ready(function(){
    $('input')
            .keydown(function(e){ // 어떤 키를 눌렀는가
                console.log('down', e.key, e.keyCode, $(this).val());

            })
            .keypress(function(e){ // 정확한 입력값 대소문자 체크
                console.log('press', e.key, e.keyCode, $(this).val());

            })
            .keyup(function(e){ // 입력 후 element에서 값을 정확히 뽑아내려면
                console.log('up', e.key, e.keyCode, $(this).val());

            });
});

listener

$(document).ready(function(){
    $('div').children()
    .filter('label:first-child')
    .css({
        display:'block',
        width:$('input').first().outerWidth()+"px",
        'background-color':'gray'
    });

    $('input').eq(1).focus();
    $('form').submit(function(e){
        console.log('submit 취소');
        return false;
    });
    // default값, 적혀있는 값 지우기 focusin(focus), focusout(blur)
    $('input').eq(0).focus(function(){
        console.log('focus');
        // $(this).val("");
        $(this).select(); // 드래그해서 선택한 걸로 해줌
    }).blur(function(){ // 포커스 없어졌을 때 validation 보여주기
        console.log($(this).val());
        if($(this).val().length < 4){
            $(this).css({border:'1px solid red'});
        } else {
            $(this).css({border:'1px solid black'});
        }
    });
    // 특정 입력횟수 입력하면 다음 인풋으로 이동
    $('input').eq(1).keyup(function(){
        console.log('keyup')
        if($(this).val().length > 4){
            // $('input').eq(2).focus();
            // $(this).parent().next().children().filter('input').focus();
            $(this).parent().next().find('input').focus();
        }
    });
    $('input').eq(2).select(function(e){
        console.log($(this).val(), e);
    });
    // $('select').change(function(){
    //     console.log($(this).val());
    // })
    // $('input:radio').change(function(){
    //     console.log($(this).val());
    // });
    // $('input:checkbox').change(function(){
    //     console.log($(this).val());
    // });
    $('select').add($('input:radio')).add($('input:checkbox')).change(function(){
        console.log($(this).val());
    });
});

event update

// event update
var cnt = 1;
$(function(){
    var callback1 = function(){
        console.log('클릭1');
    };
    $(document).on('click','div>button', callback1); // 버튼에 이벤트 달기
    // 해당하는 새로운 element에도 이벤트가 적용되고 전부 누적되기 때문에 주의
    $(document).off('click','div>button', callback1); // 버튼에 이벤트 없애기
    // 클릭마다 버튼 생성하기
    $('button').click(function(){
        cnt++;
        $('div').append('<button>btn'+cnt+'</button>');

        // $('button').last().click(function(){
        //     console.log('btn'+$(this).text()+" 클릭")
        // });
    });
});

event add

$(function(){
    // 이벤트 등록 on(addEventListener)
    // $('button').one('click', {key:'val'}, function(e){ // 한번만 되는 이벤트부여 one
    $('button').on('click', {key:'val'}, function(e){
        console.log('클릭', this, e.data);
    });
    // 다중이벤트 등록가능
    $('input').on('keyup keydown', function(){ 
        console.log($(this).val());
    }).on('focus click', function(){
        $(this).val("");
    });
    // 트리거
    $('button').trigger('click');

});

animation

$(function(){
    var callback = function(){
        console.log('end');
    };
    $('div').eq(0).css({
        height:'50px',
        width:'0px',
        backgroundColor:'tomato'});
    // $('button')
    //     // btn1 - 글 숨기기
    //     .first().click(function(){
    //         // $('div').hide('slow');
    //         // $('div').hide('fast');
    //         // $('div').hide(3000, callback); // 끝나고 나서 callback 함수 호출됨
    //         $('div').eq(1).hide({
    //             duration: 3000,
    //             easing: 'linear',
    //             complete: callback,
    //             progress: function(a,b,c){
    //                 // console.log(a); // 객체
    //                 console.log(b); // 0~1 까지
    //                 // console.log(c); // 설정시간 3000~0 까지
    //                 $('div').width(b*100+"%");
    //             },
    //         })
    //     })
    //     // btn2 - 글 보이기
    //     .next().click(function(){
    //         $('div').show();
    //     })
    //     // btn3 - 토글
    //     .next().click(function(){
    //         $('div').toggle(3000);
    // });

    // slide
    // $('button')
    //     .eq(0).click(function(){
    //         $('div').last().slideUp(3000);
    //     })
    //     .end().eq(1).click(function(){
    //         $('div').last().slideDown(3000);
    //     })
    //     .end().eq(2).click(function(){
    //         $('div').last().stop().slideToggle(3000);
    //     });

    // fade
    // $('button')
    //     .eq(0).click(function(){
    //         $('div').last().fadeOut(3000);
    //     })
    //     .end().eq(1).click(function(){
    //         $('div').last().fadeIn(3000);
    //     })
    //     .end().eq(2).click(function(){
    //         $('div').last().fadeToggle(3000);
    //     })
    //     .end().eq(3).click(function(){
    //         $('div').last().fadeTo(3000, 0, function(){
    //             $('div').last().height(0);
    //         });
    //     })
})

animate

$(function(){
    console.log('animate start...');
    // 애니메이션들은 queue에 누적됨
    $('div')
            .click(function(){
                // $(this).clearQueue(); // 애니메이션 queue 비움(현재껀 진행됨)
                // $(this).stop(); // 현재 애니메이션 종료
                // $(this).finish(); // 모든 애니메이션 종료
                $(this).dequeue();
            })
            .animate({marginLeft:'300px'}, 3000,'linear',()=>{console.log('end');})
            .animate({marginTop:'300px'}, 3000,'linear',()=>{console.log('end');})
            .animate({marginLeft:'0px'}, 3000,'linear',()=>{console.log('end');})
            .animate({marginTop:'0px'}, 3000,'linear',()=>{console.log('end');})
            .dequeue()
            console.log('animate end?');
});

carousel animate

function loop(){
    $('ul').animate({marginLeft:'-100px'}, 2000,'linear', function(){
        $('ul').css('margin-left', 0);
        $('ul').children().first().appendTo('ul');
    });
}
$(function(){
    setInterval(loop, 2000);
});
------------------- css --------------------------------
div{
    width: 300px;
    height: 100px;
    overflow: hidden;
    margin: auto;
}
ul{
    width: 400px;
    height: 100px;
    overflow: hidden;
    padding: 0px;
    margin: 0px;
    list-style: none;
}
ul>li{
    float: left;
}
ul>li>img{
    width: 100px;
}
--------------------- html -------------------------------
<div>
    <ul>
        <li><img src="imgs/thumnail1.jpg"></li>
        <li><img src="imgs/thumnail2.jpg"></li>
        <li><img src="imgs/thumnail3.jpg"></li>
        <li><img src="imgs/thumnail4.jpg"></li>
        <li><img src="imgs/thumnail5.jpg"></li>
        <li><img src="imgs/thumnail6.jpg"></li>
    </ul>
</div>

마우스로 이미지 일부만 보기

<script type="text/javascript" src="./js/jquery-1.12.4.min.js"></script>
<script>
    $(function(){
        $('h1+div').mousemove(function(e){
            console.log(e.pageX,e.pageY);
            $('h1+div').css(
                {
                    left:e.pageX-150+"px",
                    top:e.pageY-150+"px"
                }
            )
        });
    });
</script>
<style>
    div{
        background-color: #fff;
    }
    div>img{
        width:300px;
        height:300px;
    }
    h1+div{
        width: 100px;
        height: 100px;
        position: absolute;
        margin-left: -200px;
        margin-top: -200px;
        border: 300px solid white;
        background-color: rgba(0,0,0,0);
    }
</style>

'회고록(TIL&WIL)' 카테고리의 다른 글

TIL 2023.02.13 Java Web 4 (MVC model2, maven)  (0) 2023.02.13
TIL 2023.02.09 jQuery3 Servlet  (0) 2023.02.09
TIL 2023.02.07 JSON, jQuery  (0) 2023.02.07
TIL 2023.02.06 javascript 4  (0) 2023.02.06
TIL 2023.02.03 JavaScript 3  (0) 2023.02.03