자바 스크립트 학습으로, 필자는 웹 페이지를 '그래픽으로'(드림위버 스타일) 만들 수있는 작은 앱을 만들었습니다. 별도의 스크립트로 기본 사용자 정의 메뉴와 메시지 팝업을 추가했습니다. 메뉴는 document.body에 바인드 된 왼쪽 마우스 클릭에서 열리 며, 팝업이 포함 된 페이지 어디에서나 (물론 존재한다면). 그러한 행동을 피할 수있는 방법이 있습니까?js 다른 요소에서 마우스 이벤트 충돌을 피하는 방법
편집
다음팝업에 드래그 작업을 처리하는 기능에 대한 (거친) 코드 :
window.addEventListener('click', show_mnu, false); // Menu onclick event (simply shows the menu onscreen)
mb_hdr.addEventListener('mousedown', drag, false); // Popup event handlers
document.addEventListener('mouseup', drag, false); //
var dragOffsetX, dragOffsetY;
function drag(evt)
{
var evt = evt||window.event;
var target = document.getElementById('popup');
switch(evt.type)
{
case 'mousedown':
{
dragOffsetX = evt.clientX - target.offsetLeft;
dragOffsetY = evt.clientY - target.offsetTop;
document.addEventListener('mousemove', drag, false);
break;
}
case 'mouseup':
{
dragOffsetX = dragOffsetY = null;
document.removeEventListener('mousemove', drag, false);
break;
}
case 'mousemove' :
{
if(dragOffsetX && dragOffsetY)
{
target.style.left = (evt.clientX - dragOffsetX) + 'px';
target.style.top = (evt.clientY - dragOffsetY) + 'px';
}
break;
}
}
evt.stopPropagation(); //????
}
이벤트 처리기에서 대상 요소를 확인하고 메뉴인지 여부에 따라 실행합니다. – Bic
아마도 훨씬 더 좋은 방법 일 수 있습니다. 그러나 onmouseover를 사용하여 바인딩을 지우고 onmouseout을 재설정 할 수 있습니다. – jing3142
팝업에 자체 클릭 핸들러가 있으면 이벤트 버블 링을 방지해야합니다. 그렇지 않으면 문서 클릭 핸들러가 대상이 팝업에 있는지 확인하고 메뉴를 표시하지 않고 돌아와야합니다. 코드를 보지 않고도 더 자세하게 설명하기는 어렵습니다. – Barmar