Estoy tratando de simular el efecto en el que sobrevivo en una imagen, una imagen semitransparente superpuesta se desvanecerá desde la dirección de donde vino su mouse. Viceversa cuando el mouse deja la imagen (fadeout + se aleja)Animación de jQuery para un elemento emergente con 'dirección del mouse'
He preparado un test page para esto. Adelante y compruébalo, aclarará cuál es el efecto deseado.
he definido una estructura HTML para esto:
<div class="overlayLink">
<img src="assets/work/thumbnails/kreatude.jpg" alt="Kreatude" />
<div class="overlayLink_overlay_bg"> </div>
<div class="overlayLink_overlay_fg">
<span class="overlayLink_overlay_link"><a href="#">View Case Study</a></span>
<div class="top"> </div>
<div class="left"> </div>
<div class="right"> </div>
<div class="bottom"> </div>
</div>
</div>
y la siguiente JS (estoy usando jQuery):
jQuery(document).ready(function() {
ourWork();
});
function ourWork(){
var inHandler = function(){
var blue_bg = jQuery(this).find('.overlayLink_overlay_bg');
var divClass = inClass;
blue_bg.stop(true,true).fadeIn();
var ml,mt;
if(divClass == 'left'){
ml = -260;
mt = 0;
}
else if(divClass == 'right'){
ml = 260;
mt = 0;
}
else if(divClass == 'top'){
ml = 0;
mt = -140;
}
else if(divClass == 'bottom'){
ml = 0;
mt = 140;
}
//positioning
jQuery(this).find('a').css({
'marginLeft': ml + 'px',
'marginTop' : mt + 'px'
});
//animation
jQuery(this).find('a').stop(true,true).animate({
"marginLeft": "0px",
"marginTop": "0px"
}, "slow");
}
var outHandler = function(){
var blue_bg = jQuery(this).find('.overlayLink_overlay_bg');
var divClass = outClass;
blue_bg.stop(true,true).fadeOut();
var ml,mt;
if(divClass == 'left'){
ml = -260;
mt = 0;
}
else if(divClass == 'right'){
ml = 260;
mt = 0;
}
else if(divClass == 'top'){
ml = 0;
mt = -140;
}
else if(divClass == 'bottom'){
ml = 0;
mt = 140;
}
//animation
jQuery(this).find('a').stop(true,true).animate({
"marginLeft": ml + "px",
"marginTop": mt + "px"
}, "slow");
}
var inClass, outClass;
jQuery('.overlayLink_overlay_fg div').hover(function(){
inClass = jQuery(this).attr('class');
},function(){
outClass = jQuery(this).attr('class');
});
jQuery('.overlayLink').mouseenter(inHandler).mouseleave(outHandler);
}
explicación:
Básicamente tengo cuatro divs posicionados absolutos en la parte superior de la imagen para saber la dirección (izquierda, arriba, abajo, derecha) cuando controlo sobre uno de esos 4 div (.overlayLink_o verlay_fg div) Puse el nombre de la clase del div oculto en una variable (var inClass y var outclass)
Una vez sobrevuelo el div que cubre el área de la imagen (.overlayLink) solicito la dirección del inClass o superar a la variable y realizar la animación (inHandler, outHandler)
sin embargo todo esto parece que funciona, que es un poco glitchy cuando se mueve el puntero del ratón muy rápido, ahora estoy pidiendo cuál es el problema (que está causando el problemas técnicos) y cómo podría solucionarse con mi código actual.
Gracias de antemano
Hay muchos problemas técnicos en la página que ha vinculado anteriormente, esto es suyo ¿verdad? Si bajé desde la cima, funciona. Luego a la izquierda funciona. Luego, si bajé desde la parte superior otra vez, funciona, pero al volver a la izquierda, aumenta la superposición. Luego, si entro por la izquierda después de eso, la superposición proviene de la parte superior. No importa qué tan rápido lo haga. –
tienes razón, no te diste cuenta que era tan complicado. Y sí, esta es mi página. Sin embargo, debe haber alguna razón lógica por la que esto sucede. Si reviso mi código no puedo ver el error lógico, lo cual me molesta bastante. – Ayrton
Simplemente no lo hagas. No es justo para los usuarios táctiles. –