• ベストアンサー

キーワードをクリックすると説明文をする表示方法

最近「キーワード」をマウスでクリックしたり、乗せたりするとキーワードの説明が、キーワード付近に表示されるサイトを見ます。 その実装方法が分からずに困っています。 下記の流れで実現するのかと考えています。 (1)キーワードの説明分をHTMLの最後に列記してCSSのdisplay:noneで非表示にする。 (2)クリックされた「キーワード」のウィンドウに対するマウス座標をJavascriptで取得する。 (3)座標を元に「キーワード」に対応する説明分をCSSで絶対配置してdisplay: blockで表示する 特に(2)の方法が分からずにいます。 上記の流れでよいのかも自信がないです。どのような方法でも実現できれば大変うれしいです。手がかりだけでも教えていただければと考えています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#23734
noname#23734
回答No.2

大雑把に書いたもので、余分なところも結構ありますが、こんなのはどうですか? positionのtop(getPos(Event,obj)[0])、left(getPos(Event,obj)[1])の位置を返す予定です。 objは表示させたい要素です。 Eventはイベントです。 IE6,Firefox1.5,Opera8,9.1には対応すると思いますよ。 function getPos(Event,obj){ var CSS = document.compatMode == 'CSS1Compat' if(CSS){ var BElem = document.documentElement } else { var BElem = document.body } if(window.innerHeight != undefined){ var EffectiveWidth = window.innerWidth //有効範囲幅 var EffectiveHeight = window.innerHeight //有効範囲高さ }else{ var EffectiveWidth = BElem.clientWidth //有効範囲幅 var EffectiveHeight = BElem.clientHeight //有効範囲高さ } var EMouseX = Event.clientX //有効範囲上のマウス座標X var EMouseY = Event.clientY //有効範囲上のマウス座標Y var ScrollLeft = BElem.scrollLeft //横スクロール量 var ScrollTop = BElem.scrollTop //縦スクロール量 if(Event.pageX != undefined){ var MouseX = Event.pageX //横スクロール量込みマウス座標X var MouseY = Event.pageY //横スクロール量込みマウス座標X }else{ var MouseX = EMouseX + ScrollLeft //横スクロール量込みマウス座標X var MouseY = EMouseY + ScrollTop //横スクロール量込みマウス座標Y } var RMenuWidth = obj.clientWidth //RMenu幅 var RMenuHeight = obj.clientHeight //RMenu高さ var RMenuRight = EMouseX + RMenuWidth var RMenuBottom = EMouseY + RMenuHeight if(EffectiveHeight < RMenuBottom){ var Top = MouseY - RMenuHeight } else{ var Top = MouseY } if(EffectiveWidth < RMenuRight){ var Left = MouseX - RMenuWidth } else{ Left = MouseX } return new Array(Top,Left) } 大雑把な流れですがご参考になれば・・・

infotown
質問者

お礼

早速のご回答ありがとうございます。 詳しいサンプルコードを掲載していただき、 ありがとうございます。 ご質問した処理は, 現在の自分の力では難しく本当に行き詰っていましたが、 掲載頂いた関数を利用することで、 当初の目的どおりの処理が達成できました。 またJavascriptの便利さと素晴らしさを実感しました。 本当にありがとうございました。

その他の回答 (1)

回答No.1

実装方法 <a href="#" title="キーワードの説明">キーワード</a>

infotown
質問者

お礼

早速のご回答ありがとうございます。 こういう方法があったんですね。 大変参考になりました。 ありがとうございます。

関連するQ&A

  • クリックすると下に説明文が出るものを作りたい。

    ホームページで辞典を作ろうと思っています。 クリックすると、その単語の説明が下に表示されて、再度クリックすると、表示が閉じるタイプのものが作りたいのですが、現在私が作っているものではエラーが出ます。 <HTML> <HEAD> <TITLE>単語辞典</TITLE> <SCRIPT language="JavaScript"></SCRIPT> <STYLE type="text/css"> <!-- .sld{ border:1 solid #000; padding:3; background-color:"F0F0F0F0 ;} --> </STYLE> </HEAD> <BODY> <I>あ行</I><BR> <A onClick=" sld('01')">■単語<BR> </A> <DIV style="DISPLAY:none; class=sld id=01">単語の説明文</DIV> </BODY> </HTML> ※エラーは<A onClick=".....">のAの部分で「オブジェクトを指定してください」と出てきます。 どなたかお願いします。

  • クリックすると下に説明文が出るものを作りたい。

    ホームページで辞典を作ろうと思っています。 クリックすると、その単語の説明が下に表示されて、再度クリックすると、表示が閉じるタイプのものが作りたいのですが、現在私が作っているものではエラーが出ます。 <HTML> <HEAD> <TITLE>単語辞典</TITLE> <SCRIPT language="JavaScript"></SCRIPT> <STYLE type="text/css"> <!-- .sld{ border:1 solid #000; padding:3; background-color:"F0F0F0F0 ;} --> </STYLE> </HEAD> <BODY> <I>あ行</I><BR> <A onClick=" sld('01')">■単語<BR> </A> <DIV style="DISPLAY:none; class=sld id=01">単語の説明文</DIV> </BODY> </HTML> ※エラーは<A onClick=".....">のAの部分で「オブジェクトを指定してください」と出てきます。 どなたかお願いします。

  • クリックで表示/非表示の切り替え

    私は今現在HPを作成しているのですが、その中の特定のページでテキストをクリックしたら表示/非表示の切り替えをしたいと考えてます。 表示/非表示自体は検索して出てきたオープンソースを拝借したら出来ました。 ソースは下記のように記述してます。 しかし、既存の状態だと『テキスト1』をクリックして表示させたらもう一度『テキスト1』をクリックしない限り非表示にはなりません。 『テキスト1』をクリックして表示している状態で『テキスト2』をクリックしたら自動的に『テキスト1』の表示されてる部分を非表示しにしたいのですが。 <head> <SCRIPT type="text/JavaScript"> <!-- function showHide(targetID) { //functionの宣言。受けとったIDは変数targetIDに格納。 if( document.getElementById(targetID)) { //指定のIDのついたオブジェクトがあったら処理する //指定されたIDのstyle.displayがnoneなら if( document.getElementById(targetID).style.display == "none") { //blockに変更する document.getElementById(targetID).style.display = "block"; } else { //noneでなければ、つまりblockなら //noneにする document.getElementById(targetID).style.display = "none"; } } } //--> </SCRIPT> </head> <body> <a href="#" onClick="showHide('SH-001');return false;">テキスト1</a> <a href="#" onClick="showHide('SH-002');return false;">テキスト2</a> <div id="SH-001" style="display: none">テキスト1をクリックしたら表示される部分</div> <div id="SH-002" style="display: none">テキスト2をクリックしたら表示される部分</div> </body> Javascriptについてはまだ知識がなく解決方法が皆目見当もつきません。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

  • カーソル当てると説明文出るようにしたいんです。

    CSSで今HP作っています。 カーソルを当てると説明文が出るようにしたいのですが どういうタグをCSSで作ったら良いか分かりません。 <alt="○○">や<title="○○">で出るような窓ではなく 自分で[好きな背景色]にしたり出来る説明窓を作りたいのです。 例えば http://myako.net/linkjs.html ここのようにしたいのです。 あるHPのソースを見たら <span id="txt1" style="display:none;position:absolute; border:3px solid #006633;color:#ffffff;background-color:#000000;">○○</span> となっていたのですがこれを記入しても文字が出てきませんでした。 何をどう記入し作ったら良いのか分からないので 作成法を教えてください。 または方法を教えてくれているサイトがありましたらを教えてください。

  • キーワードカラー表示エディタの製造について

    こんにちは。ご指導ください。 Visual Basic 6.0 SP6 / WinXP Pro で、RickTextBox に対して一部のキーワードをカラー表示するようなエディタの開発をしております。 以下のような実現方法を試してみたのですが、どれもパフォーマンスが優れません。 ・Find メソッドでキーワードを探し SelStart,SelLength で範囲指定したあと SelColor を変更 ・前述の方法をメソッド/プロパティ指定ではなく SendMessageAPI にて実施 ・TextRTF のカラーテーブルを編集しキーワードに RTF コードを挿入 Visual Basic で速度を求められないのは判ってはいるのですが… 一度テキストボックスごと自作してみたのですが、マウスにてテキストの範囲選択を行う部分のコード実装をしている時に、これ全部自分で作るの大変…と思いまして、質問させていただきました。 この問題に対して、以下の質問をさせてください。 (1)基本的なカラー表示可能なエディタは、自作コントロールなのでしょうか?RichTextbox 等は使用していないのでしょうか。 (2)マルチスレッドにて編集とカラーを別にしたらストレスのない速度が実現できるのでしょうか。(まだ試していません) (3)これらを実現するフリーの TextBox コンポーネント等がありますでしょうか。 (4)アルゴリズムの考え方がレスポンスの低下を招いている可能性もあります。キーワードカラー表示を高速に実現するために、必要なパフォーマンスに対する考え方がありましたら、教えてください。 一度にいくつも質問をしてしまい、申し訳ありません。 長いこと同じ問題について悩んでいるのですが、一向に解決しないため、質問させてください。 よろしくお願いいたします。

  • a href=tel → PCで表示させない方法

    スマホユーザーのことを考えて、a href=telを使い、電話番号をクリックすると自動的に電話ができるようにしました。 しかし、パソコン(IEやサファリ、firefox)からクリックすると、このページはありませんという不細工な格好になってしまします。 a href=telをパソコンでは機能しないようにすることは可能でしょうか? 他のサイトで、CSSを使い、display:noneにすれば、パソコンでは表示されなくなるという説明がありました。しかし、ブラウザの表示がくずれてしまいました。 何か良い方法がありましたら、教えて下さい。

    • ベストアンサー
    • CSS
  • オンマウスで説明文のレイヤーを表示

    画像の上にカーソルが乗ると、レイアウトを崩さずに その画像の横にdivを表示する(上に重なるように)方法はありませんか? ※マウスの座標からではなく、その画像のからの位置を指定。

  • クリックで表示、非表示するメガメニュー

    クリックで表示して再度クリックすると非表示になるメガメニューを作ろうと思ってます。 下記のページを参考にjQueryでマウスオーバーによるメガメニューは作成しました。 http://www.skuare.net/test/jmegadropdown.html ただ、jQueryどころかjavascriptも昔少しやった程度しか知識がありませんので、ソースはほぼ上記のページと同じです。 これをクリックでメニュー表示して、再クリックで非表示にするにはどうしたらよいでしょうか? 具体的にはマイクロソフトのページの上にあるようなメニューです。 http://www.microsoft.com/ja-jp/default.aspx 自分の今の知識でjavascriptを使って書いたコードは下記のとおりです。 このように書いていけば出来るとは思うのですが、もっと効率よく出来る方法はあるでしょうか? よろしくお願いします。 function test1() { $("#topnav li .products1 .sub").toggle(); $("#topnav li .sale1 .sub").css("display", "none"); } function test2() { $("#topnav li .products1 .sub").css("display", "none"); $("#topnav li .sale1 .sub").toggle(); } <ul id="topnav"> <li> <a href="#" class="products" onclick="test1()">Products</a> <div class="products1"> <div style="opacity: 0; display: none; width: 600px;" class="sub"> <ul> <li><h2><a href="#">menu1</a></h2></li> <li><a href="#">Link1</a></li> <li><a href="#">Link2</a></li> </ul> <ul> <li><h2><a href="#">menu2</a></h2></li> <li><a href="#">Link1</a></li> <li><a href="#">Link2</a></li> </ul> </div> </div> </li> <li> <a href="#" class="sale" onclick="test2()">Sale</a> <div class="sale1"> <div style="opacity: 0; display: none; width: 450px;" class="sub"> <ul> <li><h2><a href="#">menu</a></h2></li> <li><a href="#">Link - 1</a></li> <li><a href="#">Link - 2</a></li> <li><a href="#">Link - 3</a></li> <li><a href="#">Link - 4</a></li> </ul> </div> </div> </li>

  • 「カーソル当てると説明が出る方法」

    <ait>や<title>でなく カーソルを当てると自分の好きな「背景色や枠色」で 説明文が出るようにしたいのですが中々うまくいきません。 そこで、あるサイトの方のソースを見て そのままタイトルや説明文章を変えてみたら表示できました。 -<a href="○○.html" onmouseover="txt1.style.display='block'" onmouseout="txt1.style.display='none'">○○タイトル</a> <span id="txt1" style="display:none;position:absolute; border:3px solid #006633;color:#ffffff;background-color:#000000;">○○説明</span> ここにあろ<span id="txt1>という物が何か分かりません。 自分でCSSで<txt1>を作らないといけないでしょうか? もし.txt1 を作るなら何を記入すれば良いのですか? またこのまま、この方のソースをコピペして使った場合 もしこの方がサイトを閉鎖しても 僕がコピペした部分はそのまま生きていますでしょうか? もし手直し等必要ならどうか教えてください。 このままで良いのか手直しがいるのかが分かりません。

  • click範囲の指定

    jQuery1.52を使用しています。 <div id="1">1111<div id="2">111</div></div> /*CSS*/ #1{padding:50px;} 例としてこういうhtmlがあった場合で、 $("#1").click(function(){ $("#2").css("display","none"); }); #1をクリックした場合、ただし#2と重ならない範囲で、 (#1の文字やパディング範囲では効果ありとして、#2の範囲では効果を除外したい) という指定を行いたいのですが、記述方法が検討がつきません。 これはどのようにしたらよいのでしょうか?

専門家に質問してみよう