忍者ブログ

29Apr

[PR]

Posted by in

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

02Apr

ローカルの画像をドラッグ&ドロップで画面に表示させる。

Posted by No Name Ninja in Javascript Sample

HTML5の機能を使ってローカル画像のファイルを画面に表示する方法です。
画面に表示されるのみで、実際にサーバーにアップロードはされていません。

DEMO
722957e0.jpg

<script language="javascript" type="text/javascript">

onload = function(){
  var element = document.getElementById('dragDrop');
  //ユーザーに「使わない」ことを明示するのが仕様。。。
  element.ondragover = preventer;
  element.dragenter = preventer;

  //イベント登録
  element.ondrop = dropping;

}

function preventer(e){
  e.preventDefault();
}

function dropping(e){
  //I.E.未実装
  var files = e.dataTransfer.files;
  if(!files){
    alert('dataTransfer.files未実装');
  }

  if(typeof FileReader != "undefined"){
    //I.E.はFileReader未実装
    reader = new FileReader();
    reader.onload = function(evt) {
      var img = document.createElement('img');
      img.setAttribute("src",  evt.target.result);
      document.getElementById('dragDrop').appendChild(document.createElement('br'));
      document.getElementById('dragDrop').appendChild(img);
    };
    reader.readAsDataURL(files[0]);

  } else {
    alert("本ブラウザではFileReader未実装");
  }
 
 
  //記載しておかないと、画面が画像表示に切り替わってしまう。
  e.preventDefault();
}
</script>

1.イベントを登録します。ondragover dragenterイベントは「無効であること」を明示しなければなりません。
※↑HTML5の仕様のため

2.ondropをイベント登録します。
3.ファイルURLを読み込みIMGタグに設定しています。
4.記述しておかないと画像を表示する画面に切り替わってしまいます。

※備考
CSSに"-khtml-user-drag: element;"を定義してsafariも対応しおうとしたがダメだった。
I.E.はe.dataTransfer.filesやFileReaderなど対応していないものが多い。
ベンダーごとにポリシーがかなり異なるため、全ブラウザ対応は、難しいかもしれないです。



※動作確認環境
・chrome 23 ○
・firefox 17 ○
・i.e.9  ×  ・・・e.dataTransfer.filesが取得できない。 FileReaderがない。
・Safari 5.1 × ・・・FileReaderが未実装
 

PR

Comment


Vodafone絵文字 i-mode絵文字 Ezweb絵文字