jQuery Popup Bubble / Tooltip [geschlossen]

99

Ich versuche, eine "Blase" zu erstellen, die beim Auslösen des onmouseoverEreignisses angezeigt wird und geöffnet bleibt, solange sich die Maus über dem Element befindet, das das Ereignis ausgelöst hat, onmouseoverODER wenn die Maus in die Blase bewegt wird. Meine Blase muss alle Arten von HTML und Styling enthalten, einschließlich Hyperlinks, Bilder usw.

Ich habe dies im Grunde erreicht, indem ich ungefähr 200 Zeilen hässliches JavaScript geschrieben habe, aber ich würde wirklich gerne ein jQuery-Plugin oder eine andere Möglichkeit finden, dies ein wenig zu bereinigen.

jakejgordon
quelle
1
@bluefeet Off Topic? Ernsthaft? Der Typ hat eine Frage gestellt, wie man seine 200 Codezeilen mit JQuery verkürzt. Sie wurde fast eine Viertelmillion Mal verwendet (hat gerade mein Problem gelöst) und Sie markieren sie als Thema? Was ist damit, dass Sie mehr Meinungen als jede andere Frage haben?
Chris Sharp
@ChrisSharp Hast du den Grund gelesen, warum es geschlossen wurde? Es wird speziell nach "einem guten jQuery-Plugin für ausgefallene Blasen" gefragt. Fragen, die nach Empfehlungen fragen, sind nicht themenbezogen. Wenn Sie jedoch der Meinung sind, dass dies umgeschrieben werden könnte, um es themenbezogen zu machen, können Sie eine Bearbeitung vorschlagen, um es in Form zu bringen.
Taryn

Antworten:

158

Qtip ist das beste, das ich je gesehen habe. Es ist MIT lizenziert, schön, hat alle Konfiguration, die Sie brauchen.

Meine bevorzugte leichte Option ist beschwipst . Auch MIT lizenziert. Es inspirierte das Tooltip-Plugin von Bootstrap .

Koobz
quelle
6
Bei weitem das Beste. Eine Codezeile im Vergleich zu allen anderen großen Lösungen, die andere angeboten haben. Ich hoffe, diese Antwort wird angenommen.
Peter Walke
2
Qtip hat Kompatibilitätsprobleme mit jQuery 1.4+. Eine einfache einzeilige Korrektur des qTip-Plug-Ins behebt dies jedoch. Siehe hier: craigsworks.com/projects/forums/…
tchaymore
4
Ich habe mir heute Qtip angesehen und während es funktioniert, gibt es einige Nachteile: Wurde seit einiger Zeit nicht aktualisiert, fehlt oder hat einige offensichtliche Dinge nicht dokumentiert (Sie möchten Tooltip-Text mit einer Funktion erstellen, die beim Tipp aufgerufen wird wird angezeigt) und ist ein umfangreicher Download (teilweise, weil er eine Menge Dinge wie das Styling abgerundeter Ecken zu enthalten scheint). Hoffentlich nicht als negativ angesehen - nur versuchen, jemand anderem etwas Zeit zu sparen. Auf jeden Fall eine Überlegung wert, aber es gibt einige Nachteile.
Cymen
4
@Cymen, ich kann nicht darüber sprechen, wie die Dinge um den 10. September waren, aber nichts von dem, was du sagst, ist mehr wahr. Es ist: aktiv, gut dokumentiert und ermöglicht sehr anpassbare Downloadgrößen a jQuery UI.
Kirk Woll
52

Dies kann auch mit dem Mouseover-Ereignis problemlos durchgeführt werden. Ich habe es geschafft und es dauert überhaupt nicht 200 Zeilen. Beginnen Sie mit dem Auslösen des Ereignisses und verwenden Sie dann eine Funktion, mit der der Tooltip erstellt wird.

$('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);        
};

Anschließend erstellen Sie eine Funktion, die den Tooltip mit der Versatzposition des DOM-Elements positioniert, das das Mouseover-Ereignis ausgelöst hat. Dies ist mit CSS möglich.

function positionTooltip(event){
    var tPosX = event.pageX - 10;
    var tPosY = event.pageY - 100;
    $('div.tooltip').css({'position': 'absolute', 'top': tPosY, 'left': tPosX});
};
deeenes
quelle
1
Einfach und nützlich, kein XX Ko-Plugin erforderlich, wenn Sie es einfach schreiben können. PS: Position: Absolut fehlt :)
Kheraud
1
Sie möchten wahrscheinlich "px" -Einheiten zu Ihren Ganzzahlen hinzufügen. 'top': tPosY + 'px'und so weiter.
Robusto
1
$ ('span.klickme') - das ist schlecht :)
formatc
Ich mag deinen Ansatz. Sehr einfache Möglichkeit, keine externe Bibliothek zu verwenden
AMIC MING
12

Obwohl qTip (die akzeptierte Antwort) gut ist, habe ich damit begonnen und es fehlten einige Funktionen, die ich brauchte.

Ich bin dann auf PoshyTip gestoßen - es ist sehr flexibel und sehr einfach zu bedienen. (Und ich konnte tun, was ich brauchte)

Bozho
quelle
4

Ok, nach einiger Arbeit kann ich eine "Blase" bekommen, die zum richtigen Zeitpunkt auftaucht und verschwindet. Es gibt eine Menge Styling, das noch passieren muss, aber dies ist im Grunde der Code, den ich verwendet habe.

<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>

Hier ist ein Ausschnitt aus dem dazugehörigen HTML:

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

Ich habe ein nützliches jQuery-Plugin programmiert, um einfach intelligente Bubble-Popups mit nur einer Codezeile in jQuery zu erstellen!

Was Sie tun können: - Popups an jedes DOM-Element anhängen! - Mouseover / Mouseout-Ereignisse werden automatisch verwaltet! - Setze benutzerdefinierte Popup-Events! - Erstelle intelligente Popups mit Schatten! (auch im IE!) - Wählen Sie zur Laufzeit die Popup-Stilvorlagen aus! - HTML-Nachrichten in Popups einfügen! - Stellen Sie viele Optionen ein: Entfernungen, Geschwindigkeit, Verzögerungen, Farben…

Popups Schatten und kolorierte Vorlagen werden von Internet Explorer 6+, Firefox, Opera 9+ und Safari vollständig unterstützt

Sie können Quellen von http://plugins.jquery.com/project/jqBubblePopup herunterladen

max
quelle
3

Klingt für mich so, als ob Sie nicht mit der Maus über Ereignisse fahren möchten: Sie möchten das Ereignis jQuery hover ().

Und was Sie zu wollen scheinen, ist ein "reichhaltiger" Tooltip. In diesem Fall schlage ich einen jQuery-Tooltip vor . Mit der Option bodyHandler können Sie beliebigen HTML-Code einfügen.

Cletus
quelle
Hey, danke für die superschnelle Antwort! Ich habe gerade die Dokumentation durchgesehen und bin mir nicht sicher, ob es eine Option gibt, mit der der "Tooltip" an einer festen Position bleiben kann, damit Sie Ihre Maus darauf bewegen und auf einen Link klicken können. Hast du das schon mal benutzt? In der Zwischenzeit werde ich herunterladen und anfangen zu spielen
jakejgordon
2

Ich versuche, eine "Blase" zu erstellen, die beim Auslösen des Onmouseover-Ereignisses angezeigt wird und geöffnet bleibt, solange sich die Maus über dem Element befindet, das das Onmouseover-Ereignis ausgelöst hat, ODER wenn die Maus in die Blase bewegt wird. Meine Blase muss alle Arten von HTML und Styling haben, einschließlich Hyperlinks, Bilder usw.

Alle diese Ereignisse werden vollständig von diesem Plugin verwaltet ...

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

max
quelle
Dieser Link ist nicht mehr gut ...
Prescott Chartier
2

Die neue Version 3.0 des jQuery Bubble Popup-Plugins unterstützt jQuery v.1.7.2, derzeit die neueste und stabile Version der bekanntesten Javascript-Bibliothek.

Das interessanteste Merkmal der Version 3.0 ist, dass Sie das jQuery & Bubble Popup-Plugin zusammen mit anderen Bibliotheken und Javascript-Frameworks wie Script.aculo.us, Mootols oder Prototype verwenden können, da das Plugin vollständig gekapselt ist, um Inkompatibilitätsprobleme zu vermeiden.

jQuery Bubble Popup wurde getestet und unterstützt viele bekannte und „unbekannte“ Browser. Die vollständige Liste finden Sie in der Dokumentation.

Wie in früheren Versionen wird das jQuery Bubble Popup-Plugin weiterhin unter der MIT-Lizenz veröffentlicht. Es steht Ihnen frei, jQuery Bubble Popup in kommerziellen oder persönlichen Projekten zu verwenden, solange der Copyright-Header intakt bleibt.

Laden Sie die neueste Version herunter oder besuchen Sie Live-Demos und -Tutorials unter http://www.maxvergelli.com/jquery-bubble-popup/

Max
quelle
1

Autoresize einfache Popup-Blase

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>

buble.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;
    });
  }); 
});

buble.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); 
}
Pulsar
quelle
1

Tiptip ist auch eine schöne Bibliothek.

jemand, der mich anruft
quelle
1

Sie können dafür qTip verwenden. Sie müssten jedoch ein wenig codieren, um es beim Mouseover-Ereignis zu starten. Und falls Sie ein Standardwasserzeichen in Ihren Textfeldern haben möchten, müssen Sie das Wasserzeichen-Plugin verwenden ...

Mir wurde klar, dass dies zu viel sich wiederholendem Code führt. Deshalb habe ich über qTip ein Plugin geschrieben, mit dem es sehr einfach ist, Informations-Popups an Formularfelder anzuhängen. Sie können es hier überprüfen: https://bitbucket.org/gautamtandon/jquery.attachinfo

Hoffe das hilft.

Gautam Tandon
quelle