jQuery Popup Balonu / Araç İpucu [kapalı]


99

onmouseoverOlay tetiklendiğinde açılan ve fare onmouseoverolayı fırlatan öğenin üzerinde olduğu sürece VEYA fare balonun içine hareket ettirilirse açık kalacak bir "balon" oluşturmaya çalışıyorum . Balonumun köprüler, resimler vb. Dahil olmak üzere tüm HTML ve stil biçimlerine sahip olması gerekecek.

Bunu temelde yaklaşık 200 satır çirkin JavaScript yazarak başardım ama gerçekten bir jQuery eklentisi veya bunu biraz temizlemek için başka bir yol bulmak istiyorum.


1
@ bluefeet Konu dışı mı? Ciddi anlamda? Adam, JQuery kullanarak 200 satırlık kodunu nasıl kısaltacağına dair bir soru sordu ve neredeyse çeyrek milyon kez kullanıldı (sadece benim problemimi çözdü) ve siz bunu konu dışı mı işaretliyorsunuz? Peki ya bu, diğer sorulardan daha fazla düşünülmüş yanıtları davet ediyor mu?
Chris Sharp

@ChrisSharp Kapatılma nedenini okudunuz mu? Özellikle "süslü baloncuklar yapmak için iyi bir jQuery eklentisi" ister. Öneriler isteyen sorular konu dışıdır, ancak bunun konuya uygun hale getirilmesi için yeniden yazılabileceğini düşünüyorsanız, o zaman şekle sokmak için bir düzenleme önermekten çekinmeyin.
Taryn

Yanıtlar:


158

Qtip, gördüğüm en iyisi. MIT lisanslıdır, güzeldir ve ihtiyacınız olan tüm konfigürasyona sahiptir.

En sevdiğim hafif seçenek sarhoş . Ayrıca MIT lisanslıdır. Bootstrap'in araç ipucu eklentisine ilham verdi .


6
Açık ara en iyisi. Diğerlerinin sunduğu tüm diğer büyük çözümlere karşı bir satır kod. Umarım bu yanıt oylanır.
Peter Walke

2
Qtip'in jQuery 1.4+ ile uyumluluk sorunları var. QTip eklentisine basit tek satırlık düzeltme, sorunu düzeltir. Buraya bakın: craigsworks.com/projects/forums/…
tchaymore

4
Bugün Qtip'e baktım ve işe yararken bazı olumsuz taraflar var: bir süredir güncellenmedi, eksik veya bazı bariz şeyleri belgelemedi (ipucu geldiğinde çağrılan bir işlevle araç ipucu metni oluşturmak istiyorum) görüntüleniyor) ve ağır bir indirmedir (kısmen yuvarlak köşe stili gibi birçok şeyi içerdiği için). Umarım olumsuz olarak görülmez - sadece bir başkasını biraz zaman kurtarmaya çalışıyorum. Kesinlikle dikkate almaya değer ama bazı olumsuzluklar var.
Cymen

4
@Cymen, '10 Eylül'de işlerin nasıl olduğunu konuşamam ama artık söylediklerinizin hiçbiri doğru değil. Aktif, iyi belgelenmiş ve jQuery UI gibi çok özelleştirilebilir indirme boyutlarına izin veriyor.
Kirk Woll

52

Bu, fareyle üzerine gelme olayıyla da kolayca yapılabilir. Ben yaptım ve hiç 200 satır sürmüyor. Etkinliği tetikleyerek başlayın, ardından ipucunu oluşturacak bir işlev kullanın.

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

Ardından, ipucunu fareyle üzerine gelme olayını tetikleyen DOM öğesinin ofset konumu ile konumlandıran bir işlev oluşturursunuz, bu css ile yapılabilir.

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

1
Basit ve kullanışlı, kolayca yazabilmek için XX ko eklentisine gerek yok. Not: konum: mutlak eksik :)
kheraud

1
Muhtemelen tam sayılarınıza "piksel" birimleri eklemek istiyorsunuz. 'top': tPosY + 'px've bunun gibi.
Robusto

1
$ ('span.klickme') - bu kötü :)
formatc

Yaklaşımını beğendim. Herhangi bir harici kitaplık kullanmadan yapmanın çok kolay yolu
AMIC MING

12

QTip (kabul edilen cevap) iyi olmasına rağmen, kullanmaya başladım ve ihtiyacım olan bazı özelliklerden yoksundu.

Daha sonra PoshyTip'e rastladım - çok esnek ve kullanımı gerçekten çok kolay. (Ve ihtiyacım olanı yapabilirdim)


4

Tamam, biraz çalıştıktan sonra bir "balon" alıp doğru zamanda gidebilirim. Hala olması gereken çok sayıda stil var ama bu temelde kullandığım kod.

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

İşte onunla birlikte gelen bir html pasajı:

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

4

JQuery'de yalnızca bir kod satırı ile kolayca akıllı balon pop-up'lar oluşturmak için kullanışlı bir jQuery Eklentisi programladım!

Ne yapabilirsiniz: - herhangi bir DOM öğesine açılır pencere ekleyin! - mouseover / mouseout olayları otomatik olarak yönetilir! - özel açılır pencere etkinlikleri ayarlayın! - akıllı gölgeli pop-up'lar oluşturun! (IE'de de!) - çalışma zamanında açılır pencerenin stil şablonlarını seçin! - açılır pencerelerin içine HTML mesajları ekleyin! - birçok seçeneği şu şekilde ayarlayın: mesafeler, hız, gecikmeler, renkler ...

Popup'ın gölgeleri ve renklendirilmiş şablonları tamamen Internet Explorer 6+, Firefox, Opera 9+, Safari tarafından desteklenmektedir

Kaynakları http://plugins.jquery.com/project/jqBubblePopup adresinden indirebilirsiniz.



3

Bana göre fareyi olayların üzerinde istemiyorsunuz: jQuery hover () olayını istiyorsunuz.

Ve istediğiniz gibi görünen şey "zengin" bir araç ipucu, bu durumda jQuery araç ipucunu öneririm . BodyHandler seçeneğiyle isteğe bağlı HTML yerleştirebilirsiniz.


Hey, süper hızlı yanıt için teşekkürler! Belgelere göz attım ve "araç ipucunun" sabit bir konumda kalması için bir seçenek olup olmadığından emin değilim, böylece farenizi üzerine getirip bir bağlantıya tıklayabilirsiniz. Bunu daha önce kullandın mı? Bu arada indirip oynamaya başlayacağım
jakejgordon

2

Fare üzerinde fare olayı tetiklendiğinde açılan bir "balon" oluşturmaya çalışıyorum ve fare, fareyle üzerine gelme olayını atan öğenin üzerinde olduğu sürece veya fare balonun içine hareket ettirildiğinde açık kalacaktır. Balonumun köprüler, resimler vb. Dahil olmak üzere tüm html ve stil biçimlerine sahip olması gerekir.

Bu eklenti tarafından tamamen yönetilen tüm bu olaylar ...

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


Bu bağlantı artık iyi değil ...
Prescott Chartier


2

JQuery Bubble Popup eklentisinin yeni sürümü 3.0, şu anda en ünlü javascript kitaplığının en son ve kararlı sürümü olan jQuery v.1.7.2'yi desteklemektedir.

3.0 sürümünün en ilginç özelliği, jQuery & Bubble Popup eklentisini Script.aculo.us, Mootols veya Prototype gibi diğer kitaplıklar ve javascript çerçeveleriyle birlikte kullanabilmenizdir çünkü eklenti, uyumsuzluk sorunlarını önlemek için tamamen kapsüllenmiştir;

jQuery Bubble Popup test edilmiştir ve birçok bilinen ve "bilinmeyen" tarayıcıyı destekler; tam liste için belgelere bakın.

Önceki sürümler gibi, jQuery Bubble Popup eklentisi MIT lisansı altında yayınlanmaya devam ediyor; Ticari veya kişisel projelerde telif hakkı başlığı olduğu gibi bırakıldığı sürece jQuery Bubble Popup'ı kullanmakta özgürsünüz.

en son sürümü indirin veya http://www.maxvergelli.com/jquery-bubble-popup/ adresinden canlı demoları ve öğreticileri ziyaret edin


1

Basit Popup Baloncuğunu otomatik olarak yeniden boyutlandırın

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


1

Bunun için qTip'i kullanabilirsiniz; Ancak fareyle üzerine gelme olayında başlatmak için biraz kodlamanız gerekir; Ve metin alanlarınızda varsayılan bir filigran istiyorsanız, filigran eklentisini kullanmanız gerekir ...

Bunun birçok tekrarlayan koda yol açtığını fark ettim; Bu yüzden, qTip'in üstüne, form alanlarına bilgilendirici açılır pencere eklemeyi gerçekten kolaylaştıran bir eklenti yazdım. Buradan kontrol edebilirsiniz: https://bitbucket.org/gautamtandon/jquery.attachinfo

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.