<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4497422994703112762</id><updated>2011-11-28T07:36:25.368+08:00</updated><category term='html5'/><category term='drag and drop'/><title type='text'>ericsk Meets HTML5</title><subtitle type='html'>HTML5 Rocks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ericsk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4497422994703112762/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ericsk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ericsk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://blog.ericsk.org/wp-content/uploads/2006/09/171838031_7ae90ee7dd_t.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4497422994703112762.post-5833339880626812219</id><published>2010-06-21T11:00:00.000+08:00</published><updated>2010-06-21T11:00:05.764+08:00</updated><title type='text'>Coverflow with pure CSS3</title><content type='html'>I made the Coverflow UI in pure CSS3 (w/ a few JavaScript code). &lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eUrYh-k-ztA&amp;amp;hl=zh_TW&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/eUrYh-k-ztA&amp;amp;hl=zh_TW&amp;amp;fs=1" width="425" height="344" allowScriptAccess="never" allowFullScreen="true" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4497422994703112762-5833339880626812219?l=ericsk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ericsk.blogspot.com/feeds/5833339880626812219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ericsk.blogspot.com/2010/06/coverflow-with-pure-css3.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4497422994703112762/posts/default/5833339880626812219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4497422994703112762/posts/default/5833339880626812219'/><link rel='alternate' type='text/html' href='http://ericsk.blogspot.com/2010/06/coverflow-with-pure-css3.html' title='Coverflow with pure CSS3'/><author><name>ericsk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://blog.ericsk.org/wp-content/uploads/2006/09/171838031_7ae90ee7dd_t.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4497422994703112762.post-2015972446599927891</id><published>2010-06-08T23:07:00.006+08:00</published><updated>2010-06-08T23:40:37.080+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drag and drop'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><title type='text'>Drag-and-Drop Files</title><content type='html'>I want to drag my desktop files into a Chrome app. I used the &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#drag-and-drop-processing-model"&gt;Drag-and-Drop&lt;/a&gt; feature in HTML5 to do this job.&lt;br /&gt;&lt;br /&gt;Here is the &lt;code&gt;DIV&lt;/code&gt; element. It's simple and the dragged files will be dropped here.&lt;br /&gt;&lt;code&gt;&lt;pre class="html" name="code"&gt;&lt;div id="drop-zone"&gt;drop file here&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Then, handle the drag-and-drop related events:&lt;br /&gt;&lt;code&gt;&lt;pre class="javascript" name="code"&gt;var dropZone = document.getElementById('drop-zone');&lt;br /&gt;&lt;br /&gt;dropZone.addEventListener('dragenter', onDragEnter, false);&lt;br /&gt;dropZone.addEventListener('dragover', onDragOver, false);&lt;br /&gt;dropZone.addEventListener('dragleave', onDragLeave, false);&lt;br /&gt;dropZone.addEventListener('drop', onDrop, false);&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Now, let's implement the event handlers one by one (I've loaded jQuery first). First, while the files are being dragged enter the drop zone, I want to change the drop zone's style to highlight the DnD is firing. I added an &lt;code&gt;ondrag&lt;/code&gt; style class to apply the highlight style:&lt;br /&gt;&lt;code&gt;&lt;pre class="javascript" name="code"&gt;var onDragEnter = function(event) {&lt;br /&gt;  $(this).addClass('ondrag');&lt;br /&gt;&lt;br /&gt;  event.stopPropagation();&lt;br /&gt;  event.preventDefault();&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;In order to prevent the default DnD actions (e.g., open the files directly) by browser, it's necessary to call &lt;code&gt;preventDefault&lt;/code&gt; and &lt;code&gt;stopPropagation&lt;/code&gt; methods in these handlers:&lt;br /&gt;&lt;code&gt;&lt;pre class="javascript" name="code"&gt;var onDragOver = function(event) {&lt;br /&gt;  event.stopPropagation();&lt;br /&gt;  event.stopPropagation();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Remove highlight style while the dragged files leave the drop zone.&lt;br /&gt;var onDragLeave = function(event) {&lt;br /&gt;  $(this).removeClass('ondrag');&lt;br /&gt;  event.stopPropagation();&lt;br /&gt;  event.stopPropagation();  &lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Finally, while the files are dropped, the &lt;code&gt;drop&lt;/code&gt; event will be triggered.&lt;br /&gt;&lt;code&gt;&lt;pre class="javascript" name="code"&gt;var onDrop = function(event) {&lt;br /&gt;  // remove the highlight style&lt;br /&gt;  $(this).removeClass('ondrag');&lt;br /&gt;  // get the file objects&lt;br /&gt;  var files = event.dataTransfer.files;&lt;br /&gt;  // process the file one-by-one&lt;br /&gt;  for (var i = 0; i &lt; files.length; ++i) {&lt;br /&gt;    // File name: files[i].name&lt;br /&gt;    // File size: files[i].size (in bytes)&lt;br /&gt;&lt;br /&gt;    // To read files:&lt;br /&gt;    // var fileReader = new FileReader();&lt;br /&gt;    // fileReader.onload = function(event) { var content = event.target.result ...};&lt;br /&gt;    // fileReader.readAsBinary(files[i]); or fileReader.readAsText(files[i], 'UTF-8') or fileReader.readAsDataURL(files[i]);&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;You can also use &lt;code&gt;FileReader&lt;/code&gt; to load the content of a file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4497422994703112762-2015972446599927891?l=ericsk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ericsk.blogspot.com/feeds/2015972446599927891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ericsk.blogspot.com/2010/06/drag-and-drop-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4497422994703112762/posts/default/2015972446599927891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4497422994703112762/posts/default/2015972446599927891'/><link rel='alternate' type='text/html' href='http://ericsk.blogspot.com/2010/06/drag-and-drop-files.html' title='Drag-and-Drop Files'/><author><name>ericsk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://blog.ericsk.org/wp-content/uploads/2006/09/171838031_7ae90ee7dd_t.jpg'/></author><thr:total>0</thr:total></entry></feed>
