2012-01-18 187 views
0

我試圖實施從桌面到瀏覽器中的文件拖放&拖放功能,我已經有2個遇到的問題:文件拖放HTML5問題

我需要事件時,將觸發在拖動過程中,當光標離開瀏覽器的窗口。 您可以在mail.google.com上看到此類機制 - 當用戶將文件拖到其他位置時,文本「此處放置文件」消失。 我試過所有拖動事件,但他們沒有幫助。

第二個問題是我需要在用戶將文件拖到所有元素上時將光標設置爲「none」,除了「droplabel」div。 我知道下面的代碼行改變了光標,但是當光標達到'droplabel'div時如何將其更改爲正常?

evt.dataTransfer.effectAllowed = 'move'; 

有人知道如何解決這個問題嗎?

<html> 
    <body> 
     <form> 
      <div id="droplabel" style="width:200px;height:200px;background-color:red">Drop file here...</div> 
      <script> 
       function handleDrop(evt) { 
       evt.stopPropagation(); // Stops some browsers from redirecting. 
       evt.preventDefault(); 

       var files = evt.dataTransfer.files; 
       for (var i = 0; i < files.length; i++) { 
        console.log(files[i].name); 
       } 
       } 
       function handleDragOver(evt) { 
       if (evt.preventDefault) { 
        evt.preventDefault(); // Necessary. Allows us to drop. 
       } 

       return false; 
       } 
       document.getElementById('droplabel').ondrop = handleDrop; 
       document.getElementById('droplabel').ondragover = handleDragOver 
       var body = document.getElementsByTagName('body')[0]; 

       document.ondragover = function (evt) { 
       evt.preventDefault(); 
       } 

       document.ondrop = function (evt) { 
       evt.stopPropagation(); // Stops some browsers from redirecting. 
       evt.preventDefault(); 
       } 
      </script> 
     </form> 
    </body> 
</html> 

回答

1

有一個GoogleIO幻燈片,他們表現出的DnD這裏http://www.htmlfivewow.com/slide19功能。如果您查看代碼(http://www.htmlfivewow.com/js/slide-content.js),您可以在「DND」部分看到他們有處理程序ondragenterondragleave,它們切換「懸停」類元素。

這是一個小提琴http://jsfiddle.net/cHfCh/