jQueryポップアップバブル/ツールチップ[終了]


99

onmouseoverイベントが発生したときにポップアップできる「バブル」を作成しようとしています。イベントをスローしたアイテムonmouseoverの上にマウスがあるか、マウスがバブルに移動した場合、開いたままになります。私のバブルには、ハイパーリンクや画像など、HTMLとスタイルのすべての方法が必要です。

基本的にこれを約200行の醜いJavaScriptを書くことで達成しましたが、jQueryプラグイン、またはこれを少し整理する他の方法を本当に見つけたいです。


1
@bluefeetオフトピック?マジ?男は、JQueryを使用して200行のコードを短縮する方法について質問し、25万回近く使用され(ちょうど私の問題を解決しました)、あなたはそれをトピックから外しましたか?これについては、他のどの質問よりも多くの意見が寄せられていますか?
Chris Sharp

@ChrisSharp閉鎖された理由を読みましたか?具体的には、「ファンシーバブルを行うための優れたjQueryプラグイン」を求めています。推奨事項を求める質問はトピックから外れますが、トピックに合わせるためにこれを書き直すことができると思われる場合は、形を整えるために編集を提案してください。
タリン

回答:


158

Qtipは私が見た中で最高のものです。MITライセンスで美しく、必要な構成がすべて揃っています。

私のお気に入りの軽量オプションはほろ酔いです。MITもライセンス供与。これは、Bootstrapのツールチッププラグインに影響を与えました。


6
断然最高。1行のコードと、他のすべての巨大なソリューションとの比較。この回答が投票されることを願っています。
Peter Walke、

2
QtipにはjQuery 1.4以降との互換性の問題があります。qTipプラグインの簡単な1行の修正で修正されます。ここを参照してください:craigsworks.com/projects/forums/...を
tchaymore

4
私は今日Qtipを見て、それが機能する間、いくつかのマイナス面があります:しばらく更新されていないか、欠落しているか、または明らかなことを文書化していません(ツールチップのテキストを、チップがが表示されます)、ダウンロード量が多くなります(丸みを帯びた角のスタイリングなど、多くのものが含まれているように見えるためです)。うまくいけば、ネガティブとは見なされない-誰かをしばらくの間救おうとするだけだ。間違いなく検討する価値がありますが、いくつかの欠点があります。
Cymen

4
@Cymen、私は物事が10月頃どのようにあったかについて話すことはできませんが、あなたの言うことはもはや真実ではありません。それは:アクティブで、十分に文書化されており、jQuery UIのように非常にカスタマイズ可能なダウンロードサイズを可能にします。
カークウォル

52

これは、マウスオーバーイベントでも簡単に実行できます。私はそれをやった、そしてそれはまったく200行をとらない。最初にイベントをトリガーしてから、ツールチップを作成する関数を使用します。

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

次に、マウスオーバーイベントをトリガーしたDOM要素のオフセット位置でツールチップを配置する関数を作成します。これはcssで実行できます。

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

1
シンプルで便利、XX koプラグインは簡単に記述できる場合は必要ありません。PS:position:absolute is missing :)
kheraud

1
おそらく、整数に「px」単位を追加する必要があります。'top': tPosY + 'px'等々。
ロブスト

1
$( 'span.klickme')-これは悪いです:)
formatc

私はあなたのアプローチが好きです。外部ライブラリを使用せずに行う非常に簡単な方法
AMIC MING

12

qTip(受け入れられた答え)は良いですが、私はそれを使い始めました、そしてそれは私が必要とするいくつかの機能を欠いていました。

それから私はPoshyTipに出会いました -それは非常に柔軟で、本当に使いやすいです。(そして私は必要なことをすることができました)


4

わかりました、いくつかの作業の後、私は「バブル」をポップアップして、すべての適切なタイミングで立ち去ることができます。まだ発生する必要がある多くのスタイルがありますが、これは基本的に私が使用したコードです。

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

以下は、それに付随するhtmlのスニペットです。

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

4

便利なjQueryプラグインをプログラミングして、jQueryのコード行だけで簡単にスマートなバブルポップアップを作成しました!

あなたができること:-任意のDOM要素にポップアップを添付してください!-マウスオーバー/マウスアウトイベントが自動的に管理されます!-カスタムポップアップイベントを設定!-スマートな影付きのポップアップを作成してください!(IEでも!)-実行時にポップアップのスタイルテンプレートを選択してください!-ポップアップ内にHTMLメッセージを挿入!-距離、速度、遅延、色など、多くのオプションを設定します

ポップアップの影と色分けされたテンプレートは、Internet Explorer 6以降、Firefox、Opera 9以降、Safariで完全にサポートされています

ソースはhttp://plugins.jquery.com/project/jqBubblePopupからダウンロードできます。



3

マウスオーバーイベントは必要ありません。jQueryhover()イベントが必要です。

そして、あなたが望んでいるように見えるのは「豊富な」ツールチップです。その場合は、jQueryツールチップをお勧めします。bodyHandlerオプションを使用すると、任意のHTMLを配置できます。


こんにちは、迅速な対応に感謝します!ドキュメントをざっと読みましたが、「ツールチップ」を固定位置にして、マウスをその上に移動してリンクをクリックするオプションがあるかどうかはわかりません。これを以前に使用したことがありますか?それまでの間、ダウンロードしてプレイを開始します
jakejgordon 2009年

2

私は、onmouseoverイベントが発生したときにポップアップできる「バブル」を作成しようとしています。onmouseoverイベントをスローしたアイテムの上にマウスがあるか、マウスがバブルに移動した場合、開いたままになります。私のバブルには、ハイパーリンクや画像など、HTMLとスタイルのすべての方法が必要です。

このプラグインによって完全に管理されているすべてのイベント...

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


このリンクはもう良くありません...
プレスコットチャーティエ2017年


2

jQuery Bubble Popupプラグインの新しいバージョン3.0は、jQuery v.1.7.2をサポートしています。これは、現在最も有名なjavascriptライブラリの最新の安定したバージョンです。

3.0バージョンの最も興味深い機能は、jQuery&Bubble Popupプラグインを他のライブラリやScript.aculo.us、Mootols、PrototypeなどのJavaScriptフレームワークと一緒に使用できることです。

jQuery Bubble Popupがテストされ、多くの既知および「不明」ブラウザをサポートしています。完全なリストについては、ドキュメントを参照してください。

以前のバージョンと同様に、jQuery Bubble PopupプラグインはMITライセンスの下で引き続きリリースされます。著作権ヘッダーがそのまま残っている限り、商用または個人プロジェクトでjQuery Bubble Popupを自由に使用できます。

最新バージョンをダウンロードするか、http://www.maxvergelli.com/jquery-bubble-popup/でライブデモとチュートリアルにアクセスして ください。


1

シンプルなポップアップバブルの自動サイズ変更

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

これにはqTipを使用できます。ただし、マウスオーバーイベントでそれを起動するには、少しコーディングする必要があります。テキストフィールドにデフォルトの透かしが必要な場合は、透かしプラグインを使用する必要があります...

これは多くの反復的なコードにつながることに気づきました。そのため、情報ポップアップをフォームフィールドに簡単に添付できるようにするqTipの上にプラグインを作成しました。あなたはそれをここでチェックすることができます:https//bitbucket.org/gautamtandon/jquery.attachinfo

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.