mouseDown. propagazione fratelli event.targets
-
26-10-2019 - |
Domanda
Ho 2 fratelli-nodi con 'posizione assoluta', che sia evento maniglia mousedown. Come posso attivare il gestore di 'div 1' quando sto clic sull'area trasparente del 'div 2' (sul pic.)
Soluzione
Se gli elementi che si sovrappongono sono dinamici, non credo sia possibile per raggiungere questo obiettivo utilizzando normale spumeggiante evento dal momento che i due elementi sovrapposti in questione sono "fratelli".
Ho avuto lo stesso problema e sono stato in grado di risolvere con più di una scenerio hitTest in cui ho test se la posizione del mouse dell'utente è all'interno della stessa area.
function _isMouseOverMe(obj){
var t = obj.offset().top;
var o = obj.offset().left;
var w = obj.width();
var h = obj.height();
if (e.pageX >= o+1 && e.pageX <= o+w){
if (e.pageY >= t+1 && e.pageY <= t+h){
return true;
}
}
return false
}
Altri suggerimenti
Ti consigliamo di utilizzare 3 gestori di eventi, uno per div1, uno per div2, e uno per contentArea. Il gestore contentArea dovrebbe smettere di propagazione in modo che il gestore div2 non viene chiamato. Il gestore div2 dovrebbe chiamare il gestore div1:
function div1Click (e)
{
// do something
}
function div2Click (e)
{
div1Click.call(div1, e);
}
function contentAreaClick (e)
{
e = e || window.event;
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
// do something
}
div1.onclick = div1Click;
div2.onclick = div2Click;
contentArea.onclick = contentAreaClick;