zoukankan      html  css  js  c++  java
  • HTML5编程实战之三:图片文本(txt)拖拽预览

    本文主要用到的知识

      HTML5中的File及FileReader接口

      相关资料:

        Using files from web applications

        File API

    源码

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>HTML5文件拖拽预览Demo</title>
        <style type="text/css">
            h1{
                padding:0px;
                margin:0px;
            }
            div#show{
                border: 1px solid #ccc; 
                width: 400px; 
                height: 300px;
                display: -moz-box;
                display: -webkit-box;
                -moz-box-align: center;
                -webkit-box-align: center;
                -moz-box-pack: center;
                -webkit-box-pack: center;
                resize:both;
                overflow:auto;
            }
            div[id^=show]:hover{
                border: 1px solid #333; 
            }
            div#main{
                width:100%;
            }
            div#successLabel
            {
                color:Red;
            }
            div#content
            {
                display:none;
            }
        </style>
        <script type="text/javascript">
            function init() 
            {
                var dest = document.getElementById("show");
                dest.addEventListener("dragover", function(ev) 
                {
                    ev.stopPropagation();
                    ev.preventDefault();
                }, false);
            
                dest.addEventListener("dragend", function(ev) 
                {
                    ev.stopPropagation();
                    ev.preventDefault();
                }, false);
            
                dest.addEventListener("drop", function (ev) {
                    ev.stopPropagation();
                    ev.preventDefault();
            
                    var file = ev.dataTransfer.files[0];
                    var reader = new FileReader();
            
                    if (file.type.substr(0, 5) == "image") {
                        reader.onload = function (event) {
                            dest.style.background = 'url(' + event.target.result + ') no-repeat center';
                            dest.innerHTML = "";
                        };
                        reader.readAsDataURL(file);
                    }
                    else if (file.type.substr(0, 4) == "text") {
            
                        reader.readAsText(file);
                        reader.onload = function (f) {
                            dest.innerHTML = "<pre>" + this.result + "</pre>";
                            dest.style.background = "white";
                        }
                    }
                    else {
                        dest.innerHTML = "暂不支持此类文件的预览";
                        dest.style.background = "white";
                    }
                }, false);
            }
            
            //设置页面属性,不执行默认处理(拒绝被拖放)
            document.ondragover = function(e){e.preventDefault();};
            document.ondrop = function(e){e.preventDefault();}
            
            window.onload=init;
        </script>
    </head>
    <body>
        <h1>HTML5文件拖拽预览Demo</h1>
        <div id="show">
        文件预览区,仅限图片和txt文件
        </div>
    </body>
    </html>

    主要代码解析

      样式部分就不说了,很简单

      dragover、dragend、drop是三个与拖拽相关的事件。

      dragover表示被拖放的元素正在本元素范围内移动

      dragend表示拖放操作结束

      drop表示有其他元素被拖放到了本元素中

      代码中先分别监听这几个事件,取消浏览器默认的行为,然后利用HTML5中的File及FileReader判断读取拖拽的文件。

      如果文件是图片,就用FileReader的readAsDataURL方法将图片读取为DataURL字符串存入内存,并显示在DIV中。

      如果文件是txt文本,就用FileReader的readAsText方法将文件读取为文本(默认为UTF-8格式),放到内存中,然后显示在DIV中。

  • 相关阅读:
    C#常用功能和通用模块开发资料
    常用工具&网址
    Web前端开发、常见问题及解决方法
    MQTT专题(Spring boot + maven整合MQTT、EMQ搭建MQTT服务器和客户端模拟工具)
    Spring常用注解
    ActiveMQ专题(服务器搭建、配置和项目应用)
    HTTP RESTful服务开发 spring boot+Maven +Swagger
    设计模式-命令模式
    设计模式-责任链模式
    设计模式—建造者模式(Builder)
  • 原文地址:https://www.cnblogs.com/jscode/p/2467149.html
Copyright © 2011-2022 走看看