Ir al contenido principal

Código jQuery para ver una imagen al pasar el ratón sobre un enlace.

   Voy a explicar un código en jQuery, para que, al pasar el puntero del mouse sobre un enlace o, en este caso, sobre un texto cualquiera (sin necesidad de ser un enlace), se nos muestre una imagen cerca del enlace y que esta desaparezca al retirar el puntero del mouse (sin necesidad de hacer click sobre él).
Podéis pensar que me estoy repitiendo con un anterior post. Casi que si. Pero la diferencia es que, en este caso, no sabemos donde estará situada la imagen. Es decir que, dependiendo de la situación de la pantalla donde esté el enlace o texto, allí se mostrará la imagen.

   Vamos al grano. Primero el código en HTML:

      <span class="enlace" title="hyneria.png">Hyneria</span>

   Podéis ver que, en este caso, no se trata de un enlace. Le pongo el nombre de 'enlace' a la clase porque en el CSS le doy apariencia de enlace. Aquí lo importante es 'title' el cual contiene el nombre de la imagen que queremos mostrar (podéis usar las variantes que queráis). 

   Ahora vamos a lo que realmente importa, el código jQuery para que se muestre la imagen al pasar en puntero del mouse por encima y se oculte al retirarlo. Lo cual conseguimos usando el evento del ratón 'hover'.


<!--script para mostrar y ocultar imagen al pasar y retirar el mouse del enlace-->
<script type="text/javascript">
$(document).ready(function(){ //ejecutamos el script cuando se carge la página
var anchoPantalla=$(window).width();
var sitiofoto=$('.enlace');//aquí guardamos todas las clases que sean '.enlace'

//si el ancho de la ventana es menor de 800px lo más probable es que sea pantalla táctil
//con lo cual no queremos que se muestren las imágenes
if (anchoPantalla>800) {
sitiofoto.hover(
function(e){ //función a ejecutar cuando el puntero del ratón esté encima del enlace
//localizamos y guardamos en 'x' e 'y' la posición del cursor
x=e.pageX;
y=e.pageY;

//obtenemos el nombre de la imagen (que debe estar en el atributo 'title')
nombrefoto=$(this).attr('title');

//añadimos al html un div que contendrá la foto
$('<div class="marcofoto"><img src="images/'+nombrefoto+'"></div>"').appendTo('body');
//obtenemos la altura de la imagen para después adaptar la posición
altoimagen=$('.marcofoto img').height();

//y añadimos al css de 'marcofoto' la posición donde aparecerá la imagen
//la cual será unos píxeles más por encima y menos a la izquierda 
//de la actual posición del puntero
$('.marcofoto').css({'left':x-50+'px','top':y-altoimagen-25+'px'});

},
function(){ //función a ejecutar cuando el puntero del ratón sale
//quitamos el div con clase 'marcofoto' que añadimos anteriormente
$('.marcofoto').remove();
}
);
}
})
</script>


   Creo que el script está bien explicado. Podéis comprobar el funcionamiento de este código en la página 'Las Edades de la Tierra', en la zona izquierda despegáis, por ejemplo, la sección del Cretácico y pasáis el mouse sobre los enlaces. Comentar que lo de comprobar el ancho de la pantalla es porque si   la pantalla es táctil no funcionaría correctamente la muestra de la imagen. También que tengáis cuidado con la imagen, no hacerla muy grande y cuanto menos 'pese' mejor. Si tenéis alguna duda no dejéis de comentarla.

Comentarios

  1. hi, mira, tu explicación es genial, solo que he probado lo que pones y cuando pongo el mouse sobre el texto sale la imagen pero parpadea infinitas veces dificultando su visualización

    lo mismo sucede en la página de ejemplo que das, es un error de mi internet o navegador?

    ResponderEliminar
    Respuestas
    1. Es muy probable que sea del navegador. Yo la he visualizado con el Chrome y el Firefox y la veo perfectamente.

      Eliminar
    2. Ahora que lo recuerdo, cuando comencé a depurar el script, creo que me ocurría lo mismo y lo solucioné, no sé como. ¿Te habrás saltado alguna línea?.

      Eliminar
  2. Muchas gracias por tu aportación. Desde luego este código me es de muchísima utilidad ya que llevo meses buscando algo como esto para mi Blog. Pero la verdad es que estoy intentando depurar el código y no doy con la clave. No se que es lo que habría que cambiar del código y lo peor, en el apartado que dice "aquí guardamos todas las clases que sean '.enlace'". No se de que forma habría que guardarlos. Por favor si alguien me pudiera explicar un poquito como habría que depurar este código se lo agradecería mucho. De nuevo muchísimas gracias por la aportación.

    ResponderEliminar
  3. La verdad no puedo más ya llevo muchísimo tiempo intentándolo y me estoy volviendo loco. Nada, que no me sale esto. Que rabia.

    ResponderEliminar
  4. De momento esto es lo que he hecho, aunque seguro que va mal la cosa ya que esto no me va bien.
    Os pongo el enlace a un Blog de prueba en el que lo estoy intentando. Posteriormente la idea sería de aplicarlo a la tabla que he hecho. Es decir, en cada celda azul iría una imagen que se mostraría al pasar el ratón por ella.

    https://realizandopruebasapunto.blogspot.com.es/


    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Leer un archivo XML con jQuery y javascript y modificar un HTML con su contenido

   Una manera muy interesante y fácil de modificar los textos de tu página web. Si, por ejemplo, tenemos una página donde cambiamos a menudo unas noticias que tenemos en el margen derecho, podríamos tener un código HTML como este:    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Manejar archivo XML</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="leerxml.js"></script> <link rel="stylesheet" href="estilos.css"> </head> <body> <h1>Titulo de la página</h1> <div id="derecha"> <div class="noticias"> <div class="prim

Recargar div con efecto de aparición suave (Fade In) en jQuery

  En este post continúo con el código que describí en el segundo post sobre cómo refrescar un div sin necesidad de refrescar toda la página, pero añadiéndole unas lineas para este se aparezca de forma suave. La página de ejemplo es http://www.talleresguadamia.com y el código es el que sigue: <script type="text/javascript"> $(document).ready(function(){    $("#contenido a").each(function(){       var href = $(this).attr("href");       $(this).attr({ href: "#"});       $(this).click(function(event){                  $("#contenido").css("display","none");          $("#contenido").load(href).fadeIn(700);        });    }); });; </script>   Podéis ver lo fácil que es. Hemos agregado sólo dos cosas:   - La linea  "$('#contenido').css('display','none')", que lo único que hace es cambiar la propiedad css "display" del div "#contenido&q