1.pngという背景透明なボタンを作り、そこからonmouseでリンクを含む3種類のjavascriptが走るようにしてありますが、それだけだと、画像の透明部分でもリンクとjavascriptが有効になってしまいます。
画像の透明部分にマウスがあるときは何も起こらず、透明でない部分にマウスが乗った時だけにリンクとjavascriptを実行させることはできませんか?
よろしくお願いします。
実際使用しているソースは次の通りです。
--------------------------------------------------
<img border="0" alt="1" src="images/1.png" onclick="location.href='1.htm'" onmousedown="bdown()" onmouseup="bup()" onmouseover="bover(); PP(1)" onmouseout="bout(); PC(1)" id="bimage"/>
--------------------------------------------------
ボタンの周囲にアクティブを示す点線の枠を表示させたくないため、リンクにはあえてホットスポットや通常のリンクを使用していません。
よろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
htmlソースだけではなくJavaScriptのコードも載せてアドバイスを募ってはいかがでしょうか?
意図しない動きはhtmlではなくJavaScriptの記述に因るもののように感じます。
この回答への補足
では、お言葉に甘えて、ソース全体をコピペします。
実際には同様の動作をさせたいボタンが複数あるのですが、
長いので1個分だけに減らしました。質問当時からまた少し変わっていますが、やりたいことは、“四角い透明ボタンのうち、透明でない部分にマウスが乗ったときだけ、リンク・画像変化・BGM再生を行う”ということです。javascriptにこだわるつもりはありません。
---------------------------------------------------
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
var preloadFlag = false;
function newImage(arg) {
if (document.images) {
rslt = new Image();
rslt.src = arg;
return rslt;
}
}
function changeImages() {
if (document.images && (preloadFlag == true)) {
for (var i=0; i<changeImages.arguments.length; i+=2) {
document[changeImages.arguments[i]].src =
changeImages.arguments[i+1];
}
}
}
function preloadImages() {
if (document.images) {
menu1_over = newImage("images/2.png");
preloadFlag = true;
}
}
// -->
</SCRIPT>
<script LANGUAGE="JavaScript">
<!--
var akoMM = new Array();
akoMM[1] = "musicfiles/1.mid";
document.write('<BGSOUND ID="akoMIEC">')
MIE = (navigator.appVersion.indexOf("MSIE")!=-1 && document.all)? 1:0;
NN = (navigator.appName=="Netscape" && navigator.plugins["LiveAudio"])? 1:0;
ver4 = MIE||NN? 1:0;
onload=akoRL;
function akoRL() {
if (!ver4) return;
if (NN) akoEmbed = new Layer(0,window);
else {
akoST = "<div id='akoEmbed' STYLE='position:absolute;'></div>";
document.body.insertAdjacentHTML("BeforeEnd",akoST);
}
var akoST = '';
for (suu=0;suu<akoMM.length;suu++)
akoST += "<embed src='"+akoMM[suu]+"' autostart='false' hidden='true'>"
if (MIE) akoEmbed.innerHTML = akoST;
else {
akoEmbed.document.open();
akoEmbed.document.write(akoST);
akoEmbed.document.close();
}
auCon = MIE? document.all.akoMIEC:akoEmbed;
auCon.control = akoCont;
}
function akoCont(donoM,Kaishi) {
if (MIE) this.src = Kaishi? akoMM[donoM]:'';
else eval("this.document.embeds[donoM]." + (Kaishi? "Kaishi()":"Teishi()"))
}
function plakoMM(donoM) { if (window.auCon) auCon.control(donoM,true); }
function TeishiakoMC(donoM) { if (window.auCon) auCon.control(donoM,false); }
//-->
</script>
</HEAD>
<BODY bgcolor="#CCFF99" onLoad="preloadImages();">
<IMG NAME="menu1" SRC="images/1.png"
BORDER="0" ALT="1"
USEMAP="#map1">
<MAP NAME="map1">
<AREA SHAPE="circle" COORDS="32,32,33" border="0" onFocus="blur()"
HREF="hymn1.htm" ALT="Menu 01"
onMouseOver="changeImages('menu1', 'images/2.png'); plakoMM(1);"
onMouseOut="changeImages('menu1', 'images/1.png'); TeishiakoMC(1);"
onMouseDown="changeImages('menu1', 'images/3.png'); return true;"
onMouseUp="changeImages('menu1', 'images/2.png'); return true;">
</MAP>
</BODY>
----------------------------------------------------------------
よろしくお願いたします。
No.5
- 回答日時:
リンク用のボタンにJavaScriptを使うのははっきり言って時代遅れです。
理由はユーザビリティの面から言って難点があり好ましくないとされているからです。一つはカーソルを重ねた状態やクリックした状態などそれぞれが別の画像になっていると、そのタイミングで初めて画像を読み込もうとするため一瞬画像が消え、ユーザが戸惑います。
また検索ロボットは画像やスクリプトを理解できませんので、そこにリンクはないと判断されてしまいます。その先のページ巡回が行われませんので検索エンジンに引っかからなくなってしまいます。
そもそもJavaScriptをOFFにしている場合はリンクがまったく意味をなしません。
HTML+CSSだけで記述できるので覚えておけば作業効率が格段にアップします。リンクはテキストで記述しその背景に画像を使いテキストは見えなくするという方法です。以下はその一例です。
まずボタンの画像ですが、通常の状態、マウスを重ねた状態、押した状態それぞれの画像を横または縦一列に並べて一つの画像として作成します。
<a>XXXXX</a>
というリンクをボタンで表現する場合、
ボタン画像は100x100の画像3種類通常、マウスを重ねた状態、クリックした状態の順で横一列に並べて作ったとします。
a{
display:block;(a要素を幅と高さを持ったブロックにする)
width:100px;(幅を設定)
height:100px;(高さを設定)
background:url(background.png) no-repeat 0 0;(背景の設定)
text-indent:-9999px;(a要素の中のテキストを見えなくする)
}
a:hover{
background-position: -100px 0;(カーソルを重ねた時は背景を左に100pxずらす)
}
a:active{
background-position: -200px 0;(クリック時は背景を左に200pxずらす)
}
「CSS 画像ボタン」で検索すると詳しく解説しているサイトに出会えると思います。
質問では丸い部分だけにリンクを張りたいということですが、リンク部分は四角いままで良いと思います。
それはその画像の周辺でもリンクが反応することで、カーソルを動かすというユーザの負担をいくらかでも和らげることができるからです。おそらくは
>ボタンの周囲にアクティブを示す点線の枠を表示させたくないため、リンクにはあえてホットスポットや通常のリンクを使用していません
ここで四角い点線が丸いボタン画像の周りにできてしまうのが気になっていらっしゃるのだろうと思います。FIrefoxではリンクに点線が出ますね。これはCSSでaタグにoutline:0;を設定するとリンク部分の点線は表示されなくなります。
イメージマップをお考えなら、それもCSSと画像のちょっとした工夫で表現できますので「CSSイメージマップ」で検索してみてください。
この回答への補足
皆さん、手伝ってくれてどうもありがとうございました.
結局、よく分からず仕舞いでした.
一番知りたかった、透明部分には反応させない、というのはどうもクリッカブルマップしかなさそうで、それはやってみました.しかし、1枚の透明画像に対して、画像変換とBGM再生(mouseOutで停止)の2つのjavascriptを掛け持ちしたかったのですが、クリッカブルマップの<area>内には自分のできる範囲ではどうしても2つを入れ込むことができませんでした.
どちらも拾ってきたソースなので、何が原因か皆目分からず…、ほぼあきらめ状態です.
とはいえ、色々勉強になりました.
ありがとうございました.
ありがとうございます.なるほど、CSSですか.知りませんで、勉強になりました.
色々調べてみましたが、あまり時間をかけられず、分かりやすい解説ページを発見することができませんでしたが….
また、同じ画像のonMouseOver状態で、BGMを再生させるscriptも走らせているので、どうも上手く行きませんでした.
透明部分では反応しないようにしたいというのは質問で一番重要な部分でした.透明な部分で画像が入れ替わり、BGMも再生され始めるというのがどうしても許せなかったもので.
色々試してみましたが、クリッカブルマップ中に画像変換とBGM再生の二つのスクリプトを埋め込むことができませんでした….
枠はblur()で非表示にしましたので、あまり問題では無くなりました.
No.4
- 回答日時:
No1です。
単純化して、例えば以下のような実験をしてみれば、イベントがどのタイミングで発生しているか確認できると思いますが?
(例では、80pxの四角の左上1/4内の円形がmapでの対象になるはず)
複数のイベント処理を行う場合、発生順がどのようになるかなどを確認しておいたほうがよろしいかと思います。
<html>
<head>
<script type="text/javascript">
function d(w) {document.getElementById('s').innerHTML = w;}
</script>
</head>
<body>
<div id="s">*</div>
<p>
<img border="1" alt="" src="" style="width:80px; height:80px;" usemap="#Map1" />
<map name="Map1">
<area shape="circle" coords="20, 20, 20" href="" onmouseover="d('over')" onmouseout="d('out')" >
</map>
</body>
</html>
No.3
- 回答日時:
まず、リンクに以下のように記述すれば点線の枠は出ません。
クリッカブルマップ(ホットスポット?)についても同様です。
<!-- 通常リンク -->
<a href="#" onfocus="this.blur()">テスト</a>
<!-- クリッカブルマップ -->
<img src="" alt="" width="" height="" usemap="" />
<map name="">
<area shape="" coords="" href="#" alt="" onfocus="this.blur()" />
</map>
透明部分の件についてはクリッカブルマップを使うしか方法が浮かびません。
No.2
- 回答日時:
>javascriptの実行も同一範囲
http://www.google.com/search?lr=lang_ja&q=a%E3%8 …
hrefに 希望のjsを呼び、終わりにhtmlに移動する ってjsを起動するように書いたら良いのでは?
No.1
- 回答日時:
単純に画像に対してのonclickなどだと透明/不透明に関わらずその要素の範囲に対してイベントが発生します。
画像で、範囲を限定したいのであれば、クリッカブルマップなどを利用されてはどうでしょうか。
http://www008.upp.so-net.ne.jp/netbegin/tetori/h …
http://homepage3.nifty.com/f-page/hp/html2/cmap0 …
>枠を表示させたくないため~
通常のリンクタグを用いても、CSSなどで枠線を非表示にすることも可能だと思いますが。
この回答への補足
ありがとうございます!
ただ、クリッカブルマップを使用する場合、リンクは範囲指定できますが、javascriptの実行も同一範囲に限定することはできますか?
色々試してみましたが、どうしてもうまくいきませんでした。
動かなかったソースですが、使ったソースは以下です。手直しなど可能でしたらお願いします。
-------------------------------------------------
<img border="0" alt="1" src="images/1.png" usemap="#Map1"/>
<map name="Map1">
<area shape="circle" coords="40, 40, 40" href="1.htm" onFocus="blur()" onmousedown="this.src='images/2.png'" onmouseup="this.src='images/3.png'" onmouseover="this.src='images/4.png'; PP(1)" onmouseout="this.src='images/1.png'; PC(1)">
</map>
--------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
透過pngの透明部分以外をクリックできるように
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スライドショーの上にロゴマー...
-
HTMLにQRコードを挿入する方法
-
画像欄にバツ印が・・・
-
透過GIFが表示されないんで...
-
クリックしても、リンクに飛ば...
-
バナーの貼り方とバナーにリン...
-
[JS or CSS]マウスオーバーで画...
-
windowsは画像にマウスオンで画...
-
alt属性は、省略してもよいので...
-
PDFの保存ボタンが表示されません
-
【Webサイト】画像が小さく表示...
-
画質を落とさず切り取って透過...
-
アイコンの背景を透過させたい
-
画像貼り付け、URLに飛べる軽い...
-
たくさんのjpgファイルをスクロ...
-
photoshopでウィンドウサイズを...
-
GIFアニメを保存すると、白いふ...
-
フレーム/透過の際のギザギザを...
-
ロゴマークだけを抜き取って貼...
-
マウスオーバーで透明の白い幕...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IMGタグでTIFF画像を表示
-
クリックしても、リンクに飛ば...
-
HTMLにQRコードを挿入する方法
-
ボタンを押したままにする。
-
スライドショーの上にロゴマー...
-
画像クリックでクリップボード...
-
背景が透明なリンクボタンで、...
-
form以外でのpostってできますか?
-
pngやjsの後ろの英数字の意味は...
-
クリッカブルMAP領域が分かる様...
-
スマホで、画像をクリックする...
-
期間ごとに画像表示を切り替え...
-
バナーの貼り方とバナーにリン...
-
予約語の表示について
-
HTML上の画像を結合する方法が...
-
タイトルバーに画像を入れるHTM...
-
画像欄にバツ印が・・・
-
アドレスがあっているのにバナ...
-
<area></area> 部分にボーダー...
-
CSSなどでHTML全体の表示を拡大...
おすすめ情報