Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/02/2007, 19:11
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 9 meses
Puntos: 3
Re: Ocultar elemento al pasar por encima con una capa

Esta última solución señalada por JavierB es poder aplicar más sencillamente la propuesta por javiermil.
Y después de probarlo, veo que no me sirve. Solamente es útil si no muevo la capa. El IFRAME que se crea automáticamente entre la capa y el select hace que se tape la capa. Pero en el momento que muevo la capa, el IFRAME queda inmóvil en el sitio que fue creado y el efecto corrector se rompe volviendo a quedar la capa por debajo del select.

En el ejemplo mencionado del calendario, en uno de los archivos de configuración para su funcionamiento ('calendar.js'), creo que el siguiente apartado se encarga de realizar el efecto deseado de ocultar ciertos elementos cuando la capa del calendario pasa sobre ellos:

Código:
...
Calendar.prototype.hideShowCovered = function () {
	if (!Calendar.is_ie && !Calendar.is_opera)
		return;
	function getVisib(obj){
		var value = obj.style.visibility;
		if (!value) {
			if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
				if (!Calendar.is_khtml)
					value = document.defaultView.
						getComputedStyle(obj, "").getPropertyValue("visibility");
				else
					value = '';
			} else if (obj.currentStyle) { // IE
				value = obj.currentStyle.visibility;
			} else
				value = '';
		}
		return value;
	};

	var tags = new Array("applet", "iframe", "select");
	var el = this.element;

	var p = Calendar.getAbsolutePos(el);
	var EX1 = p.x;
	var EX2 = el.offsetWidth + EX1;
	var EY1 = p.y;
	var EY2 = el.offsetHeight + EY1;

	for (var k = tags.length; k > 0; ) {
		var ar = document.getElementsByTagName(tags[--k]);
		var cc = null;

		for (var i = ar.length; i > 0;) {
			cc = ar[--i];

			p = Calendar.getAbsolutePos(cc);
			var CX1 = p.x;
			var CX2 = cc.offsetWidth + CX1;
			var CY1 = p.y;
			var CY2 = cc.offsetHeight + CY1;

			if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = cc.__msh_save_visibility;
			} else {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = "hidden";
			}
		}
	}
};
...

Ahora que no llego a adaptar esto a mi caso de mi capa. Si algún experto de javascript ó DHTML me ayuda a entender el funcionamiento y poder aplicarlo a mi caso...
__________________
Saludos,

zacktagnan.
=================================================