ボタンクリックで画像を切り替える表示方法について

[新着] Webテンプレートを仮オープンしました



0   名前: アム : 2007/04/05(木) 18:39  ID:pi3QkpHX sub-Cl
総合にしようか雑談にしようか迷ったのですが、質問ということで総合掲示板にてスレッド作成させていただきました。


今現在ボタンをクリックすると画像が切り替わるjavascriptを利用してページを作成しています。

が、この方法だと、javascriptをOFFにしていらっしゃる方は他の画像を見ることができません。
(URLを辿れば閲覧は可能ですが、クリックして見るという行為ができないという意味で。)

それならインラインフレームで切り替えて表示させようかと思ったのですが、これもやはり閲覧者を選ぶという意味ではjavascriptと変わらないのかなと。

面倒なことをせずに画像を並べて表示すれば良いのですが、敢えて「ボタンをクリックして画像を切り替える」ことに拘った場合、どのような方法が1番広いユーザーの方に支障なく閲覧してもらえることが可能でしょうか?

1人で考えていても上記の2択しか出てこず・・・
どちらかというとインラインフレーム利用のほうが、javascriptを使うよりは制限がかかるほうが少ないかな?というのが私自身の今のところの考えです。

この場合皆様ならどのような方法を取るか、考えをお聞かせいただければ幸いです。
よろしくお願い致します。

1   名前: カヅサツ ◆ThCi95HEzw : 2007/04/05(木) 18:39  [URL]  ID:O5hEMlpW sub-r2
「画像リンクを複数作って、それをli要素でマークアップする」
で最低限のことは完了します。

あとは、これをどうにかして「ボタンをクリックすると画像が切り替わる」ように見せるのが良いのですが、「ボタンをクリックすると画像が切り替わる」というインターフェースがどういうものかイマイチわからないので、ニンともカンとも。

あ、面倒なら「ボタンをクリックすると画像が切り替わるjavascript」と「画像リンクを複数作って、それをli要素でマークアップする」を両方作っておいて、後者をnoscript要素でくくったらどうでしょう。

> インラインフレームで切り替えて表示させようかと思ったのですが、これもやはり閲覧者を選ぶという意味ではjavascriptと変わらないのかなと。

iframe要素内に、インラインフレームを解釈しない環境への代替手段を書いておけば良いのでは。

2   名前: アム : 2007/04/05(木) 18:39  ID:pi3QkpHX sub-Cl
カヅサツ様

レスありがとうございます。

十分気をつけて書いたつもりだったのですが、よく読んでみれば肝心の部分がどうなってるのやらさっぱりわからない質問ですね・・・申し訳ないです。

データが複数あり、1つのデータについて解説と画像が複数あります。
1つのデータについて表示した際、解説の横にメインの画像を表示させるスペースと、それらのサムネイルが並んでいる状態で、「サムネイルをクリックすると拡大画像がメインの画像部分に表示される」という動作を1ページ内で実行させている…という文章で伝わるでしょうか?
未だサーバーにUPしていない状態ですので、取り急ぎ文章のみの説明で失礼致します。

>「画像リンクを複数作って、それをli要素でマークアップする」
>で最低限のことは完了します。
これが1番HTML的にも正しいのでしょうが、なるべくページ切り替え数を減らしつつ、画像と解説が常に同時に見れるように・・・と思いまして。
清々しく自分の思うように作ってしまって、後は未対応ブラウザへの代替手段の表示に任せてしまうというのが、この場合は無難なのでしょうかねぇ…。

3   名前: カヅサツ ◆ThCi95HEzw : 2007/04/05(木) 18:39  [URL]  ID:O5hEMlpW sub-r2
> という文章で伝わるでしょうか?

うーんわからないです。

> 未だサーバーにUPしていない状態ですので

とりあえず、私は該当のページを見てみないとなんともいえません。

4   名前: アム : 2007/04/05(木) 18:39  ID:pi3QkpHX sub-Cl
訂正:ボタンをクリックすると画像が切り替わる
→×クリック ○オンマウス でしたorz
最初はクリックにしていたのですが、FireFoxだとクリックしても切り替わらず、オンマウスにさし替えたの忘れてました…大変失礼しました。
タイトル修正したいorz

とりあえずソースだけでもよろしいでしょうか?
見やすいようにざっくり削ってあります。

※javascriptは
http://www.dynamicDrive.com
より拝借して、多少改変しています。
<?xml version="1.0" encoding="shift_jis"?>
<!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" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Type" content="javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>test</title>
<script type="text/javascript"> 
<!--
/***********************************************
* Image Thumbnail Viewer II script- c Dynamic Drive DHTML code library (www.dynamicdrive.com)
* Visit http://www.dynamicDrive.com for hundreds of DHTML scripts
* This notice must stay intact for legal use
***********************************************/

var dynimages=new Array()
dynimages[0]=["1.jpg","#"]
dynimages[1]=["2.jpg","#"]
dynimages[2]=["3.jpg","#"]
 
var filterstring="progid:DXImageTransform.Microsoft.GradientWipe(GradientSize=1.0 Duration=0.7)"

for (x=0; x<dynimages.length; x++){
  var myimage=new Image()
  myimage.src=dynimages[x][0]
}

function returnimgcode(theimg){
  var imghtml=""
  if (theimg[1]!="")
    imghtml+='<img src="'+theimg[0]+'" alt="" />'
  if (theimg[1]!="")
    return imghtml
}

function modifyimage(loadarea, imgindex){
  if (document.getElementById){
    var imgobj=document.getElementById(loadarea)
    if (imgobj.filters && window.createPopup){
      imgobj.style.filter=filterstring
      imgobj.filters[0].Apply()
    }
    imgobj.innerHTML=returnimgcode(dynimages[imgindex])
    if (imgobj.filters && window.createPopup)
      imgobj.filters[0].Play()
    return false
  }
}

// --> 
</script>
</head>
<body>


<div class="side_left">
  <p>Aについて</p>
  <p>
    解説1<br />
    ○○○○○○○○○○○○○<br />
    解説2<br />
    ○○○○○○○○○○○○○<br />
    解説3<br />
    ○○○○○○○○○○○○○<br />
  </p>
  <p align="center">
    画像<br />
    <a href="#" onmouseover="modifyimage('dynloadarea', 0)"><img src="1small.jpg" width="50" border="0" alt="画像1" /></a>
    <a href="#" onmouseover="modifyimage('dynloadarea', 1)"><img src="2small.jpg" width="50" border="0" alt="画像2" /></a>
    <a href="#" onmouseover="modifyimage('dynloadarea', 2)"><img src="3small.jpg" width="50" border="0" alt="画像3" /></a>
  </p>

</div>

<div class="side_right">
  <div id="dynloadarea" class="main_img"><img src="1.jpg" width="400" name="def" alt=""></div>
</div>

</body>
</html>

5   名前: カヅサツ ◆ThCi95HEzw : 2007/04/05(木) 18:39  [URL]  ID:O5hEMlpW sub-r2
要するに「ある要素にポイントすると、別のある画像が変わる」というだけの話ですよね?
「解説」は、今回の「JavaScriptには」関係ないですよね?
また、「ボタン」というのはポイントさせたい要素が今回たまたま「ボタンのように見える画像」なだけですよね?
(type属性値が "submit" である input 要素とか、あるいは button要素ではないのですよね?)

であれば、
・リンクを複数作って、それをli要素でマークアップする
・「ページが読み込まれたら、画像Aを表示する」というJavaScriptを書く
・リンクの onmmouseover属性に、「画像Aのsrc属性値を、自分自身のhref属性値にする」というJavaScriptを書く
・リンクを無効化するJavaScriptを書く

でオッケーだと思います。

#先読みとか考えるともう少し面倒ですが、基本的な考え方は上記でしょう。

6   名前: カヅサツ ◆ThCi95HEzw : 2007/04/05(木) 18:39  [URL]  ID:O5hEMlpW sub-r2
> 要するに「ある要素にポイントすると、別のある画像が変わる」というだけの話ですよね?

だんだん自信がなくなってきた(笑)
ソースをコピペしてIEで見ただけで判断しちゃったんだけど。

7   名前: アム : 2007/04/05(木) 18:39  ID:pi3QkpHX sub-Cl
あああ、そうですね、「ボタン」なんて書き方したらややこしかったですね…大変申し訳ありませんでしたorz
詳しい手順解説ありがとうございます<(_ _)>
後はガツサツ様の解説を元に調べながら作成してみたいと思います。

私の伝え方が悪かったために無駄に煩わせてしまいすみませんでした。
今後また質問することがあれば、もっと読む側に配慮した質問ができるよう心がけます。
最後までお付き合い下さりありがとうございました。

一覧へ戻る