Tengo un código javascript que permite arrastrar una capa.
Pero cuando pasa por encima de una etiqueta <select>...</select> ésta queda por encima.
Sé que para ocultar un elemento con un click ó un mouseover se puede usar lo siguiente:
Código:
document.getElementById('selecta').style.visibility = 'hidden';
Pero ¿cómo sería mientras estas arrastrando la capa, teniendo pulsado el ratón?
Es decir, que lo que quiero es que mientras está pulsado el ratón sobre la capa para arrastrar, en el momento que paso por encima de la lista ésta se oculte y siga oculta hasta que la capa quede fuera de la zona de dicha lista, estando la capa en movimiento ó no.
El código que encontré para arrastrar la capa es éste:
Código:
<script language="javascript" type="text/javascript"> <!-- //***************************************************************************** // Do not remove this notice. // // Copyright 2001 by Mike Hall. // See http://www.brainjar.com for terms of use. //***************************************************************************** // Determine browser and version. function Browser() { var ua, s, i; this.isIE = false; this.isNS = false; this.version = null; ua = navigator.userAgent; s = "MSIE"; if ((i = ua.indexOf(s)) >= 0) { this.isIE = true; this.version = parseFloat(ua.substr(i + s.length)); return; } s = "Netscape6/"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = parseFloat(ua.substr(i + s.length)); return; } // Treat any other "Gecko" browser as NS 6.1. s = "Gecko"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = 6.1; return; } } var browser = new Browser(); // Global object to hold drag information. var dragObj = new Object(); dragObj.zIndex = 0; function dragStart(event, id) { var el; var x, y; // If an element id was given, find it. Otherwise use the element being // clicked on. if (id) dragObj.elNode = document.getElementById(id); else { if (browser.isIE) dragObj.elNode = window.event.srcElement; if (browser.isNS) dragObj.elNode = event.target; // If this is a text node, use its parent element. if (dragObj.elNode.nodeType == 3) dragObj.elNode = dragObj.elNode.parentNode; } // Get cursor position with respect to the page. if (browser.isIE) { x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop; } if (browser.isNS) { x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } // Save starting positions of cursor and element. dragObj.cursorStartX = x; dragObj.cursorStartY = y; dragObj.elStartLeft = parseInt(dragObj.elNode.style.left, 10); dragObj.elStartTop = parseInt(dragObj.elNode.style.top, 10); if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0; if (isNaN(dragObj.elStartTop)) dragObj.elStartTop = 0; // Update element's z-index. dragObj.elNode.style.zIndex = ++dragObj.zIndex; // Capture mousemove and mouseup events on the page. if (browser.isIE) { document.attachEvent("onmousemove", dragGo); document.attachEvent("onmouseup", dragStop); window.event.cancelBubble = true; window.event.returnValue = false; } if (browser.isNS) { document.addEventListener("mousemove", dragGo, true); document.addEventListener("mouseup", dragStop, true); event.preventDefault(); } } function dragGo(event) { var x, y; // Get cursor position with respect to the page. if (browser.isIE) { x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop; } if (browser.isNS) { x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } // Move drag element by the same amount the cursor has moved. dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px"; dragObj.elNode.style.top = (dragObj.elStartTop + y - dragObj.cursorStartY) + "px"; if (browser.isIE) { window.event.cancelBubble = true; window.event.returnValue = false; } if (browser.isNS) event.preventDefault(); } function dragStop(event) { // Stop capturing mousemove and mouseup events. if (browser.isIE) { document.detachEvent("onmousemove", dragGo); document.detachEvent("onmouseup", dragStop); } if (browser.isNS) { document.removeEventListener("mousemove", dragGo, true); document.removeEventListener("mouseup", dragStop, true); } } //--> </script>
El HTML con la lista, la capa, y los estilos empleados sería éste:
Código HTML:
<style type="text/css"> <!-- body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } h3{ font-size: 11px; margin-top: 44px; text-decoration: overline underline; } .centrado{ text-align: center; } .derecha { text-align: right; } #lupa_buscar { background-color: #0066cc; cursor: pointer; } .bgColAzulClaro { background-color: #c9d8fc; } .bgColAzul { background-color: #3770F4; } .bgColBlanco { background-color: #ffffff; } .bgColRojo { background-color: #cc0000; } /* == ESTILOS EMPLEADOS EN VENTANA de CAPA == */ .leyendTIT { font-weight: bold; color: #ffffff; cursor: default; } .leyendX { font-weight: bold; color: #ffffff; } a.leyendX:link { text-decoration: none; color: #ffffff; } a.leyendX:visited { text-decoration: none; color: #ffffff; } a.leyendX:hover { text-decoration: none; color: #ffffff; background-color: #ff3300; } #tablaImgCDCapa { background-color: #ffffff; } --> </style> ... <select name="selecta"> <option value="1">Elemento 1</option> <option value="2">Elemento 2</option> <option value="3">Elemento 3</option> <option value="4">Elemento 4</option> </select> ... <div id="capaImg" style="position:absolute; width:200px; height:115px; left:70px; top:289px; z-index:1;"> <table width="100%" border="0" cellpadding="2" cellspacing="0" class="bgColAzul"> <tr> <td class="leyendTIT" onmousedown="dragStart(event, 'capaImg');"> CD Red Hot Chili Peppers</td> <td class="derecha"><table border="0" cellpadding="1" cellspacing="0" class="bgColRojo"> <tr> <td class="bgColRojo leyendX"><a href="javascript:;" onclick="document.getElementById('capaImg').style.visibility = 'hidden';" class="leyendX" title="Cerrar" onmouseover="window.status=' :: Cerrar Ventana ::';return true" onmouseout="window.status='';return true">[X]</a></td> </tr> </table></td> </tr> </table> <table width="100%" border="0" class="bgColAzulClaro" cellpadding="3" cellspacing="0"> <tr> <td><table width="100%" border="0" id="tablaImgCDCapa" cellpadding="5" cellspacing="0" align="center"> <tr> <td class="centrado"><img src="bytheway_front.jpg" alt="Red Hot Chili" width="96" height="96" /></td> </tr> </table></td> </tr> </table> </div>
Espero se haya entendido la petición de ayuda. Resumiendo:
- que al pasar con la capa por encima de la lista, la capa siga quedando encima de la capa. Igualmente, si se deja quieta la capa ésta se quedaría por encima.
Si lo que se hace es ocultar la lista que ésta vuelva a aparecer cuando la capa salga del lugar que ocupa la lista.