SlideShare une entreprise Scribd logo
1  sur  20
Drag & Drop ときどき File API nakajijapan
背景的なもの html5といろいろなAPIの出現に伴い、いろいろな表現ができるようになってきた。                       こんな僕でも実装できた! 写真をドラッグアンドドロップして画像投稿できたらいいなぁという純粋な願望 イメージは30Days的な表現をしたかった。
調査 Drag & Drop DataTransfer FileApi FileReader // XmlHttpRequest ※ブラウザはFirefoxのみ
Drag & Drop
Drag & Drop dragenter  ドラッグ中のマウスカーソルが、要素と重なったときに瞬間に呼び出されるイベント dragover ドラッグ中のマウスカーソルが要素内から出た時に呼び出されるイベント drop ドラッグ時に呼び出されるイベント
あああ <javascript> function init() { dandd= new Nakaji();   addEvent(window, "dragenter", dandd.dragEnter, false); vardropBox = {}; dropBox= document.getElementById("dropbox");   addEvent(dropBox, "dragover", dandd.dragOver, false); addEvent(dropBox, "drop",     dandd.drop, true); }   // ロード時に処理を追加 window.addEventListener("load", init, false);    
あああ <javascript> Nakaji.prototype= {   	//------------------------- 	// ドラッグ中のマウスカーソルが、              // 要素と重なったときに瞬間に呼び出されるイベント 	//------------------------- dragEnter : function(event)  	{      $("#dropbox").css('background', 'red'); 	},
<html> <div id= "dropbox">    Drop Here!!</div>
File API
File API FileReader 今のところFirefoxのみ 次のバージョンのChromeで利用可能!? http://gihyo.jp/dev/column/01/browser/chrome5 ファイルをたくさんアップロードする処理をしようとすると重くなる?
drop : function(event) {         // ドラッグされたデータを取得 var files = event.dataTransfer.files;   ・ ・ ・ var file = files[i]; var reader = new FileReader();         reader.name = file.name, reader.index = i, reader.file = file;         // メソッドの登録 reader.addEventListener("loadend", Nakaji.prototype.buildImageListItem, false);         // ファイルをdataURL形式で読み取る reader.readAsDataURL(file);    あああ
buildImageListItem : function(event)    { varimgTag = $(document.createElement("img")); vardivTag = $(document.createElement("div")); varname = event.target.name; vardata = event.target.result; varfile = event.target.file;   imgTag.attr({                 width:  200,                 height: 200, src:    data             });           // 先頭に追加         $("#bag").prepend(divTag.append(imgTag.fadeIn(2000))); あああ
以上!
XmlHttpRequest()
XmlHttpRequest() 画像ファイルをアップロード DataTransferオブジェクトを利用 処理中は進捗状況を表示させる XmlHttpRequest.onprogress()
あああ <javascript>         // マルチパート形式で画像を保存する multipartFormData+= '--' + boundary + ''; multipartFormData += 'Content-Disposition: form-data;          filename="' + file.name + '"'                             +'Content-Type: ' + contentType + ''                             +'Content-Transfer-Encoding: binary' + '' + ''                             +file.getAsBinary()                             +'--' + boundary + '--';  
あああ <javascript> //アップロード先 xhr.open("POST", "./upload.php"); // ヘッダの設定 xhr.setRequestHeader( "Content-type","multipart/form-data; boundary=" + boundary ); xhr.setRequestHeader( "Content-Length", multipartFormData.length ); // バイナリデータを送信 xhr.sendAsBinary(multipartFormData);
まとめ ほとんどクロスブラウザできてない Firefoxでしか動かない。 jqueryがやってくれることを切に願います 重い ブラウザのメモリリークが凄いことになる free()的なものはないものか!    FileReaderは重い XmlHttpRequest() 今回なによりも画像ファイルアップロード時の処理 が面倒くさかった!
実演?
ご性聴ありがとうございました。

Contenu connexe

Tendances

Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasaitakara kasai
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoShoot Morii
 
ハッシュと配列
ハッシュと配列ハッシュと配列
ハッシュと配列TENTO_slide
 

Tendances (6)

Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasai
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
前期講座09
前期講座09前期講座09
前期講座09
 
ハッシュと配列
ハッシュと配列ハッシュと配列
ハッシュと配列
 

En vedette

Brand visibility 2 en
Brand visibility 2 enBrand visibility 2 en
Brand visibility 2 enDiferencia
 
English.sucess cases lauching chevrolet spark
English.sucess cases   lauching chevrolet sparkEnglish.sucess cases   lauching chevrolet spark
English.sucess cases lauching chevrolet sparkDiferencia
 
Alyssa, Gianna&amp; Grace
Alyssa, Gianna&amp;  GraceAlyssa, Gianna&amp;  Grace
Alyssa, Gianna&amp; Gracegigistar4
 
English. success cases mscar children day
English. success cases   mscar children dayEnglish. success cases   mscar children day
English. success cases mscar children dayDiferencia
 
Laviola marylea 2010-201_labinfo
Laviola marylea 2010-201_labinfoLaviola marylea 2010-201_labinfo
Laviola marylea 2010-201_labinfomarylea
 
サービスをRailsにした話
サービスをRailsにした話サービスをRailsにした話
サービスをRailsにした話Daichi Nakajima
 
Môn triết chương v giá trị hoàn chỉnh
Môn triết chương v giá trị hoàn chỉnhMôn triết chương v giá trị hoàn chỉnh
Môn triết chương v giá trị hoàn chỉnhngaynangha
 
Môn triết chương v giá trị
Môn triết chương v giá trịMôn triết chương v giá trị
Môn triết chương v giá trịngaynangha
 

En vedette (11)

Brand visibility 2 en
Brand visibility 2 enBrand visibility 2 en
Brand visibility 2 en
 
僕とPuppetと
僕とPuppetと僕とPuppetと
僕とPuppetと
 
English.sucess cases lauching chevrolet spark
English.sucess cases   lauching chevrolet sparkEnglish.sucess cases   lauching chevrolet spark
English.sucess cases lauching chevrolet spark
 
Alyssa, Gianna&amp; Grace
Alyssa, Gianna&amp;  GraceAlyssa, Gianna&amp;  Grace
Alyssa, Gianna&amp; Grace
 
Refining
RefiningRefining
Refining
 
English. success cases mscar children day
English. success cases   mscar children dayEnglish. success cases   mscar children day
English. success cases mscar children day
 
Laviola marylea 2010-201_labinfo
Laviola marylea 2010-201_labinfoLaviola marylea 2010-201_labinfo
Laviola marylea 2010-201_labinfo
 
サービスをRailsにした話
サービスをRailsにした話サービスをRailsにした話
サービスをRailsにした話
 
Ethiopia
EthiopiaEthiopia
Ethiopia
 
Môn triết chương v giá trị hoàn chỉnh
Môn triết chương v giá trị hoàn chỉnhMôn triết chương v giá trị hoàn chỉnh
Môn triết chương v giá trị hoàn chỉnh
 
Môn triết chương v giá trị
Môn triết chương v giá trịMôn triết chương v giá trị
Môn triết chương v giá trị
 

Similaire à Drag anddropfilereader

C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装Hiroki Takahashi
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applicationstotty jp
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210cmtomoda
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術ina job
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しようHiroki Omae
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンYoichiro Tanaka
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLTaisuke Fukuno
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習x1 ichi
 

Similaire à Drag anddropfilereader (20)

jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターン
 
YUI
YUIYUI
YUI
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 

Drag anddropfilereader

  • 1. Drag & Drop ときどき File API nakajijapan
  • 2. 背景的なもの html5といろいろなAPIの出現に伴い、いろいろな表現ができるようになってきた。 こんな僕でも実装できた! 写真をドラッグアンドドロップして画像投稿できたらいいなぁという純粋な願望 イメージは30Days的な表現をしたかった。
  • 3. 調査 Drag & Drop DataTransfer FileApi FileReader // XmlHttpRequest ※ブラウザはFirefoxのみ
  • 5. Drag & Drop dragenter  ドラッグ中のマウスカーソルが、要素と重なったときに瞬間に呼び出されるイベント dragover ドラッグ中のマウスカーソルが要素内から出た時に呼び出されるイベント drop ドラッグ時に呼び出されるイベント
  • 6. あああ <javascript> function init() { dandd= new Nakaji();   addEvent(window, "dragenter", dandd.dragEnter, false); vardropBox = {}; dropBox= document.getElementById("dropbox");   addEvent(dropBox, "dragover", dandd.dragOver, false); addEvent(dropBox, "drop", dandd.drop, true); }   // ロード時に処理を追加 window.addEventListener("load", init, false);    
  • 7. あああ <javascript> Nakaji.prototype= {   //------------------------- // ドラッグ中のマウスカーソルが、 // 要素と重なったときに瞬間に呼び出されるイベント //------------------------- dragEnter : function(event) { $("#dropbox").css('background', 'red'); },
  • 8. <html> <div id= "dropbox"> Drop Here!!</div>
  • 10. File API FileReader 今のところFirefoxのみ 次のバージョンのChromeで利用可能!? http://gihyo.jp/dev/column/01/browser/chrome5 ファイルをたくさんアップロードする処理をしようとすると重くなる?
  • 11. drop : function(event) { // ドラッグされたデータを取得 var files = event.dataTransfer.files;   ・ ・ ・ var file = files[i]; var reader = new FileReader(); reader.name = file.name, reader.index = i, reader.file = file; // メソッドの登録 reader.addEventListener("loadend", Nakaji.prototype.buildImageListItem, false); // ファイルをdataURL形式で読み取る reader.readAsDataURL(file);    あああ
  • 12. buildImageListItem : function(event) { varimgTag = $(document.createElement("img")); vardivTag = $(document.createElement("div")); varname = event.target.name; vardata = event.target.result; varfile = event.target.file;   imgTag.attr({ width: 200, height: 200, src: data });   // 先頭に追加 $("#bag").prepend(divTag.append(imgTag.fadeIn(2000))); あああ
  • 15. XmlHttpRequest() 画像ファイルをアップロード DataTransferオブジェクトを利用 処理中は進捗状況を表示させる XmlHttpRequest.onprogress()
  • 16. あああ <javascript> // マルチパート形式で画像を保存する multipartFormData+= '--' + boundary + ''; multipartFormData += 'Content-Disposition: form-data; filename="' + file.name + '"' +'Content-Type: ' + contentType + '' +'Content-Transfer-Encoding: binary' + '' + '' +file.getAsBinary() +'--' + boundary + '--';  
  • 17. あああ <javascript> //アップロード先 xhr.open("POST", "./upload.php"); // ヘッダの設定 xhr.setRequestHeader( "Content-type","multipart/form-data; boundary=" + boundary ); xhr.setRequestHeader( "Content-Length", multipartFormData.length ); // バイナリデータを送信 xhr.sendAsBinary(multipartFormData);
  • 18. まとめ ほとんどクロスブラウザできてない Firefoxでしか動かない。 jqueryがやってくれることを切に願います 重い ブラウザのメモリリークが凄いことになる free()的なものはないものか!    FileReaderは重い XmlHttpRequest() 今回なによりも画像ファイルアップロード時の処理 が面倒くさかった!