7

ユーザーがフォーム入力から画像を選択したときに、div の背景画像を変更する方法を探しています。以下に示すように、入力タイプのファイルがあります。ユーザーが必要なファイルを選択したら、選択したファイルに基づいて div#imgHolder の背景を変更したいと思います。何かご意見は?

<div id="simpleDialog" style="width: 350px; height: 350px; display:none;" scrolltop="0">
  <br>  
  <div id="imgHolder" style="width:200px;height:200px;background-image: url(images/gray.png)"></div>
  <br>
  <form id="userForm" align="center">
    <fieldset>
      <legend>Artist Info</legend>
        <input type="file" name="artistImage" id="artistImage" style="border: none;float:left"><br><br>
        <label for="text" style="float:left">Enter URL:</label>
        <input type="text" name="website" id="website" value="" required="required">                
      </fieldset>
  </form>
  <input type="button" id="submit" value="Submit" /> 
  <input type="button" id="cancel" value="Cancel" /> 
</div>
4

4 に答える 4

12

このにタグを付けたので、これが高度なブラウザ機能であることを理解しています。

あなたが求めているのは、ほとんどすべての最新のブラウザー(IE を含む) で利用可能な FileReader が必要です。

// Bind to the change event of our file input
$("input[name='myFileSelect']").on("change", function(){

    // Get a reference to the fileList
    var files = !!this.files ? this.files : [];

    // If no files were selected, or no FileReader support, return
    if ( !files.length || !window.FileReader ) return;

    // Only proceed if the selected file is an image
    if ( /^image/.test( files[0].type ) ) {

        // Create a new instance of the FileReader
        var reader = new FileReader();

        // Read the local file as a DataURL
        reader.readAsDataURL( files[0] );

        // When loaded, set image data as background of page
        reader.onloadend = function(){

            $("html").css("background-image", "url(" + this.result + ")");

        }

    }

});​

上記のコードを Internet Explorer 10、Chrome 19/21、Firefox 12/13、および Opera 11.64 でテストしたところ、問題なく動作することがわかりました。

FileReader をサポートしていない古いブラウザーは、何も表示されません。画像は表示されず、例外も発生しません。

フィドル: http://jsfiddle.net/jonathansampson/K3A9r/

于 2012-06-13T05:54:24.390 に答える
1

アップデート

ローカル コンピューターにある画像にアクセスする場合は、 HTML5 の File APIを使用してアクセスできます。

例えば:

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
          reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', escape(theFile.name), '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
于 2012-06-13T04:50:14.687 に答える
0

ブラウザーのセキュリティ モーダルにより、HTML5 の FileReader() 機能を使用しない限り、ローカル コンピューターからファイルにアクセスしてブラウザーに表示することはできません (残念ながら、現時点ではすべてのブラウザーがサポートしていません)。

于 2012-06-13T04:56:31.390 に答える
0

フォーム入力の画像をクリックすると、jQuery を記述して、の css 属性を変更できbackground-imageます#imgHolder

于 2012-06-13T04:44:56.717 に答える