자바스크립트 이벤트 - EVENT API -
Javascript 2012. 4. 11. 13:51
EVENT API
지금까지 DOM 이벤트에 관한 내용으로 강좌를 쭉~ 진행해 보았습니다.
이번시간에는 이제까지 학습한 내용을 바탕으로 간단한 EVENT API 코드를 작성하여 각 함수 호출 시 해당 엘리먼트의 이벤트 변화를 살펴보도록 하겠습니다.
아래는 작성된 EVENT API 예제 소스입니다.
- var Event = (function(win, doc){
-
-
var $this = null;
-
-
return new (function(){
-
-
function init(){
-
-
$this = this;
-
-
return this;
-
}
-
-
init.prototype = {
-
bind: bind,
-
unbind: unbind,
-
stopDefault: stopDefault,
-
stopPropagation: stopPropagation,
-
relatedEventBind: relatedEventBind
-
};
-
-
-
return init;
-
-
}());
-
-
// 이벤트 할당
-
function bind(elem, type, handler, capture)
-
{
-
type = typeof type === 'string' && type || '';
-
handler = handler || function(){ ; };
-
-
if (elem.addEventListener){
-
elem.addEventListener(type, handler, capture);
-
}
-
else if (elem.attachEvent){
-
elem.attachEvent('on' + type, handler);
-
}
-
-
return elem;
-
};
-
-
// 이벤트 삭제
-
function unbind(elem, type, handler)
-
{
-
type = typeof type === 'string' && type || '';
-
handler = handler || function(){ ; };
-
-
if (elem.removeEventListener){
-
elem.removeEventListener(type, handler);
-
}
-
else if (elem.detachEvent){
-
elem.detachEvent('on' + type, handler);
-
}
-
-
return elem;
-
};
-
-
-
// 엘리먼트의 기본동작 막기
-
function stopDefault(e)
-
{
-
e = window.event || e;
-
-
if (window.event) e.returnValue = false;
-
else if (e.preventDefault) e.preventDefault();
-
};
-
-
-
// 이벤트 버블링 중지
-
function stopPropagation(e)
-
{
-
e = window.event || e;
-
-
if (window.event) e.cancelBubble = true;
-
else if (e.stopPropagation) e.stopPropagation();
-
};
-
-
-
// mouseover, mouseout 시 이벤트가 할당된 해당 엘리먼트만 호출하기
-
function relatedEventBind(e, callback)
-
{
-
var target = window.event ? e.srcElement : e.target
-
, relatedTarget = window.event ? window.event.toElement : e.relatedTarget;
-
-
callback = callback || function(){ ; };
-
-
if (relatedTarget)
-
{
-
while (relatedTarget)
-
{
-
if (relatedTarget === target) break;
-
relatedTarget = relatedTarget.parentNode;
-
}
-
}
-
-
callback.call(null, target);
-
};
-
-
}(window, document));
- 이벤트 할당
-
Event.bind(window, 'load', function(){
-
-
-
var handler1 = function(e){
-
-
alert('엘리먼트의 기본 동작을 막는 이벤트 할당');
-
Event.stopDefault(e);
-
};
-
-
var handler2 = function(e){
-
alert('기본 이벤트 할당');
-
};
-
-
-
Event.bind(document.getElementById('test_object1'), 'click', handler1, false);
-
-
Event.bind(document.getElementById('test_object2'), 'click', handler2, false);
-
-
-
}, false);
해당 엘리먼트의 이벤트 타입에 핸들러가 아래와 같이 할당 되었습니다.
- 이벤트 할당 및 삭제
-
Event.bind(window, 'load', function(){
-
-
-
var handler1 = function(e){
-
-
alert('엘리먼트의 기본 동작을 막는 이벤트 할당');
-
Event.stopDefault(e);
-
};
-
-
var handler2 = function(e){
-
alert('기본 이벤트 할당');
-
};
-
-
-
// 이벤트 할당
-
-
Event.bind(document.getElementById('test_object1'), 'click', handler1, false);
-
-
Event.bind(document.getElementById('test_object2'), 'click', handler2, false);
-
-
// 이벤트 삭제
-
-
Event.unbind(document.getElementById('test_object1'), 'click', handler1);
-
-
Event.unbind(document.getElementById('test_object2'), 'click', handler2);
-
-
}, false);
해당 엘리먼트의 이벤트 타입에 핸들러가 아래와 같이 삭제 되었습니다.
추가적으로 해당 엘리먼트의 이벤트 버블링을 중지 시키는 소스 입니다.
- Event.bind(window, 'load', function(){
-
-
-
Event.bind(document.getElementById('test_object1'), 'click', function(e){
-
// 버블링 중지
-
Event.stopPropagation(e);
-
}, false);
-
-
-
}, false);