1
作爲一個JavaScript學習練習,我做了一個小應用程序,讓我創建一個「圖形化」(Dreamweaver風格)的網頁。我已經添加了一個基本的自定義菜單和一個消息彈出框。這個菜單在鼠標左鍵點擊打開時綁定到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