ヘルプ内にhtmlコンテンツを内包するツールチップ(ポップアップヘルプ的なもの)
世の中にツールチップ的なヘルプをポップアップするjsはたくさん転がっていて、たいがいの場合はそれらのライブラリを使えばことが済む。こんなのとか
http://www.ideaxidea.com/archives/2008/10/tooltips.html
ただ今回場合、中のヘルプにaタグの記述などがあり、ユーザ操作を必要とするので、マウスがヘルプ上にある場合はツルーチップは表示させ続ける必要がある。
この要件に合うものがなかなか見つからなかったので、自分で書くことにした。
以下はそのスクリプトです。つたない点があるかもしれませんが仕事用のメモなのでお許しを。
ちなみにjQueryの使用を前提としています。
htmlの記述
<a href="" class="popup">?</a> <p class="tooltip">ここに<a href="">ヘルプ</a>の文言とかが入ります</p>
cssの記述
.tooltip{ width:300px; background:#fff; border:1px solid #ccc; padding:5px; position:absolute; display:none; }
javascriptの記述
var t; $(function(){ show_pupup(); // ポップアップ用スクリプト起動 // ツールチップ側の監視 $('tooltip').hover( function(){ cleartimeout(t); // hide_popup() を停止 }, function(){ $(this).hide(); // ツールチップを隠す } ); }); // ポップアップ表示のスクリプト var show_popup = function(){ $('.popup').hover( function(e){ cleartimeout(t); var tooltip = $(this).next(); var x = e.pageX; var y = e.pageY + 10; $('tooltip').hide(); $(bubble).show().css({'top':y, 'left':x}); }, function(){ cleartimeout(t); var bubble = $(this).next(); if( $(bubble).css('display') == 'none' ) { return } t = setTimeout(function(){ hide_popup(bubble); }, 1000); } ); }; // ポップアップを隠す var hide_popup = function(obj){ $(obj).hide(); };
「?」にマウスが乗ったら、ツールチップを表示させ、そのまま外れたらsetTimeoutで1秒後にツールチップを消す。
「?」からマウスが外れても、1秒以内にtooltipにマウスを合わせると、hide_popup() がcleartimeoutされて、停止。tooltipから外れると消えるという仕組みです。
あれこれ悩んだ割には、動作原理は上記のような単純なもので良かったのかと。