Creazy!

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

JavaScript 小技集

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

投稿日:


[追記:2008/07/04] 更に改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re2: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
-–
かなり前に書いたスクリプトなんですが、最近コメント欄での質問が多く寄せられています。
第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く
んで、久しぶりにコード見てみたら改良できそうな部分があるのでサクッと紹介します。
※このスクリプトの目的とかは上記エントリーを参考にして下さい。

サンプルソース

JavaScript関数

/**
* 画像サイズと合ったポップアップウィンドウを開く関数
* @param src string ポップアップ表示する画像
*/
function openImageSizedWindow(src){
// 画像をプリロード
var i = new Image(); i.src = src;
// ロード完了してから処理を開始
i.onload = function() {
// 画像のサイズに合った空ウィンドウを開く
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();
}
}

HTMLからの呼び出し例

<a href="javascript:openImageSizedWindow('画像のURL');">
<img src="画像のURL" alt="画像のタイトル" /></a>

前回からの変更点でポイントとなるのは、new Image(); i.src = src; でプリロードした後に、ちゃんと画像がロードされてから処理が始まるように i.onload イベントハンドラーをかませた事です。ブラウザによっては、画像がロードされない内に画像サイズを取得しようとして小さいサイズのウィンドウが開いてしまっていましたが、その点を解決しているはずです。

サンプル


JSサンプル

ダウンロード

すぐに使えるように外部JS形式で保存しました。
ZIPファイルを回答するとJSファイルが入っていますので、ダウンロードしてご利用ください。
openImageSizedWindow.zip
スクリプトはUTF-8で保存されていますので、そのまま使う場合はscriptタグにcharsetを指定する事をお勧めします。

<script type="text/javascript" src="/path/to/js/openImageSizedWindow.js" charset="UTF-8"></script>

まとめ

LightBox系のスクリプトなんかが一般化している昨今でも、こういったスクリプトの需要があるもんなんですね。別ウィンドウ表示は結構扱いにくかったりするんだけどね・・・。
これからも、「こんな関数があったら良いな」っていうのを作っていけたら良いなと思います。
-–
[追記:2008/07/04] 更に改良したスクリプトをつくりましたので下記エントリーの方を参照して下さい。
Re2: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く

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

-JavaScript, 小技集

執筆者:


  1. 池中玄太 より:

    当初はLightBoxを使用していたのですが、「デスクトップにコピー出来ない」と言われ別ウィンドウで開くことにしました。
    おかげですごく助かりました。
    他のサイトでも使用させて頂こうと思います。
    ありがとうございました!

  2. yager より:

    >池中玄太さん
    > 当初はLightBoxを使用していたのですが、「デスクトップにコピー出来ない」と言われ別ウィンドウで開くことにしました。
    なるほど、そういうケースもあるのですね。
    (LightBoxは右クリック保存できないんでしたっけ?)
    お役に立てたようで、何よりです。

  3. 松岡聖 より:

    イメージ画像のポップアップをたくさん作ることになり、
    参考にさせて頂きたいと思っているのですが、
    一度画像を開いて、閉じると2度目が開かないのですが・・・
    ぜひとも参考にさせて頂きたいので、よろしくお願いします。

  4. yager より:

    >松岡聖さん
    お返事が遅れてスミマセン。
    2度目が開かないという現象はこちらでは確認できませんでした。
    もしかしたら環境の問題ですかねぇ。(当方Macです。)
    問題がおきたOS、ブラウザなどの環境を教えて頂けますか?
    それから差し支えなければ問題が画面のURLを教えていただけると何かわかるかもしれません。
    公開がはばかられる場合は yager[ at ]creazy[ dot ]net にメール下さい。

  5. 焼酎Rock より:

    IE7でサンプルが機能しません。

  6. yager より:

    >焼酎Rockさん
    IE7ですか・・・スミマセンが今環境がないので時間できたら調べてみます。
    多分onloadイベントハンドラーの挙動がブラウザによって違うんだと思いますけど。

  7. yager より:

    >松岡聖さん
    別件で修正版を作ってみました。
    もしかしたらこちらで解決するかもしれないのでよろしければどうぞ。
    http://creazy.net/2008/07/re2_openimagesizedwindow_js.html
    >焼酎Rockさん
    恐らく下記エントリーで書いた部分が問題だったと思われます。
    新しいバージョンを試して頂ければと思います。
    http://creazy.net/2008/07/re2_openimagesizedwindow_js.html

comment

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

関連記事

picplzから自分の全写真データを一括ダウンロードするPHPスクリプト

【2012/06/05:追記】 ブラウザだけで完結するバックアップツールを公開しました。こちらもご確認ください。 picplzの全投稿サマリーを統計してバックアップできる「thx!picplz」を作り …

Google検索結果を一瞬でエクセルに貼り付けるブックマークレット「Google Top10 TSV」

いやー、この手の記事をずいぶん書いてなかったなぁと反省しつつリハビリ状態のヤガーです。 WEBサイト運営などをやっていると、特定キーワードの検索エンジン表示順位などを調べたりすることがあるのですが、S …

第10回:Windowsフォントをアンチエイリアスでキレイに見せる方法

メインPCをMacに移して一番驚いたのは、Macで表示されるフォントの美しさかもしれません。 Macでは基本的に全てのサイズのフォントにアンチエイリアス(スムージングともいう)処理が施されています。 …

ハイビジョン映像(AVCHD)を記録するとMTSファイルになって扱いにくいのでffmpegでmp4に変換

手持ちのビデオ撮影機材が予算の関係で中古で購入したミラーレス一眼(GF1、GF3、GX1、なぜか全てPanasonic LUMIX)なんですが、高画質で録画しようとするとAVCHDのMTSファイルにな …

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

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

スポンサードリンク

スポンサードリンク