ツールチップを表示する方法を調べました【jquery.balloon.js/フォーム/バリデーション/クリック】

JavaScript

jQueryは一時期に比べるとだいぶ下火になりましたが、まだまだ現役です!!
便利なライブラリもたくさんあります。

今回、ツールチップを実装できるjquery.balloon.jsの使い方をメモしておきます。

jquery.balloon.jsをページに読み込む

jquery.balloon.jsはツールチップを手軽に実装できるjQueryのライブラリです。

使用するには、jQuery本体とjquery.balloon.jsをページに読み込ませる必要があります。
今回は、以下のようにCDNで読み込みました。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-balloon-js/1.1.2/jquery.balloon.min.js"></script>

自分のサーバーにアップしたい場合は、プラグインを公式サイトからダウンロードします。

公式サイト

jquery.balloon.js Demo page

これでjquery.balloon.jsを使う準備ができました!

要素をホバーしたらツールチップを表示する

要素をホバーしたら、次のようなツールチップが表示されます。
これがもっとも基本的な動作になります。

HTMLの要素にツールチップのメッセージを設定

トリガーとなるHTML要素にツールチップで表示したいメッセージを設定します。
メッセージは、titleまたはalt属性で指定します。

<p>HTMLでツールチップのメッセージを表示するには、タグの<span class="tooltip" title="タイトル">title</span>属性に設定。</p>

HTMLでメッセージを指定したら、JavaScriptでトリガー要素をballoon(options)で実行します。
そうすれば設定は完了です。
ちなみに、ツールチップを表示させるだけならoptionsの記述はなくてOKです。
※optionsはオブジェクトで記述します。公式サイトに詳しい説明があります。

今回はトリガー要素を取得するために、クラス名を.tooltipにしています。

$(function() {
  $(".tooltip").balloon();
});

ちなみに、トリガー要素がテキストだったらtitle属性にメッセージを設定しますが、画像だったらalt属性を使えばよさそうです。

<h3>画像にツールチップを設定</h3>
<img class="tooltip" src="https://m-kenomemo.com/sample/image-date/613-2000x2000.jpg" alt="サンプル画像" />

JavaScriptでツールチップのメッセージを設定

HTMLを直接編集できない場合、JavaScript側でもメッセージを設定できます。

<p>JSでツールチップのメッセージを表示するには、optionの<span class="tooltip-js">contents</span>プロパティに設定。</p>

JavaScriptでメッセージを設定するにはoptionsのcontentsプロパティにメッセージを指定します。

$(function() {
  $(".tooltip-js").balloon({
    contents: "コンテンツ"
  })
});

動作確認用のサンプル

実際の動作はこちらで確認できます!

See the Pen balloontip-example1 by donguri2020 (@m-ke) on CodePen.

ホバー以外のイベントでツールチップを表示したい

デフォルトではマウスのホバーでツールチップが表示されますが、別のイベントで表示させたいこともあると思います。

その場合、次のようにメソッドチェーンを使用すれば、指定したイベントでツールチップの表示・非表示が可能です。

$(<要素>).on(“<イベント>“, function() {
 ・・・イベントが発生した時の処理
  }).showBalloon(<options>); //初期値:最初はバルーンを表示

showBalloon()はツールチップを表示、hideBalloon()はツールチップを非表示にするメソッドです。

クリックでツールチップを非表示にする

先ほどの構文を当てはめると次のようになります。
最初はツールチップを表示させて、クリックしたらが消えるようにする例がこちらです。

<p>この<span class="tooltip-click" title="ツールチップメッセージ">テキスト</span>をクリックすると、ツールチップが非表示になります。</p>
<script>
  $('.tooltip-click').on("click", function() {
    $(this).hideBalloon(); // クリックしたらツールチップを非表示
  }).showBalloon(); // 最初はツールチップを表示
</script>

クリックでツールチップの表示・非表示を切りかえる

クリックでツールチップの表示・非表示を切り替えるサンプルです。
※公式サイトのコードを参考にしました。

<p>この<span class="tooltip-toggle" title="ツールチップメッセージ">テキスト</span>をクリックすると、ツールチップの表示・非表示が切り替わります。</p>
<script>
// クリックでツールチップの表示・非表示を切り替える
let toggleShown = false;
  $('.tooltip-toggle').on("click", function() {
    toggleShown ? $(this).hideBalloon() : $(this).showBalloon();
    toggleShown = !toggleShown;
  }).hideBalloon(); // 最初はツールチップを非表示
</script>

テキストフィールド入力中にツールチップを表示

テキスト入力中にツールチップを表示します。フォーカスが外れたら非表示にします。
簡易ですが、バリデーションの機能も追加しました。

<input type="text" title="半角数字で入力してください" class="tooltip-istyping" placeholder="09012345678" />
<script>  
 // テキストフィールド入力中にツールチップを表示(バリデーション)
  $('.tooltip-istyping').on("keyup blur", function (e) {
    let errorMessage = "電話番号を入力してください";

     // 入力中の処理
     if (e.type == "keyup") {
       // エラーメッセージが変更になった時
       if ($(this)?.data("balloon")?.data('active')) {
        $(this).data("balloon").data('active', false);
        }
        // 数字以外が入力された時のエラーメッセージ
        if (isNaN(e.target.value)) {
          errorMessage = "半角数字で入力してください"
        }
        $(this).showBalloon({
          contents: errorMessage
        });
     }

     // 未入力、またはカーソルが外れた時
     if (e.type == "blur" || e.target.value == "") {
      $(this).hideBalloon();
     }
  }).hideBalloon();
</script>

動作確認用のサンプル

実際の動作はこちらで確認できます!

See the Pen balloontip-example2 by donguri2020 (@m-ke) on CodePen.

ツールチップにHTMLを含める

optionshtmlプロパティをtrueにすると、ツールチップのメッセージにHTMLタグを含めることができます。

ツールチップをCSSでデザインする

ツールチップのCSSは、optionscssプロパティで変更可能です。
HTMLタグを含めることで表現の幅が広がりそうです!

以下は簡単なCSSを反映したサンプルです。

<p>HTMLやCSSで装飾したツールチップは<span class="tooltip-html">こちら</span></p>
<script>
   $('.tooltip-html').balloon({
    html: true,
    css: {
      color: "#fff",
      backgroundColor: "blue",
    },
    contents: `<span class="txt-red">※</span>必須項目です<span class="txt-red">※</span>`
  })
</script>

ツールチップにイベントを設定する

HTMLが使用できるので、JavaScriptのイベントも設定できます。
以下は、ツールチップをクリックしたら非表示にするサンプルです
※ツールチップはshowBalloon()メソッドで最初から表示するようにしています。

<input type="text" class="tooltip-event" placeholder="やまだたろう" />
<script>
   // ツールチップをクリックしたら非表示
  $('.tooltip-event').showBalloon({
    html: true,
    contents: `ひらがなで入力してください<span id="hideballoon">×</span>`
  });
  $("#hideballoon").on("click", function() {
    $('.tooltip-event').hideBalloon();
  });
</script>

動作確認用のサンプル

実際の動作はこちらで確認できます!

See the Pen balloontip-example3 by donguri2020 (@m-ke) on CodePen.

バリデーションエラーをツールチップで表示する

フォームのバリデーションエラーをツールチップで表示するサンプルを作成しました。
HTML5にもバリデーション機能がありますが、HTMLを直接編集できない時に有効かもしれません。

See the Pen balloontip-form by donguri2020 (@m-ke) on CodePen.

まとめ

jquery.balloon.jsは、ちょっと古いライブラリですが、今でも十分使用できると思いました。
公式サイトのマニュアルを見れば、やりたいことは、ほぼ実現できると思います!