javascript - HTML5 拖放 : display droppable elements in separate div (Java Script and Knockout JS)

标签 javascript jquery css html knockout.js

我是 Knockout 和 java 脚本的初学者。我的元素有问题。我正在使用 Knockout javascript 使用 HTML5 拖放 API。现在我需要在单独的 div 中显示所有掉落元素。我有一些代码显示可放置元素的名称。但我想要显示文件而不是文件名。下面是我的示例演示。

我可以使用 knockout 或纯 Java 脚本。 enter image description here

VIEW FIDDLE HERE

function ViewModel(){
    var self = this;
    this.dropZones = ko.observableArray([{
        'elements' : ko.observableArray([])  // just to see that the output is correct
    }]);

    this.dragover = function(e){
        console.log('dragOver');
        e.stopPropagation();
        e.preventDefault();
    }

    this.drop = function(e, data){
        console.log('drop');
        e.stopPropagation();
        e.preventDefault();
        var files = e.dataTransfer.files;
        for (var i = 0, f; f = files[i]; i++) {
            data.elements.push(f.name);
        }
        $('.drop_zone').css('background-color', '#ffffff');
    }

    this.dragenter = function(e, index){
        console.log('dragEnter');
        $('.drop_zone').eq(index).css('background-color', '#00ff00');
    }

    this.dragleave = function(e, index){
        console.log('end');
        $('.drop_zone').eq(index).css('background-color', '#ffffff');
    }
}

ko.applyBindings(new ViewModel());
.drop_zone {
    border: 2px dashed #bbb;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    padding: 25px;
    text-align: center;
    font: 20pt bold'Vollkorn';
    color: #bbb;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div class="col-md-12" data-bind="foreach: dropZones">
    <div class="drop_zone" data-bind="event:{
                dragover:   function(data, e){ $root.dragover(e);},
                drop:       function(data, e){ $root.drop(e, $data);},
                dragenter:  function(data, e){ $root.dragenter(e, $index());},
                dragleave:  function(data, e){ $root.dragleave(e, $index());}
            }">Drop files here</div>
    <ul data-bind="foreach: elements" style="height: 100px">
        <li data-bind="text: $data"></li>
    </ul>
</div>

最佳答案

这是一个如何从文件中获取图像并将其附加到 .preview 元素的示例:

function readImage(file) {

    var reader = new FileReader();
    var image  = new Image();

    reader.readAsDataURL(file);  
    reader.onload = function(_file) {
        image.src    = _file.target.result;            
        image.onload = function() {
          $(".preview").append('<img src="' + this.src + '"/>' + '<p>' + this.name +'</p>');
        };     
    };

}

And a fiddle . HTH.

关于javascript - HTML5 拖放 : display droppable elements in separate div (Java Script and Knockout JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350845/

相关文章:

javascript - 在javascript计时器中更改字体颜色

javascript - 在 Mongo 数组内部搜索

javascript - jQuery 多选显示/隐藏

javascript - 意外的 token ,但不确定原因

javascript - 单击按钮时删除行

javascript - 如何将数组传递给ajax post?

javascript - .NET Core 查看页面的值到 JavaScript 数组

html - 制作特定宽度列的 HTML 表格

javascript - CSS:将 Three.js 放在圆形 div 中?

javascript - 如何在 SPA 中处理角色/权限(Laravel+Vue)