• ベストアンサー

javascriptでリンクとロールオーバー

少し、質問させてください。  今、javascriptを使って、ロールオーバーする枠画像(リンク付)を作りました。 その枠画像の中にリンク(文字)を入れ、リンク文字にカーソルを合わせると ロールオーバー処理後の枠画像に切り替わるようにしたいのですが そういったことは可能でしょうか?  ちなみに色々サイトを調べてみたところ、そのような場合 初めから、枠画像の中に文字を入れてロールオーバー させていました。  私はそうではなしに、上記の方法でやりたいと思っているのですが、 お力を貸してください。

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 >細かい間違いもいくつかありますが いや、そんなってわけでもないです。 <html>タグが2つあったり<head>の中身等です。 コピペミスかもしれませんが。 <a href="link1.html" class="link"> <span class="link">リンク名1</span> <img src="./img/off.png" /> はCSSにて重ねています。CSS内の.llink > .linkの部分です。 ><a href="link1.html">リンク名1 ><img src="./img/off.png" /> >の場合にリンク文字と画像を重ねる方法を 上で説明したとおり.link内の.linkの位置を調節して中に入れています。 リンク名1に対して.linkを付けないと面倒なので付けています。 他に方法はあるのかもしれませんが以下のようなCSSになってしまい、面倒です。 .link { position:relative; display:block; width:95px; height:35px; padding-top:30px; padding-left:25px; } .link > img { position:relative; top:-50px; left:-25px; z-index:-1; } >ただ、1つだけ問題なのが、枠画像(1)offも枠画像(2)offも枠画像(1)_onに切り替わってしまいます。 >それぞれの番号の_onに変えることはできますか? 以下のサンプルにて対応してみました。 一応何をしているかの説明をするとaタグのlinkクラス全てに対して ・マウスオーバー時.link内の画像にもともと設定されている画像パスのoff.pngをon.pngに変更した上で画像を切り替え ・マウスアウト時.kink内の画像にもともと設定されている画像パスで画像を切り替え よってx_off.pngに対するx_on.pngを用意すればその画像に切り替わる ※x_off.pngに対してx_on.pngというファイル名でx_off.pngとx_on.pngが同じディレクトリに用意されている前提です。 <!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> <title>javascriptでリンクとロールオーバー</title> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript">google.load('jquery','1');</script> <script type="text/javascript"> $().ready ( function() { $('a.link').each ( function() { var imgObj = $(this).find('img'); var imgSrc = imgObj.attr('src'); $(this).mouseover ( function() { imgObj.attr ( 'src', imgSrc.replace ( /off.png/, 'on.png' ) ); }).mouseout ( function() { imgObj.attr ( 'src', imgSrc ); }) }); }); </script> <style type="text/css"> img { border:0 } .link { position:relative; } .link > .link { position:absolute;top:-40px;left:20px; } </style> </head> <body> <a href="link1.html" class="link"> <span class="link">リンク名1</span> <img src="./img/0_off.png" /> </a> <br /> <a href="link2.html" class="link"> <span class="link">リンク名2</span> <img src="./img/1_off.png" /> </a> <br /> <a href="link3.html" class="link"> <span class="link">リンク名3</span> <img src="./img/2_off.png" /> </a> </body> </html>

trip-trip-trip
質問者

お礼

ありがとうございます。 無事に画像の切り替わりができました。 感謝感謝です^^ .link > imgのほうはできませんでしたが、 たぶん私がhtml4.0を使ってるからだと 勝手に解釈しました。

その他の回答 (3)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 情報ありがとうございました。 まず、rollover.jsを同時に使用していると私の挙げたサンプルは動かないと思います。 rollover.jsを利用するのであれば違ったカスタマイズが必要になると思います。 >で、今回質問させていただいたのが、リンク文字および枠画像の両方とも >カーソルを合わせているときにはimage_on.pngに切り替えることが >できるのかということです。 画像部分とリンク部分両方で切り替われば良いのですね。 HTMLを拝見いたしました。 細かい間違いもいくつかありますが、 <a href="リンク先(1)" class="クラス名" >    <img src ="../../枠画像(1)url" class="rollover"></a> //リンク枠画像(1) <a href="リンク先(1)" class="クラス名">リンク名(1)</a>  aタグを二つにわけている理由は何かありますか?またどのようなCSSで枠の中心へ配置していますか。 以下のようにまとめると簡単なロジックで動作させることが可能ですがいかがでしょうか。 ・※start~※endは必ず必要です。画像パスは書き換えてください。rollover.jsは使っていません。 動作はaタグのlinkクラスが付与されている中にある画像を切り替える動作です。 なんらかの都合でaタグをわけなくてはいけない等あるのであれば、ソースを全てご提示下さい。 (リンク先やアドレスは伏せて貰って良いですが、class名やid等は出来る限り伏せないで下さい) <!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> <title>javascriptでリンクとロールオーバー</title> ※start <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript">google.load('jquery','1');</script> <script type="text/javascript"> $().ready ( function() { $('a.link').mouseover ( function() { $(this).find('img').attr ( 'src', './img/on.png' ); }).mouseout ( function() { $(this).find('img').attr ( 'src', './img/off.png' ); }); }); </script> ※end <style type="text/css"> img { border:0 } .link { position:relative; } .link > .link { position:absolute;top:-40px;left:20px; } .mouse { width:100px; height:60px; padding:10px; background:url(./img/off.png) no-repeat; } .hover { background:url(./img/on.png) no-repeat; } </style> </head> <body> <a href="link1.html" class="link"> <span class="link">リンク名1</span> <img src="./img/off.png" /> </a> <br /> <a href="link2.html" class="link"> <span class="link">リンク名2</span> <img src="./img/off.png" /> </a> </body> </html>

trip-trip-trip
質問者

お礼

LancerVIIさん、回答ありがとうございます。  提示していただいたhtmlを試させて頂いた所 文字でも枠画像でも、ロールオーバーすることができました。  ありがとうございます。  ただ、1つだけ問題なのが、枠画像(1)offも枠画像(2)offも 枠画像(1)_onに切り替わってしまいます。 それぞれの番号の_onに変えることはできますか?  >細かい間違いもいくつかありますが  そんなにあるのですか・・・・もっと勉強します。  >aタグを二つにわけている理由は何かありますか?   またどのようなCSSで枠の中心へ配置していますか?   自分の考え(思い違いだと思いますが)   <a href="link1.html" class="link">   <span class="link">リンク名1</span>   <img src="./img/off.png" />      このような場合、リンク文字の後ろに画像がきて   重ねることができなかったので、2つに分けて、   それぞれCSSで位置を決めています。   基本的にCSSは{position:absolute; top:200px; left:250px; } でリンク文字とリンク画像を絶対位置にして重ねています。   でも、LancerVIIさんのhtmlは   ちゃんと重なってますね。     <a href="link1.html">リンク名1 <img src="./img/off.png" />   の場合にリンク文字と画像を重ねる方法を   教えていただいてよろしいでしょうか?   タイトルとは関係のない質問なので、   LancerVIIさんに対して失礼だと思いますが、   お願いできないでしょうか?       

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 そのまま全部コピーしたのであれば動くはずですが、サイズ等はこのサンプル用になっていますのでうまく見えないかもしれません。 一部を抜き出して自分のhtmlに入れたのであれば抜けがあるのかもしれません。 入れたいソースを見せて貰えればもっと的確なアドバイスが出来るかもしれません。

trip-trip-trip
質問者

お礼

こんばんわ。すいません。 ソースはこんな感じです。 <html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <script type="text/javascript" src="../../rollover.js" charset="utf-8"></script> <head> </head> <body> <a href="リンク先(1)" class="クラス名" >    <img src ="../../枠画像(1)url" class="rollover"></a> //リンク枠画像(1) <a href="リンク先(1)" class="クラス名">リンク名(1)</a>  //リンク文字(1)(枠画像(1)の中心に位置する) <a href="リンク先(2)" class="クラス名" >    <img src ="../../枠画像(2)url" class="rollover"></a> //リンク枠画像(2) <a href="リンク先(2)" class="クラス名">リンク名(2)</a> //リンク文字(枠画像(2)の中心に位置する) </body> </html> ここにあるrollover.jsは http://css-eblog.com/javascript-link/rollover-javascript.html こちらにあるサイトで、image.pngの画像にカーソルを合わせると image_on.pngのように(name_on)の画像に切り替えるjavascriptです。 現状ですが、上記のhtmlの場合、枠画像にカーソルを合わせると、 image_on.pngに切り替わりますが、枠画像の中心にあるリンク文字に カーソルを合わせると、image.pngに戻ってしまいます。 で、今回質問させていただいたのが、リンク文字および枠画像の両方とも カーソルを合わせているときにはimage_on.pngに切り替えることが できるのかということです。 この説明で分っていただけるでしょうか? 長文ですが、よろしくお願いします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 jQueryというものを利用して実装してみました。 恐らくこんな感じだと思いますが違っていたらすいません。 <div class="mouse">にoff.pngを設定します。 その中にあるaタグに対してカーソルが来た場合に一つ上に対してhoverクラスを追加する処理を設定します。 hoverクラスはon.pngを背景画像にします。 aタグよりカーソルが外れた場合はhoverクラスを削除します。 上記のような動きです。 <!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> <title>javascriptでリンクとロールオーバー</title> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript">google.load('jquery','1');</script> <script type="text/javascript"> $().ready ( function() { $('.mouse > a').mouseover ( function() { $(this).parent().addClass ( 'hover' ); }).mouseout ( function() { $(this).parent().removeClass ( 'hover' ); }) }); </script> <style type="text/css"> .mouse { width:100px; height:60px; padding:10px; background:url(./img/off.png) no-repeat; } .hover { background:url(./img/on.png) no-repeat; } </style> </head> <body> <div class="mouse"> <a href="#">リンク文字</a> </div> <div class="mouse"> <a href="#">リンク文字</a> </div> <div class="mouse"> <a href="#">リンク文字</a> </div> <div class="mouse"> <a href="#">リンク文字</a> </div> </body> </html>

trip-trip-trip
質問者

お礼

早速の回答ありがとうございます。  javascript初心者なので、LancerVIIさんの プログラムを理解できませんでした。すいません。 一応動かしてみたいと思って、htmlにコピーさせて頂いて 動作させてみたのですが、うまくいきませんでした。  上記のプログラムで、変更させるところはmouseの所の 画像アドレスとhoverの所の画像アドレスだけでよろしいでしょうか?

関連するQ&A

  • cssとjavascriptを使って画像の一部をロールオーバー

    以下の条件でロールオーバーをさせることが可能かどうか、また可能な場合はどのようにしてやるのか教えていただきたいです。 (1)1枚のgif画像がある。画像内にいくつか文字があり、文字の上にカーソルが上がった時に文字の色を変えたい。 (2)文字がすべてロールオーバーしていない元画像と、文字がすべてロールオーバーした画像の2枚を用意。 (3)CSSとjavascriptを駆使して作りたい。 元画像を背景に設定し、その上にロールオーバー後の画像を配置し、隠す。→文字の上にカーソルが来たら、隠していたロールオーバー後の画像の一部をその同じ場所に表示させる というような考え方でやってみたのですが、どうもうまくいきませんでした。Flashでやった方が簡単なのですが、Flashは使わずに作るということになっているので困っています。 何卒、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • JavaScriptが無効でもロールオーバーと同じ効果を出したい

    ホームページビルダー11を使ってサイトを作りました。 ロールオーバーを多用しています。JavaScriptを無効設定にして、自分のサイトを見たところ、ロールオーバーの効果を得ることが出来なかったので、このロールオーバーはJavaScriptを使っているのだと思いました。 そこで、JavaScriptを無効設定していても、ロールオーバーと同じ効果を出すにはどのようにしたら良いのでしょうか。 よろしくお願いします。

  • javascriptで作ったロールオーバーがロールオーバーのままになってしまう

    質問お願いします。 javascriptで作った画像二枚で表現するロールオーバーボタンの不具合についてです。 ieでの動作は問題なかったのですがsafari3.1.2とfirefox3.03では、 その作ったロールオーバーボタンをクリックして他のページに行き、 そしてブラウザに予め備わっている機能の戻るボタンで元のページに戻るとクリックしたロールオーバーボタンがマウスが重なっていないのにロールオーバーしたままの状態になってしまいます。 (その状態でもう一度ロールオーバーボタンにマウスを重ねると元に戻ります。) 流れを簡単に書かせていただきます。 <1.ロールオーバーボタンをクリックする> ↓ <2.他のページにリンクする> ↓ <3.リンク先のページでブラウザの戻るボタンをクリックする> ↓ <4.1のページに戻る> ↓ <5.1でクリックしたロールオーバーボタンがカーソルが触れていないのにロールオーバーした状態> ロールオーバーボタンを作る方法は二通り試したのですが、両方とも上に書いた通りの状態です。 <試した方法> 1.DreamweaberMXのビヘイビア機能で作成。 2.http://css-happylife.com/log/javascript/000157.shtmlこちらのページを参考にさせて頂いての作成。 この不具合の事を気にして色々なウェブサイトを見てみたのですが、やはりjavascriptで作っているであろうロールオーバーボタンは同じような状態のウェブサイトが、多数有りました。 この問題の解決策をご存じの方がいらっしゃいましたら、どうかご教授下さい。よろしくおねがいします。

  • ビルダー9でロールオーバー作成

    現在ビルダー9でロールオーバーのリンクボタンを作っています。ウェブアートデザイナーを開いてウェブアート素材タブのなかから画像を選びましたが、オブジェクトの選択で、画像だけ(あるいは文字だけ)が選択されてしまい、ロールオーバーが作れません。 説明わかりづらいですか?つまり、画像のみ(文字のみ)のロールオーバーになってしまうということです。画像+文字を選択するにはどうしたらいいですか?

  • javascriptのロールオーバーの問題につきまして。

    Dreamweaverのjavascriptを使ってロールオーバーを作成したのですが、firefoxなどでロールオーバーした画像からリンク先に飛んで、ブラウザの戻るで戻ると、画像がロールオーバー状態のままになってしまいます。なにか良い解決方法はないでしょうか。よろしくお願いいたします。

  • 文字のロールオーバーについて教えてください。

    HPを作製しているのですが、リンクを張った文字にロールオーバーをつけたくて、スタイルシートで、やってみたのですが、そうすると画像を張ったリンクにマウスを持ってきても周りの色が四角に、指定した色に変わってしまいます。(画像は、楕円形のボタンです) 文字のみロールオーバーをつけたい場合はどうしたらいいのか教えてください。

    • ベストアンサー
    • HTML
  • Javascriptによる2系統のロールオーバー指示について

    お世話になります。 ロールオーバーで困っています。 困っているのは下記です。 「A」と言う画像をロールオーバーで赤文字の画像に変える。 「A」と言う画像にロールオーバーで「B」の画像を変える。 上記の場合はそれぞれ1系統の指示ですよね? 上記場合の両方への指示はできないものでしょうか? 制作ソフトはDreamweaver 8です。 ご教授よろしくお願い致します。

  • マーキーでロールオーバー

    マーキータグで画像を左右に動かし、そこにロールオーバーでリンクを貼ろうとしています。 マーキーで動いていてもマウスを合わせロールオーバーさせると、画像をその場に止められる方法というのはありますか? 更に、マウスをはなすと再びそこから左右に動き出すようにしたいのですが・・・。 何か良い方法があったら是非教えて下さい。

    • ベストアンサー
    • HTML
  • JavascriptでのロールオーバーはSEOには不利なのですか?

    素人な質問ですが宜しくお願いします。 CSS+XHTMLでサイトを作成していますが、いつも、ロールオーバーボタンで悩んでいます。 CSSでももちろん実現は出来るのですが、Javascriptを用いたものはやはりSEO対策としては不利なのでしょうか? 例えばメニューとかであれば、リスト+Javascriptロールオーバーとすれば同じ効果が得られるものではないのでしょうか? HTML本文でのJavascriptの呼び出しソース自体が不利ということでしょうか? ロールオーバーって共通パーツ以外にいろんな所で使うので、その都度CSSで設定する必要があり、javascriptで実現した方が簡単な気がするのですが・・・(「慣れ」かもしれませんが・・・。) どうか、よきアドバイスお願いいたします。

    • ベストアンサー
    • HTML
  • Dreamweaverでimageのロールオーバー

    Dreamweaverを使ってimageボタンのロールオーバーを指定すると <head>内に記述されるjavascriptのほか、<body>タグの中にも以下のタグが記述されます。 <body onLoad="MM_preloadImages('menu1_over.gif','menu2_over.gif')"> ()内のgif名はボタンがover時の画像名ですが、ロールオーバーするボタンが膨大だと <body>タグ内も膨大なソース量になってしまいます。 試しに削除してみたところIEでは正常にロールオーバーが動作します。 上記の記述は何を意味しているのでしょうか。 不足な情報があれば補足させていただきますので、お知恵をお貸し下さい。

専門家に質問してみよう