JavaScriptで吹き出しを画像に反映させる方法について

このQ&Aのポイント
  • JavaScriptを使用して、指定した画像に吹き出しを表示させる方法について教えてください。
  • 下記のサイトで紹介されている方法を使って、複数の画像に吹き出しを反映させたいです。
  • 詳しい方、アドバイスをお願いします。
回答を見る
  • ベストアンサー

javascriptで吹き出し

下記のサイトにある吹き出しをメニューボタンのように複数の画像に反映させたいのですが、どのようにすればよいでしょうか? http://www.dvq.co.nz/web-design/create-a-jquery-popup-bubble-effect/ javaスクリプトコード $(document).ready(function(){ $(".info-popup a").hover(function(){ $(this).next("em").stop(true, true).animate({opacity: "show", top: "40"}, "slow"); }, function() { $(this).next("em").animate({opacity: "hide", top: "70"}, "fast"); }); }); cssファイル .info-popup { margin: 0px auto; padding: 0; width: 162px; position: relative; } div.info-popup em { background: url(../image/menu_info_c.gif) no-repeat; width: 162px; height: 42px; position: absolute; top: 0px; left: 0px; text-align: center; text-indent: -9999px; z-index: 2; display: none; } #info-icon { width: 162px; height: 42px; background: url(../image/menu_info.gif) no-repeat 0 0; text-indent: -9999px; margin: 0 auto; display: block; } htmlファイル <div class="info-popup"> <a href="information.html" id="info-icon">information</a> <em>information</em> </div> 詳しい方、是非、アドバイスをお願い致します。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

ご提示されているサンプルは、汎用的なプラグインというよりは、jQueryの 基本的な機能を使って吹き出し画像を表示させるやり方の例ですから、 このソースを見て理解出来ないなら、改造はあきらめて、そのまま使って 下記のように複数画像分同じようなコーディングでしのげばよろしいかと。 (menuのDIVにリンク先が二つあり、それぞれ画像がicon1,icon2の例) htmlファイル <div class="menu"> <a href="info1.html" id="icon1">info1</a> <em class='icon1'>information</em> <a href="info2.html" id="icon2">info2</a> <em class='icon2'>information</em> </div> cssファイル .menu { margin: 0px auto; padding: 0; width: 162px; position: relative; } div.menu em.icon1 { background: url(icon1_popup.gif) no-repeat; width: 162px; height: 42px; position: absolute; top: 0px; left: 0px; text-align: center; text-indent: -9999px; z-index: 2; display: none; } div.menu em.icon2 { background: url(icon2_popup.gif) no-repeat; width: 162px; height: 42px; position: absolute; top: 0px; left: 0px; text-align: center; text-indent: -9999px; z-index: 2; display: none; } #icon1 { width: 162px; height: 42px; background: url(icon1.gif) no-repeat 0 0; text-indent: -9999px; margin: 0 auto; display: block; } #icon2 { width: 162px; height: 42px; background: url(icon2.gif) no-repeat 0 0; text-indent: -9999px; margin: 0 auto; display: block; } javaスクリプトコード $(document).ready(function(){ $(".menu a").hover(function(){ $(this).next("em").stop(true, true).animate({opacity: "show", top: "40"}, "slow"); }, function() { $(this).next("em").animate({opacity: "hide", top: "70"}, "fast"); }); }); あるいは、もっと汎用的なjQueryの吹き出しようプラグイン 例「BeautyTips」でも使えば楽かな。(下記のImage contentの例) http://www.lullabot.com/files/bt/bt-latest/DEMO/index.html

参考URL:
http://www.lullabot.com/articles/announcing-beautytips-jquery-tooltip-plugin
suzy_2146
質問者

お礼

アドバイス有難うございます。 画像はそれぞれ表示されるようになりました。 しかし、ロールーバー時にicon2_popup.gifが表示される位置がicon1_popup.gifと同じ位置になってしまうんですよね。 この表示位置をそれぞれのメニューボタンの下へ表示させる場合、やはりjsの改造が必要でしょうか?

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

NO.1です。 <icon2_popup.gifが表示される位置がicon1_popup.gifと同じ位置になってしまうんです> それは、cssの中で .menu { - - - - position: relative; } div.menu em.icon1 { background: url(icon1_popup.gif) no-repeat; - - - - position: absolute; top: 0px; left: 0px; - - - - } としてmenuのDIVに対してpositionを top: 0px;left: 0px; に固定してるからです。 iconのサイズ等も鑑みて、ここを調整すればよいかと。

関連するQ&A

  • 背景画像へのリンク

    CSSで背景画像をリンクさせているのですが 文字が出てきて困っています。 ソースは以下の通りです。 文字が出ないようにするにはどうしたらいいのでしょうか。 <div id="side"> <div class="menu_content"> <ul class="menu"> <li class="menu_top"><a href="index.html">トップページ</a></li></ul> </div> </div> .menu_content li{display:block; text-indent:-9999px; font-size:0px; width:206px;height:68px; text-indent:-9999px;} li.menu_top a{display:block; width:406px;height:128px; text-indent: -9999px; background:url("css/menu_top.gif") bottom left no-repeat;}

  • opacityについて

    $(function(){ $("#s1").animate({ $(this).css("opacity","0") },3000); }); html <div id="s1"><img src="1" width="300px" height="300px"></div> 質問:消えると思ったのですが、3秒後に画像が消えませんでした。 できないのでしょうか? 画像を時間で消える方法があればご教授ください

  • JavaScript アニメのループ動作について

    iOSでSWFが動かないことから、JavaScript で簡単なアニメを作ろうと思っています。 初めてなので、アニメのループ動作に詳しい方教えてください。 (jQueryと合わせて、動作させます) 2個の動作を定義しています。 《動作A》 $(function(){ setTimeout(function(){ $('#photo').animate({ width: "776px", opacity: 1, }, 1500 ); },500); //500遅らせる指示 }); 《動作B》 $(function(){ setTimeout(function(){ $('#word').animate({ width: "398px", opacity: 1, }, 3000 ); },700); //700遅らせる指示 }); このうち、動作Bのみを 動作完了 → 1000msec 表示キープ → 3000msec の逆動作で消える → 1000msec 表示無し これを一連の動作として、ループさせたいのです。 interval 関連のコマンドの説明を見ましたが、自分にはわかりませんでした。 《動作B》に書き足して、ループできるなら、具体的記述で教えてください。 以上、よろしくお願いします。

  • CSS3で困ってます!

    現在、HTML5でサイト書き出し中です。CSS3も使っているのですが、大きな問題が発生いたしまして… 背景のボックスの大きさがbodyの大きさに追随しないんです。ボックスからINFOMATION欄などが飛び出してしまってデザイン的によろしくない感じです。 ボックス要素は、divのidのtopに対して与えています。topはペ0次全部のコンテンツをまとめるためのものです。 今日一日、CSSのソースとにらめっこしたのですがわかりませんでした。皆さんなら、わかると思い頼らせて頂くことにいたしました。どこが間違っているかわかりません!教えてください(涙) CSSは、 @charset "utf-8"; /* CSS Document */ *{ font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; } a{ text-decoration:none; } div#top{ width: 920px; border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius: 15px; -o-border-radius: 15px; box-shadow: 3px 3px 10px #666; -moz-box-shadow: 3px 3px 10px #666; -webkit-box-shadow: 3px 3px 10px #666; -o-box-shadow: 3px 3px 10px #666; text-align:left; margin:0 auto; } div#header{ text-align:center; } div#banner{ width: 900px; margin: 0px auto; } div#menu{ width: 900px; margin: 0px auto; } div#menu ul { float:left; margin:0; padding:0; height: 40px; text-align:center; } div#menu li { margin:0; padding:0; float:left; font-size:90%; text-align:center; list-style-type:none; width: 225px; -webkit-transition-property: background-color; -webkit-transition-duration: 0.25s; -moz-transition-property: background-color; -moz-transition-duration: 0.25s; -o-transition-property: background-color; -o-transition-duration: 0.25s; background-color: #3C0; height: 40px; } div#menu li span { font-family:verdana; font-size:140%; color:#fff; line-height: 40px; } div#menu li:hover{ background-color: #0F0; } div#contents{ width:900px; height: auto; margin:0 auto; padding: 10px 0; } div#info { float:left; width:450px; } div#info h2{ font-size: 25px; width: 450px; border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius: 15px; -o-border-radius: 15px; background-color:#090; color: #FFF; font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; padding-top: 2px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; margin-top: 0px; text-align:left; } div#info dl dt { clear:left; float:left; width:7em; padding:10px 0.5em; } div#info dl dd { margin-left:0; padding:10px 0.5em 10px 8em; background:#fff url(images/bg_info_line.gif) 0 100% repeat-x; } div#news{ float: right; width: 430px; text-align:left; } こんな感じです。 実際のページはここにあります。 http://skino.cyber-ninja.jp/test/

    • ベストアンサー
    • CSS
  • jQueryにて、.toggle()でアニメート

    .toggle( function(){ } , function(){ } ); こういう形で無名関数の中には.animateを入れてアニメーションを交互するようにしています。 (もうすぐこの形が使えなくなるそうですが…) やりたいことはもう少し複雑で、まず.toggleするボタンを2つ以上にしたいと思っています。 それぞれのボタンは元々、 ボタン1:設定した"hoge1"を押すとあるテキストエリアが存在するボックスが大きくなったり小さくなったりする。hoge1ボタンもそれに合わせてwidthが大きくなったり小さくなったりする。 ボタン2:"hoge2"を押すとテキストエリアに対して.val("特定のテキスト").focus();するようにして"特定のテキスト"を追加してその後フォーカスするようなボタン。 これらは別々にちゃんと動いていまして、そこまでは出来てるんですが ボタン2の"hoge2"に、押したら 『ボックスが開いた上でテキスト追加のフォーカス』 という動作を追加したいと思い $(".hoge1, .hoge2").toggle(function(){ $(".textareabox").animate({width:"300px", height:"toggle", opacity:"toggle"}); $(".hoge1").animate({width:"300px"}); },function(){ $(".hoge1").animate({width:"150px"}); $(".textareabox").animate({width:"150px", height:"toggle", opacity:"toggle"}); }); こういう風にボタンを2つともセレクトすると、どちらか一方のみを使うのであれば動くんですが 当たり前のことに"hoge1"を一度だけ押してから"hoge2"を押すと .hoge1のwidthは戻らずに、.textareaboxのみ引っ込んで(toggleして)、そこからずれていきます。 ややこしいのですが、場合分けすると (".hoge1")をクリックしたら 未アニメート時:出す 既アニメート時:ひっこめる ("hoge2")をクリックしたら 未アニメート時:出して.val().focus() 既アニメート時:出したままで.val().focus() こういうことにしたいです。.val.focusは別でscript書いてます。 :not(:animated)とかいうのをググって見つけたんですがいまいちわかりません。 初心者なので前提からしてどこか間違ってるかもしれませんが どなたかお知恵拝借願います。。。

  • javascriptで困っています。教えてください

    javascriptでimgタグの位置を変更しようと考えています。上、下の表示(divタグ)をクリックして上下に10pxずつ移動させたいのですが、どのようにしていいのかよく分かりません。 document.getElementById("kt").style.top = document.getElementById("kt").style.top-10; の部分に無理があるのでしょうか? 教えていただきたいと思い、投稿させていただきました。よろしくお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=480"> <style type="text/css"> <!-- #wrapper{ width:640px; height:480px; position:relative; } #kt{ width:250px; height:250px; position:absolute; top:100px; left:100px; } #up{position:absolute; z-index: 1;top:0px;width:20px;height:20px;background-color:#F00;} #down{position:absolute; z-index: 2;top:30px;width:20px;height:20px;background-color:#F00;} --> </style> </head> <body> <div id="wrapper"> <div id="up">上</div> <div id="down">下</div> <img id="kt" src="kt.png"> </div> <script type="text/javascript"> var up_element = document.getElementById("up"); up_element.addEventListener("click", touchUp, false); function touchUp() { document.getElementById("kt").style.top = document.getElementById("kt").style.top-10;     } var down_element = document.getElementById("down"); down_element.addEventListener("click", touchDown, false); function touchDown() { document.getElementById("kt").style.top = document.getElementById("kt").style.top+10; } </script> </body> </html>

  • プロのコーダーは、仕事の時長い文章を改行したり、イ

    プロのコーダーは、仕事の時長い文章を改行したり、インデントを入れたりする時すべてCSSでやるものなのでしょうか? それともbrや全角空白でやったほうが早いのでこちらで良いのでしょうか? 私は下記のようにCSSでやっているのですが、下記のようなやり方でもWEB制作会社で働く場合問題にならないでしょうか? p.indent,dd.indent,dt.indent { text-indent: 1em; margin-top: 0px; margin-bottom: 0px; } p.indentnewline,dd.indentnewline,dt.indentnewline { text-indent: 1em; margin-top: 0px; } dt.indentnewline { text-indent: 1em; margin-top: 0px; padding-bottom: 1em; } p.newline,dd.newline,dt.newline { margin-top: 0px; padding-bottom: 1em; }

    • ベストアンサー
    • CSS
  • javascriptで困っています。教えてください

    javascriptでimgタグの位置を変更しようと考えています。上、下の表示(divタグ)をクリックして上下に移動させたいのですが、上手くいきません。教えていただきたいと思い、投稿させていただきました。よろしくお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=480"> <style type="text/css"> <!-- #wrapper{ width:640px; height:480px; position:relative; } #kt{ width:250px; height:250px; position:absolute; top:100px; left:100px; } #up{position:absolute; z-index: 1;top:0px;width:20px;height:20px;background-color:#F00;} #down{position:absolute; z-index: 2;top:30px;width:20px;height:20px;background-color:#F00;} --> </style> </head> <body> <div id="wrapper"> <div id="up">上</div> <div id="down">下</div> <img id="kt" src="kt.png"> </div> <script type="text/javascript"> var up_element = document.getElementById("up"); up_element.addEventListener("click", touchUp, false); function touchUp() { document.getElementById("kt").style.top = 50;     } var down_element = document.getElementById("down"); down_element.addEventListener("click", touchDown, false); function touchDown() { document.getElementById("kt").style.top = 200; } </script> </body> </html>

  • 画像スライダーをやってますが

    <script type="text/javascript"> <!-- $(function(){ var sty=$("#s1"); sty.each(function(){ var mo1=$(this); var mo2=mo1.find("ul"); var mo3=mo1.find("li"); var mo4=mo1.find("li:first"); mo3.css({display:"block",opacity:"0",zIndex:"1"}); mo4.css({zIndex:"2"}).stop().animate({opacity:"1"},3500); setInterval(function(){ mo2.find('li:first-child').animate({opacity:'0'},1500).next('li').css({zIndex:'100'}).animate({opacity:'1'},1500).end().appendTo(mo2).css({zIndex:'99'}); },5000); }); }); --> </script> </head> <body> <div id="s1"> <ul> <li><img src="rtp/7.jpg" width="300px" height="300px"></li> <li><img src="rtp/9.jpg" width="300px" height="300px"></li> <li><img src="rtp/10.jpg" width="300px" height="300px"></li> </ul> </div> </body> </html> 見よう見まねで成功はしましたが、見真似なのでどういう構造なのか勉強しているところです。 今日は前半をなんとかやったんですが mo3.css({display:"block",opacity:"0",zIndex:"1"}); の部分のdisplay:"block"はなぜやっているのかが解りませんでした。 最初の設定は画像を消すところだと思うのですが、だとするとなぜblockなのかが解りません。

  • JavaScriptで、タグを書き出す方法

    フレ-ムを使わずにスタイルシ-トでメニュ-を表示する領域を指定して、その領域内にメニュ-(目次)を表示したいのですが、一度で全てを書きかえられるようにJavaScriptを外部ファイルにしてメニュ-が表示出来るようにしたいと思います。 スタイルシ-トの部分では *{ font-size:12px; line-height;125%; } #menu{ padding-top:12px; padding-left:12px; position:absolute; top:110px; width:150px; background-color:#cc99cc } em{ font-style:normal; font-weight:400 } #ind1{ padding-left:12px } で、メニュ-を表示する領域等を決めています。 <body>~</body>の間では、 <div id="menu"> <script Language="JavaScript"> <!-- function exMenu(tName) { tMenu = document.all[tName].style; if (tMenu.display == 'none') tMenu.display = "block"; else tMenu.display = "none"; } // --> </script> <a href="javaScript:exMenu('treeMenu1')">1</a><br> <div id="treeMenu1" style="display:none"> <a href="javaScript:exMenu('treeMenu2')"><em id="ind1">1-1</em></a><br> <div id="treeMenu2" style="display:none"> <a href="1-1-1.html"><em id="ind1">1-1-1</em></a><br> <a href="1-1-2.html"><em id="ind1">1-1-2</em></a><br> </div> </div> でメニュ-を表示するようにしています。 この<body>~</body>の間の部分を、 <div id="menu"> 外部ファイルのJavaScriptを呼び出すタグ </div> というようにして、外部ファイルのJavaScriptのみを書きかえるだけで全てのペ-ジのメニュ-が変えられるようにしたいと思います。 この場合の、 1:勝手に書いてくれる外部ファイルにするJavaScriptの記述のしかた 2.1を呼び出すタグの記述 を教えて下さい。