2009-03-09 30 views
97

Estoy tratando de hacer una "burbuja" que puede aparecer cuando se activa el evento onmouseover y permanecerá abierto mientras el mouse esté sobre el elemento que lanzó el evento onmouseover O si el mouse está movido a la burbuja. Mi burbuja tendrá que tener todas las formas de HTML y estilo, incluidos hipervínculos, imágenes, etc.jQuery Popup Bubble/Tooltip

Básicamente lo he logrado escribiendo unas 200 líneas de JavaScript feo, pero realmente me gustaría encontrar un plugin jQuery o algún otro forma de limpiar esto un poco.

+1

@bluefeet ¿Desactiva el tema? ¿Seriamente? El tipo hizo una pregunta sobre cómo acortar sus 200 líneas de código mediante el uso de JQuery, y se ha usado casi un cuarto de millón de veces (¿acaba de resolver mi problema) y lo marcas fuera del tema? ¿Qué pasa con esto invita a más respuestas obstinadas que cualquier otra pregunta? –

+0

@ChrisSharp ¿Has leído el motivo por el que estaba cerrado? En concreto, solicita "un buen complemento jQuery para hacer burbujas de fantasía". Las preguntas que soliciten recomendaciones no están relacionadas con el tema, pero si cree que esto podría reescribirse para hacerlo sobre el tema, entonces siéntase libre de sugerir una edición para ponerlo en forma. – Taryn

Respuesta

155

Qtip is the best one I've seen. Es licenciado por MIT, hermoso, tiene toda la configuración que necesita.

Mi opción ligera preferida es tipsy. También licencia MIT. Inspiró Bootstrap's tooltip plugin.

+6

De lejos, la mejor. Una línea de código frente a todas las otras soluciones enormes que otros han ofrecido. Espero que esta respuesta sea votada. –

+2

Qtip tiene problemas de compatibilidad con jQuery 1.4+. Sin embargo, una solución simple de una línea para el complemento qTip lo soluciona. Vea aquí: http://craigsworks.com/projects/forums/thread-solved-qtip-1-0-0rc3-does-not-work-with-latest-jquery- release – tchaymore

+4

Miré a Qtip hoy y mientras lo hace Hay algunos inconvenientes: no se ha actualizado en un momento, falta o no se han documentado algunas cosas obvias (se desea crear texto de sugerencia de herramienta con una función que se llama cuando se muestra la sugerencia) y es una descarga considerable (en parte porque parece incluir muchas cosas como el estilo de esquina redondeada). Esperemos que no lo vean como algo negativo, solo tratando de salvar a alguien más en algún momento. Definitivamente vale la pena considerarlo, pero hay algunas desventajas. – Cymen

3

Me parece que no desea que el mouse pase por eventos: desea el evento jQuery hover().

Y lo que parece querer es una información sobre herramientas "enriquecedora", en cuyo caso sugiero jQuery tooltip. Con la opción bodyHandler puede poner HTML arbitrario.

+0

¡Hola, gracias por la respuesta súper rápida! Recién revisé la documentación y no estoy seguro de que haya una opción para que la "información sobre herramientas" permanezca en una posición fija para que pueda mover el mouse sobre ella y hacer clic en un enlace. ¿Has usado esto antes? Mientras tanto, lo descargaré y comenzaré a jugar – jakejgordon

50

Esto también se puede hacer fácilmente con el evento mouseover. Lo he hecho y no toma 200 líneas en absoluto. Comience con activar el evento, luego use una función que creará la información sobre herramientas.

$('span.clickme').mouseover(function(event) { 
    createTooltip(event);    
}).mouseout(function(){ 
    // create a hidefunction on the callback if you want 
    //hideTooltip(); 
}); 

function createTooltip(event){   
    $('<div class="tooltip">test</div>').appendTo('body'); 
    positionTooltip(event);   
}; 

a continuación, crear una función que posicionar la descripción con la posición de desplazamiento del DOM-elemento que desencadenó el evento mouseover, esto es factible con css.

function positionTooltip(event){ 
    var tPosX = event.pageX - 10; 
    var tPosY = event.pageY - 100; 
    $('div.tooltip').css({'position': 'absolute', 'top': tPosY, 'left': tPosX}); 
}; 
+1

Simple y útil, sin necesidad de un complemento XX ko cuando pueda escribirlo fácilmente. PD: posición: absoluta falta :) – iwalktheline

+1

Probablemente quieras agregar "px" unidades a tus enteros. '' top ': tPOSY +' px'' y así sucesivamente. – Robusto

+1

$ ('span.klickme') - esto es malo :) – formatc

4

Ok, después de un trabajo soy capaz de obtener una "burbuja" para que aparezca y desaparezca en todos los momentos adecuados. Hay MUCHO estilo que todavía debe suceder, pero este es básicamente el código que utilicé.

<script type="text/javascript"> 
    //--indicates the mouse is currently over a div 
    var onDiv = false; 
    //--indicates the mouse is currently over a link 
    var onLink = false; 
    //--indicates that the bubble currently exists 
    var bubbleExists = false; 
    //--this is the ID of the timeout that will close the window if the user mouseouts the link 
    var timeoutID; 

    function addBubbleMouseovers(mouseoverClass) { 
     $("."+mouseoverClass).mouseover(function(event) { 
      if (onDiv || onLink) { 
       return false; 
      } 

      onLink = true; 

      showBubble.call(this, event); 
     }); 

     $("." + mouseoverClass).mouseout(function() { 
      onLink = false; 
      timeoutID = setTimeout(hideBubble, 150); 
     }); 
    } 

    function hideBubble() { 
     clearTimeout(timeoutID); 
     //--if the mouse isn't on the div then hide the bubble 
     if (bubbleExists && !onDiv) { 
      $("#bubbleID").remove(); 

      bubbleExists = false; 
     } 
    } 

    function showBubble(event) { 
     if (bubbleExists) { 
      hideBubble(); 
     } 

     var tPosX = event.pageX + 15; 
     var tPosY = event.pageY - 60; 
     $('<div ID="bubbleID" style="top:' + tPosY + '; left:' + tPosX + '; position: absolute; display: inline; border: 2px; width: 200px; height: 150px; background-color: Red;">TESTING!!!!!!!!!!!!</div>').mouseover(keepBubbleOpen).mouseout(letBubbleClose).appendTo('body'); 

     bubbleExists = true; 
    } 

    function keepBubbleOpen() { 
     onDiv = true; 
    } 

    function letBubbleClose() { 
     onDiv = false; 

     hideBubble(); 
    } 


    //--TESTING!!!!! 
    $("document").ready(function() { 
     addBubbleMouseovers("temp1"); 
    }); 
</script> 

Aquí hay un fragmento del html que va con ella:

<a href="" class="temp1">Mouseover this for a terribly ugly red bubble!</a> 
1

AUTORESIZE sencilla emergente de la burbuja

index.html

<!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" /> 
    <link href="bubble.css" type="text/css" rel="stylesheet" /> 
    <script language="javascript" type="text/javascript" src="jquery.js"></script> 
    <script language="javascript" type="text/javascript" src="bubble.js"></script> 
</head> 
<body> 
    <br/><br/> 
    <div class="bubbleInfo"> 
     <div class="bubble" title="Text 1">Set cursor</div> 
    </div> 
    <br/><br/><br/><br/> 
    <div class="bubbleInfo"> 
     <div class="bubble" title="Text 2">Set cursor</div> 
    </div> 
</body> 
</html> 

bubble.js

$(function() {  
    var i = 0; 
    var z=1; 
    do{ 
    title = $('.bubble:eq('+i+')').attr('title'); 
    if(!title){ 
     z=0; 
    } else { 
     $('.bubble:eq('+i+')').after('<table style="opacity: 0; top: -50px; left: -33px; display: none;" id="dpop" class="popup"><tbody><tr><td id="topleft" class="corner"></td><td class="top"></td><td id="topright" class="corner"></td></tr><tr><td class="left"></td><td>'+title+'</td><td class="right"></td></tr><tr><td class="corner" id="bottomleft"></td><td class="bottom"><img src="bubble/bubble-tail.png" height="25px" width="30px" /></td><td id="bottomright" class="corner"></td></tr></tbody></table>'); 
     $('.bubble:eq('+i+')').removeAttr('title'); 
    } 
    i++; 
    }while(z>0) 

    $('.bubbleInfo').each(function() { 
    var distance = 10; 
    var time = 250; 
    var hideDelay = 500;   
    var hideDelayTimer = null;  
    var beingShown = false; 
    var shown = false; 
    var trigger = $('.bubble', this); 
    var info = $('.popup', this).css('opacity', 0);   

    $([trigger.get(0), info.get(0)]).mouseover(function() { 
     if (hideDelayTimer) clearTimeout(hideDelayTimer); 
     if (beingShown || shown) { 
     // don't trigger the animation again 
     return; 
     } else { 
     // reset position of info box 
     beingShown = true; 

     info.css({ 
     top: -40, 
     left: 10, 
     display: 'block' 
     }).animate({ 
     top: '-=' + distance + 'px', 
     opacity: 1 
     }, time, 'swing', function() { 
      beingShown = false; 
      shown = true; 
     }); 
     }   
     return false; 
    }).mouseout(function() { 
     if (hideDelayTimer) clearTimeout(hideDelayTimer); 
     hideDelayTimer = setTimeout(function() { 
     hideDelayTimer = null; 
     info.animate({ 
      top: '-=' + distance + 'px', 
      opacity: 0 
     }, time, 'swing', function() { 
      shown = false; 
      info.css('display', 'none'); 
     }); 
     }, hideDelay); 
     return false; 
    }); 
    }); 
}); 

bubble.css

/* Booble */ 
.bubbleInfo { 
    position: relative; 
    width: 500px; 
} 
.bubble {  
} 
.popup { 
    position: absolute; 
    display: none; 
    z-index: 50; 
    border-collapse: collapse; 
    font-size: .8em; 
} 
.popup td.corner { 
    height: 13px; 
    width: 15px; 
} 
.popup td#topleft { 
    background-image: url(bubble/bubble-1.png); 
} 
.popup td.top { 
    background-image: url(bubble/bubble-2.png); 
} 
.popup td#topright { 
    background-image: url(bubble/bubble-3.png); 
} 
.popup td.left { 
    background-image: url(bubble/bubble-4.png); 
} 
.popup td.right { 
    background-image: url(bubble/bubble-5.png); 
} 
.popup td#bottomleft { 
    background-image: url(bubble/bubble-6.png); 
} 
.popup td.bottom { 
    background-image: url(bubble/bubble-7.png); 
    text-align: center; 
} 
.popup td.bottom img { 
    display: block; 
    margin: 0 auto; 
} 
.popup td#bottomright { 
    background-image: url(bubble/bubble-8.png); 
} 
4

He programado un útil plugin de jQuery para crear ventanas emergentes de burbujas fácilmente inteligentes con sólo una línea de código en jQuery!

Lo que puede hacer: - ¡adjuntar ventanas emergentes a cualquier elemento DOM! - eventos mouseover/mouseout administrados automáticamente! - ¡establece eventos popups personalizados! - ¡crea ventanas emergentes sombreadas inteligentes! (¡en IE también!) - ¡elige plantillas de estilo popup en tiempo de ejecución! - inserta mensajes HTML dentro de ventanas emergentes! - configurar muchas opciones como: distancias, velocidad, retrasos, colores ...

de sombras coloreadas y las plantillas son totalmente compatibles con Internet Explorer 6+, Firefox, Opera 9+ emergente, Safari

Puede descargar fuentes de las http://plugins.jquery.com/project/jqBubblePopup

2

que estoy tratando de hacer una "burbuja" que puede emergente cuando el evento onmouseover es disparado y permanecerá abierto mientras el ratón está sobre el elemento que arrojó el evento onmouseover o si el mouse se mueve a la burbuja. Mi burbuja tendrá que tener toda clase de html y estilo incluyendo hipervínculos, imágenes, etc.

Todos esos eventos totalmente gestionados por este plugin ...

http://plugins.jquery.com/project/jqBubblePopup

+0

Este enlace ya no es bueno ... –

11

Aunque qTip (la respuesta aceptada) es bueno, comencé a usarlo, y carecía de algunas características que necesitaba.

Me encontré con PoshyTip - es muy flexible y muy fácil de usar. (Y podría hacer lo que necesitaba)

2

La nueva versión 3.0 del complemento jQuery Bubble Popup es compatible con jQuery v.1.7.2, actualmente la versión más reciente y estable de la biblioteca javascript más famosa.

La característica más interesante de la versión 3.0 es que puede usar junto jQuery & complemento Bubble Popup con otras bibliotecas y marcos de JavaScript como Script.aculo.us, Mootols o Prototype porque el complemento está completamente encapsulado para evitar problemas de incompatibilidad ;

jQuery Bubble Popup fue probado y es compatible con muchos navegadores conocidos y "desconocidos"; ver la documentación para la lista completa.

Al igual que las versiones anteriores, el complemento jQuery Bubble Popup continúa publicándose bajo la licencia MIT; Puede utilizar jQuery Bubble Popup en proyectos comerciales o personales, siempre que el encabezado de derechos de autor quede intacto.

descarga la versión más reciente o visite demostraciones en vivo y tutoriales en http://www.maxvergelli.com/jquery-bubble-popup/

1

Puede usar qTip para esto; Sin embargo, tendrías que codificar un poco para iniciarlo en el evento mouseover; Y en caso de que desee una marca de agua predeterminada en los campos de texto, tendrá que usar el complemento de marca de agua ...

Me di cuenta de que esto genera una gran cantidad de código repetitivo; Así que escribí un complemento en la parte superior de qTip que hace que sea muy fácil adjuntar elementos emergentes informativos a los campos de formulario. Puede verificarlo aquí: https://bitbucket.org/gautamtandon/jquery.attachinfo

Espero que esto ayude.

Cuestiones relacionadas