文件拖拽

文件拖拽
ondragover 拖拽文件進入窗口 (不斷執(zhí)行)
ondragenter 拖拽文件進入窗口 (只執(zhí)行一次)
ondragleave 拖拽文件離開窗口
ondrop 文件丟到指定區(qū)域
必須在ondragover事件中阻止默認事件return false;
文件信息
var oF=ev.dataTransfer.files[0];
oF.name 名字
oF.type 類型
oF.size 大小
oF.lastModifiedDate 修改時間

    1.創(chuàng)建一個讀取文件對象
        var reader=new FileReader();
    2.讀取方式
        文本方式
            reader.readAsText(oF);
        base64
            reader.readAsDataURL(oF);
    3.讀取成功
        reader.onload=function (){
            reader.result;      //讀取結果      
        };
    4.讀取失敗
        onerror
    5.讀取完成
        onloadend
    6.開始讀取
        onloadstart
    7.讀取過程
        onprogress
            ev.loaded
            ev.total
    8.讀取中斷
        onabort
    9.強制中斷
        reader.abort();
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>文件拖拽</title>
<style>
.box{ width:200px; height:200px; background:red; position:absolute; left:50%; top:50%; margin:-100px 0 0 -100px; display:none; text-align:center; line-height:200px; color:#fff; }
</style>
<script>
window.onload=function (){
    var oDiv=document.querySelector('.box');
    var oPic=document.getElementById('pic');
    var oM=document.getElementById('m');

    //進入頁面
    var timer=null;
    document.ondragover=function (){
        oDiv.style.display='block'; 
        clearTimeout(timer);
        timer=setTimeout(function (){
            oDiv.style.display='none';
        },300); 
    };
    //文件進入元素
    oDiv.ondragenter=function (){
        oDiv.innerHTML='釋放鼠標';
    };
    //文件離開元素
    oDiv.ondragleave=function (){
        oDiv.innerHTML='將文件拖到此區(qū)域';
    };
    //文件丟到div上
    oDiv.ondrop=function (ev){
        //獲取文件信息
        var oF=ev.dataTransfer.files[0];
        //讀取方式
        var reader=new FileReader(); 
        reader.onload=function (){
            //alert('讀取成功'); 
            oPic.src=reader.result;
        }; 
        reader.error=function (){
            alert('讀取失敗');
        }; 
        reader.onloadend=function (){
            alert('讀取完成');
        }; 
        reader.onloadstart=function (){
            alert('開始讀取');
        }; 
        //正在讀取
        reader.onprogress=function (ev){
            //當前讀取多少        ev.loaded
            //總大小           ev.total
            var scale=ev.loaded/ev.total; 
            if(scale>0.5){
                reader.abort();     //強制中斷
            } 
            oM.value=scale*100;
        }; 
        //讀取中斷
        reader.onabort=function (){
            alert('讀取中斷');
        };
        reader.readAsDataURL(oF);
        return false;
    };

    //阻止瀏覽器默認事件
    oDiv.ondragover=function (){
        return false;
    };
};
</script>
</head>
<body>
    <img src="" id="pic" width="100" height="100" alt="" />
    <div class="box">將文件拖到此區(qū)域</div>
    <meter id="m" max="100" value="0"></meter>
</body>
</html>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 當我們將拖拽文件懸停在相應區(qū)域后會進一步提示我們,放下鼠標,如圖: 下面我們將進一步的了解下此過程,并實現(xiàn)該效果。...
    諾奕閱讀 1,660評論 1 4
  • 標簽: 前端、交互 今天某產品經理蹭蹭蹭跑過來說,我們現(xiàn)在項目里對圖片、文件上傳的交互體驗不太好,可不可以實現(xiàn)拖拽...
    鄭小明閱讀 13,043評論 3 11
  • (個人觀點,歡迎拍磚)1.人生苦短,見一面就過去了三十年。珍惜吧!2.她過得比我好。我也很幸福。別瞎想了!3.都去...
    陳箴閱讀 246評論 1 2
  • 內容成為了新媒體運營必須要解決的問題。 形式上分為:文字、圖片(動圖和靜圖)、音頻和視頻,現(xiàn)在可以回想一下,基本上...
    清小主ID閱讀 392評論 0 0
  • 林夕焱閱讀 356評論 0 10

友情鏈接更多精彩內容