html5 – 拖放文件到标准html文件输入

前端之家收集整理的这篇文章主要介绍了html5 – 拖放文件到标准html文件输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这些天,我们可以拖&将文件放到一个特殊的容器中,并用XHR 2上传它们。与实时进度条等。非常酷的东西。 Example here.

但有时我们不想那么酷。我想要的是拖动&将文件(一次许多)放入标准HTML文件输入:< input type = file multiple&gt ;. 那可能吗?有什么方法来填充文件输入与正确的文件名(?)从文件下拉? (完整文件路径不可用于文件系统安全原因。) 为什么?因为我想提交一个正常的表格。适用于所有浏览器和所有设备。拖动&下降只是渐进增强,以增强&简化UX。具有标准文件输入(多属性)的标准格式将存在。我想添加HTML5增强功能。 编辑
我知道在一些浏览器,你有时(几乎总是)将文件放入文件输入本身。我知道Chrome通常这样做,但有时它失败,然后加载当前页面中的文件(如果你填写一个表单,一个大失败)。我想愚弄 – browserproof它。

解决方法

我为此做了一个解决方案。
$(function () {
    var dropZoneId = "drop-zone";
    var buttonId = "clickHere";
    var mouSEOverClass = "mouse-over";

    var dropZone = $("#" + dropZoneId);
    var ooleft = dropZone.offset().left;
    var ooright = dropZone.outerWidth() + ooleft;
    var ootop = dropZone.offset().top;
    var oobottom = dropZone.outerHeight() + ootop;
    var inputFile = dropZone.find("input");
    document.getElementById(dropZoneId).addEventListener("dragover",function (e) {
        e.preventDefault();
        e.stopPropagation();
        dropZone.addClass(mouSEOverClass);
        var x = e.pageX;
        var y = e.pageY;

        if (!(x < ooleft || x > ooright || y < ootop || y > oobottom)) {
            inputFile.offset({ top: y - 15,left: x - 100 });
        } else {
            inputFile.offset({ top: -400,left: -400 });
        }

    },true);

    if (buttonId != "") {
        var clickZone = $("#" + buttonId);

        var oleft = clickZone.offset().left;
        var oright = clickZone.outerWidth() + oleft;
        var otop = clickZone.offset().top;
        var obottom = clickZone.outerHeight() + otop;

        $("#" + buttonId).mousemove(function (e) {
            var x = e.pageX;
            var y = e.pageY;
            if (!(x < oleft || x > oright || y < otop || y > obottom)) {
                inputFile.offset({ top: y - 15,left: x - 160 });
            } else {
                inputFile.offset({ top: -400,left: -400 });
            }
        });
    }

    document.getElementById(dropZoneId).addEventListener("drop",function (e) {
        $("#" + dropZoneId).removeClass(mouSEOverClass);
    },true);

})
#drop-zone {
    /*Sort of important*/
    width: 300px;
    /*Sort of important*/
    height: 200px;
    position:absolute;
    left:50%;
    top:100px;
    margin-left:-150px;
    border: 2px dashed rgba(0,.3);
    border-radius: 20px;
    font-family: Arial;
    text-align: center;
    position: relative;
    line-height: 180px;
    font-size: 20px;
    color: rgba(0,.3);
}

    #drop-zone input {
        /*Important*/
        position: absolute;
        /*Important*/
        cursor: pointer;
        left: 0px;
        top: 0px;
        /*Important This is only comment out for demonstration purposes.
        opacity:0; */
    }

    /*Important*/
    #drop-zone.mouse-over {
        border: 2px dashed rgba(0,.5);
        color: rgba(0,.5);
    }


/*If you dont want the button*/
#clickHere {
    position: absolute;
    cursor: pointer;
    left: 50%;
    top: 50%;
    margin-left: -50px;
    margin-top: 20px;
    line-height: 26px;
    color: white;
    font-size: 12px;
    width: 100px;
    height: 26px;
    border-radius: 4px;
    background-color: #3b85c3;

}

    #clickHere:hover {
        background-color: #4499DD;

    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="drop-zone">
    Drop files here...
    <div id="clickHere">
        or click here..
        <input type="file" name="file" id="file" />
    </div>
</div>

方法的拖放功能仅适用于Chrome,Firefox和Safari。
(不知道它是否与IE10工作),但对于其他浏览器,“或点击这里”按钮工作正常。

当在区域上拖动文件时,输入字段只需跟随鼠标,我也添加了一个按钮。

取消注释不透明度:0;文件输入只有可见,所以你可以看到发生了什么。

猜你在找的HTML5相关文章