時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【解説】「input type=file」の画像プレビューを表示する方法【jQuery】

記事内に広告を含みます

パソ君
パソ君

・「input type=file」で選択した画像ってプレビュー表示できる?

こんな疑問にお答えします。

案件によってはフォーム内にある「input type=file」にて、画像プレビューを出したい場合があります。

下記みたいに↓

実はこれjQueryを用いれば実装可能です。

ジト
ジト

すぐにできるよ!

ということで、この記事では「input type=fileの画像プレビューを表示する方法」について解説していきます!

この記事でわかること

・「input type=file」の画像プレビューを表示する方法
・「input type=file」の背景画像プレビューを表示する方法

ちなみに「input type=file」自体のデザインカスタマイズは下記記事を参考に↓

【解説】「input type=file」の見た目をカスタマイズ【コピペOK】

【解説】「input type=file」の画像プレビューを表示する方法【jQuery】

そんな画像プレビューを表示できるサンプルがこちら↓

See the Pen input file 画像プレビュー➀ by jito-coder (@jito-coder) on CodePen.

ファイルを選択をクリックして画像を選択したら、右側にプレビュー表示されますよね。

<div class="preview">
    <div class="file">
        <label class="file__label">
            ファイルを選択!!
            <input type="file" name="file">
        </label>
        <p class="file__none">選択されていません</p>
    </div>
    <div class="preview-img"></div>
</div>
$(function () {
    $(document).on("change", ".preview input[type=file]", function () {
        let elem = this;
        let fileReader = new FileReader();
        fileReader.readAsDataURL(elem.files[0]);
        fileReader.onload = function () {
            let imgUrl = fileReader.result;
            let fileNames = Array.from(elem.files).map(file => file.name);
            let imgTag = `<img src='${imgUrl}'>`;
            $(elem).closest(".preview").find(".preview-img").html(imgTag);
            $(elem).closest(".preview").find(".file__none").text(fileNames.join());
        };
    });
});

コードの中で重要な点がこちら↓

  • 画像プレビュー用の場所を用意しておく
  • ファイル内容を読み取りimgタグを生成

順に解説してきます。

➀:画像プレビュー用の場所を用意しておく

まず画像プレビュー用のimgタグを生成できる場所を用意しておきましょう。

今回でいうと下記9行目ですね。

<div class="preview">
    <div class="file">
        <label class="file__label">
            ファイルを選択!!
            <input type="file" name="file">
        </label>
        <p class="file__none">選択されていません</p>
    </div>
    <div class="preview-img"></div>
</div>

➁:ファイル内容を読み取りimgタグを生成

あとは選択されたファイル内容を読み取り、それを用いてimgタグを生成させるプログラムを実装します。

$(function () {
    $(document).on("change", ".preview input[type=file]", function () {
        let elem = this;
        let fileReader = new FileReader();
        fileReader.readAsDataURL(elem.files[0]);
        fileReader.onload = function () {
            let imgUrl = fileReader.result;
            let fileNames = Array.from(elem.files).map(file => file.name);
            let imgTag = `<img src='${imgUrl}'>`;
            $(elem).closest(".preview").find(".preview-img").html(imgTag);
            $(elem).closest(".preview").find(".file__none").text(fileNames.join());
        };
    });
});

➀で用意した場所にて、生成したimgタグを反映します。

これで画像プレビューの表示ができました。

【解説】「input type=file」の画像プレビューを背景画像で表示する方法【jQuery】

最後に背景画像で画像プレビューを表示させる方法を紹介します。

そんなサンプルがこちら↓

See the Pen input file 背景画像でプレビュー by jito-coder (@jito-coder) on CodePen.

画像を選択と書かれた部分をクリックすると、ファイル選択ができます。

そしてファイル選択したら、その部分に画像プレビューが表示。これ実は背景画像を表示しております。

そんなコードがこちら↓

<div class="preview-back">
    <div class="file">
        <label class="file__label02">
            <input type="file" name="file">
        </label>
        <p class="file__none">選択されていません</p>
    </div>
</div>
.file__label02 {
  display: block;
  width: min(100%, 680px);
  padding-top: 390px;
  margin-inline: auto;
  cursor: pointer;
  transition: opacity 0.3s ease;
  background-image: url(https://jito-site.com/wp-content/uploads/2023/11/9accb5f08f77b0b615958e0092d2a85a-1.png);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
}
@media screen and (max-width: 768px) {
  .file__label02 {
    width: 100%;
    padding-top: 56.25%;
  }
}
$(function () {
    $('.preview-back input[type=file]').on('change', function () {
        let elem = this;
        let fileReader = new FileReader();
        fileReader.readAsDataURL(elem.files[0]);
        fileReader.onload = function () {
            let imgUrl = fileReader.result;
            let fileNames = Array.from(elem.files).map(file => file.name);
            $(elem).closest(".preview-back").find(".file__label02").css("background-image", `url('${imgUrl}')`);
            $(elem).closest(".preview-back").find(".file__none").text(fileNames.join());
        };
    });
});

コードの中で重要な点がこちら↓

  • 背景画像として表示したい場所を用意
  • ファイル内容を読み取りbackground-imageを生成

順に解説してきます。

➀:背景画像として表示したい場所を用意

まずHTMLとCSSにて、背景画像として表示したい場所を作成しておきましょう。

今回はlabelタグそのものに対して背景画像を表示する感じでいきます。

そのためlableタグに対して、横幅と縦幅を指定↓

.file__label02 {
  display: block;
  width: min(100%, 680px);
  padding-top: 390px;
  margin-inline: auto;
  cursor: pointer;
  transition: opacity 0.3s ease;
  background-image: url(https://jito-site.com/wp-content/uploads/2023/11/9accb5f08f77b0b615958e0092d2a85a-1.png);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
}
@media screen and (max-width: 768px) {
  .file__label02 {
    width: 100%;
    padding-top: 56.25%;
  }
}

backgroundプロパティを用いて、崩れないようプレビューできるよう調整します。

➁:ファイル内容を読み取りbackground-imageを生成

あとはjQueryを用いて、選択されたファイルの内容からbackground-imageを生成するだけです。

$(function () {
    $('.preview-back input[type=file]').on('change', function () {
        let elem = this;
        let fileReader = new FileReader();
        fileReader.readAsDataURL(elem.files[0]);
        fileReader.onload = function () {
            let imgUrl = fileReader.result;
            let fileNames = Array.from(elem.files).map(file => file.name);
            $(elem).closest(".preview-back").find(".file__label02").css("background-image", `url('${imgUrl}')`);
            $(elem).closest(".preview-back").find(".file__none").text(fileNames.join());
        };
    });
});

➀で生成した場所に対して、background-imageを反映させました。

これで画像プレビューを背景画像として表示させることができます。

【解説】「input type=file」の画像プレビューを表示する方法【jQuery】:まとめ

  • 画像プレビュー用の場所を用意しておく
  • ファイル内容を読み取りimgタグ、もしくはbackground-imageを生成するプログラムを実装
ジト
ジト

「input type=file」の画像プレビューを表示させたい時はためしてみてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA