JavaScript 模块模式和拖放 API

Posted

技术标签:

【中文标题】JavaScript 模块模式和拖放 API【英文标题】:JavaScript Module pattern and Drag and Drop API 【发布时间】:2016-06-13 17:51:24 【问题描述】:

我在 js 中有一个示例模块,该模块用于管理拖放文件上传。 该代码似乎适用于“dragenter”事件函数,但是当我删除文件时,“drop”事件应该调用被删除的函数,代码总是转发到文件路径。

这里是代码示例

var testModule = (function testBuilder()
    function call(evt) 
        evt.preventDefault();
        console.log('works');
    

    function dropped(evt) 
      evt.preventDefault();
      console.log('file dropped');
    

    var element = document.getElementById('testBlock');

    function init() 
      element.addEventListener('dragenter', call, false); 
      element.addEventListener('drop', dropped, false);
    

    publicAPI = 
        init: init
    ;

    return publicAPI;
)();

window.onload = function() 
    testModule.init();
;

这里有一个 jsbin https://jsbin.com/redixucate/edit?js,console,output

如果有人能弄清楚为什么它不断重定向文件路径,我将不胜感激。

【问题讨论】:

【参考方案1】:

使用 preventDefault 添加 'dragover' 事件,它应该可以工作。

在你的 init() 中:

element.addEventListener('dragover', over, false);

及以上功能:

function over(e)  
   e = e || window.event; 
   if(e.preventDefault) 
     e.preventDefault();
    

还为您的其他两个功能添加相同的预防措施..

见https://jsbin.com/xemovariwu/1/edit?js,console,output

另见this问题/答案。

【讨论】:

成功了。似乎我需要先取消拖动,然后才能取消放置。需要在文档中更多地关注我,看看他们是否涵盖了这一点。

以上是关于JavaScript 模块模式和拖放 API的主要内容,如果未能解决你的问题,请参考以下文章

VitualBox安装增强功能实现无缝模式和拖放功能(踩坑点记录汇总)

VitualBox安装增强功能实现无缝模式和拖放功能(踩坑点记录汇总)

VitualBox安装增强功能实现无缝模式和拖放功能(踩坑点记录汇总)

VitualBox安装增强功能实现无缝模式和拖放功能(踩坑点记录汇总)

一个轻量级且非常可配置的jQuery插件,用于使用ajax(同步)上传文件;包括对队列、进度跟踪和拖放的支持。

jQuery 可在两个容器之间拖放和拖放,并且可排序