Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

JavaScript 小技集

第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く

投稿日:


[追記:2008/07/04] 更に改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re2: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
-–
[追記:2008/04/07] 改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
-–
今回はフォトサイトで特に多様されると思われる画像のポップアップウィンドウを開く機能について、便利な関数を作ってみようと思います。
フォトサイトでは一覧ページではサムネイル(小さい画像)を表示して、クリックすると大きな画像(オリジナルサイズ)を表示するという形式を取る事が多いと思います。(ブログだとほとんどですね。)その時に画像サイズを確認してから window.open() して、ポップアップ用のページを用意して・・・をいちいちやっていたら面倒なので、その辺を解消するのが目的です。

■まずは基本的な事

普通にサムネイル表示→ポップアップ表示をやろうとするとこんな構成になると思います。

・親HTML -- サムネイル画像
   ↓
   JavaScriptでポップアップHTML呼び出し
   ↓
・ポップアップHTML -- オリジナル画像

やりたい事はこれだけなのにHTML2枚、画像2枚、JS関数1個を遣っている訳です。
特にポップアップのHTMLが非常に無駄、というか面倒くさいのでそれをJS関数で出力する。

■完成後の構成

・親HTML -- サムネイル画像
   ↓
   JavaScriptでポップアップHTML呼び出し  -- オリジナル画像

それでは、早速関数を作ってみます。

サンプルコード

/**
* 画像サイズと合ったポップアップウィンドウを開く関数
* @param src string ポップアップ表示する画像
*/
function openImageSizedWindow(src){
// 画像をロードしてサイズを取得
var i = new Image(); i.src = src;
// 画像のサイズに合った空ウィンドウを開く
var pop_win = window.open(
"",
"_blank",
"width="+i.width+",height="+i.height+",scrollbars=no,resizable=yes"
);
// 空ウィンドウに画像を出力するためのHTML
pop_win.window.document.open();
pop_win.window.document.write(
'<html>'
+'<head><title>'+i.alt+'</title></head>'
+'<body style="margin:0;padding:0;border:0;">'
+'<img src="'+i.src+'" width="100%" alt="" />'
+'</body>'
+'</html>'
);
pop_win.window.document.close();
}
<-- 関数呼び出しのサンプル -->
<a href="javascript:openImageSizedWindow('画像のURL');">
<img src="画像のURL" alt="画像のタイトル" /></a>

実行例

写真のタイトル

ダウンロード

外部JSの形式で関数を保存しました。ダウンロードしてそのまま利用できます。
openImageSizedWindow.zip
-–
(2007/08/25追記)
スクリプトに2点間違いがありましたので修正しました。
1)ポップアップウィンドウ内にHTML出力している部分(document.write)の前後に以下コードを追加しました。明示的な停止処理が無かったため、FireFoxでポップアップ画面のロードが終わらない状況だった事への対応です。

pop_win.window.document.open();
pop_win.window.document.close();

2)ポップアップウィンドウ内のスタイルでタイポ修正

pading  ->  padding

イージーミス申し訳ない!
-–
(2008/04/07追記)
改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
-–
(2008/07/04追記)
更に改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re2: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く

第13回:URLエンコードとURLデコードを簡単にするブックマークレット
第12回:引用(blockquote)をCSSと画像でそれらしく見せる方法
第11回:引用(blockquote)を簡単にするブックマークレット
第10回:Windowsフォントをアンチエイリアスでキレイに見せる方法
第9回:閲覧しているサイトへのリンクタグを生成するブックマークレット
第8回:Twitter JavaScript Badges の日付フォーマットを自由にカスタマイズ
第7回:サムネイル作成APIをJavaScriptで簡単に切り替える方法
第6回:TinyURL の遷移先が怖くて開けない場合の対処法
第5回:twitter の JavaScript Badge を改造する
第4回:twitter の JavaScript Badge をIEで表示するとおかしい件に対応してみる
・第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
第2回:タグに関わる基本的な事
第1回:CSSで画像にborderをつけてみる

-JavaScript, 小技集

執筆者:


  1. ロボット

    こんにちは。creazy photograph、を興味深く読ませていただきました。勉強になりました。奇麗な画面で素敵です。また読ませていただきたいと思いま…

  2. matt より:

    はじめまして!
    mattと申します。
    まさにこのスクリプトを探しているとたどり着きました。
    現在、ロリポブログを利用しているのですが、
    ロリポブログの仕様でサムネイル画像をクリックしてもウィンドウのサイズが画像に合ったサイズではありません。
    そこで、このブログからスクリプトをダウンロードさせていただいて、このスクリプトと画像ファイルをブログとは別のレンタルサーバーにアップロードして、
    ブログのヘッダーには
    (****は私のレンタルサーバーのURL)
    を記述し、ブログのエントリーには


    と記述しました。
    実際に画像がうまくポップアップしてくれるか確認してみたところ、
    「ページでエラーが発生しました」
    と下の方に出て、ポップアップしません。
    ブラウザはIE7です。
    ちょっと行き詰っておりますので、アドバイスをいただけませんでしょうか?

  3. matt より:

    タグをコメントに記載していたのですが、投稿すると消えてしまいました。
    申し訳ありません。
    要はヘッダーにはJavascriptの外部ファイルを呼び出すタグを記入し、ブログのエントリーにも「関数呼び出しのサンプル」通りに記述したのですが、うまくいきません。
    ご教授のほど、よろしくお願いします。

  4. yager より:

    >mattさん
    ご利用ありがとうございます。
    コメント欄ではスタイル用以外のタグは除去されます
    が、管理画面ではみれますので確認しました。
    タグの貼り方は特に問題無いようには見えますが実際の画面を見てみない事には何とも言えません。
    エラーの出る画面のURLを教えてくれませんか?
    コメント欄に書くのがはばかられるようでしたから下記メアドまでお願いします。
    yager [ at ] creazy.net
    ※[ at ]を@に読み替えて下さい。

  5. 池中玄太 より:

    初めまして!
    非常に便利なスクリプトを有り難うございます。
    今まで、いちいちリンク毎にウィンドウサイズを指定する作業から開放されました!
    実はクライアントから、画像をクリックしたら余白の無いウィンドウを開いて欲しいと言われ、本を片手にJavascriptで制作していたのですが、Macでは正常なのにWinではエラーが起きていて困っていました。
    このスクリプトのサンプルがWinでもMacでも問題なく動作していたので導入したいのですが、なぜかボクの環境では上手くスクリプトが動かず困っています。
    見れるは見れるのですが、クリックした時にウィンドウサイズがすごく小さい状態で開いてしまいます。
    それを閉じてもう一度クリックするとちゃんと画像にぴったりのウィンドウサイズが開きます。
    Winでも同じ状況になっています。
    それと、Javascriptを外部にするとFireFoxのFirebugでチェックするとシンタックスエラー?が出て上手く動作しませんでした。
    なので、今はページに埋め込んでいます。
    上記のサイトをこちらに明記させて頂きますので、ご回答頂ければとコメント致しました。
    http://www.pipeline-inc.jp/studio/heiwazima/index.html
    お手数だとは思いますが非常に使い勝手の良いスクリプトだと思いますのでよろしくお願い致します。

  6. yager より:

    >池中玄太さん
    初めまして。コメントありがとうございます。
    > クリックした時にウィンドウサイズがすごく小さい状態で開いてしまいます。
    どうやら、画像のロードが終わらないうちに画像サイズを取得しようとして最小ウィンドウで開くようになってしまう場合があるようですね。池中玄太さんの環境で直るか分かりませんが改良版を書いて見ましたので下記エントリ−を参考にしてみて下さい。
    http://creazy.net/2008/04/re_openimagesizedwindow_js.html
    > Javascriptを外部にするとFireFoxのFirebugでチェックするとシンタックスエラー?
    Firebugでデバッグしているならどの処理で止まっているか分かりませんか?
    URL拝見しましたが、文字エンコーディングがShift-JISのようなので、こちらで配布しているUTF-8の外部JSと文字コードがバッティングしています。文字化けが原因で外部JSが正常に読み込まれていないのではないでしょうか?scriptタグにcharset=”UTF-8″と指定すると上手く行きそうです。
    いかがでしょうか?

  7. 池中弦太 より:

    さっそくのご回答ありがとうございます(> さっそくのご回答ありがとうございます(>

  8. 池中玄太 より:

    無事うまく動きました!
    ものすごく感謝しています!
    本当にありがとうございました!
    他のスクリプトもじっくり拝見させて頂きます(^ ^)

comment

メールアドレスが公開されることはありません。

関連記事

Googleドライブのフォーム機能からGoogle Apps Scriptを使ってメール自動返信2014年版

Googleドキュメントのフォーム機能からGoogle Apps Scriptを使ってメール送信 [C!] 上記記事は2011年に書いて今でも非常にたくさん参照されているのですが、Googleの仕様変 …

Ffmpegで複数動画を結合して一つの動画に出力

いつも、動画変換においてやりたいことがあってもコマンドを思い出せないFfmpeg。今回もこのごろ良く使うものを自分用のメモを兼ねて記録しておきます。

no image

AmazonのURLを短くするブックマークレット

今日、はてブ経由でこんな豆知識を仕入れました。 もともとAmazonの商品ページは、書籍であれば10けたのISBNコード、それ以外の製品もASINの10けた番号さえあればアクセス可能だ。 via: 3 …

no image

PhotumblrでTumblrの画像をブログパーツにしてみる

だいぶ前にTumblrの画像を抜き出すPipesを作ったんだけど、今日はそれを使ってブログパーツを作ってみます。 元ネタはこちらのエントリーをお読みください。(で、省略w) ・「Photumblr」T …

【更新】ソーシャルメディアに共有するボタンの設置方法(Twitter, facebook, mixi, GREE, Evernote, Google+, Tumblr, Pinterest, はてブ)

ソーシャルメディアの各サービスがこぞって「いいね!」などの共有ボタンをリリースしています。ブログやニュースメディアでも頻繁に目にする昨今ですが、色々なソーシャルボタンの設置方法をまとめて紹介したいと思 …

スポンサードリンク

スポンサードリンク