nw.js如何处理拖放操作

简介:

nw.js如何处理拖放操作

 

其实拖放(drag-drop)操作是Html5的功能,不是nw.js的内置API,那么我们采用Html5应用一般的处理方法就可以了。

首先我们看一下一个正常的页面,直接拖放一个文件过来的效果。

页面代码:

<html>

<head>

    <title>拖放测试</title>

</head>

<bodystyle="background-color:rgba(0,0,0,0);">

    <pid="output">

       <h1>拖放测试</h1>

        </p>

    <script>

    

    </script>

</body>

</html>

如下图:

下面我们拖拽一张图片过来。

nw.js会按照chrome浏览器默认处理文件的方式来处理拖放的文件,能显示的会直接显示,不能显示的会变成资源下载。

这肯定不是桌面应用想要的效果,那么Html5是如何处理拖放的呢?

1.1 如何禁用拖放操作

Html元素上,我们可以通过ondragoverondrop两个事件来处理文件拖放,那么和阻止其他事件行为的方法一样,我们只需要进行监听并阻止冒泡就可以了。

在页面中添加下面的代码:

  window.ondragover=function(e) { e.preventDefault(); returnfalse };

        window.ondrop=function(e) { e.preventDefault(); returnfalse };

再次测试。

 

然后,然后就没有然后了。程序不会做任何反应。

1.2 如何获取拖放的文件信息并处理

我们的应用如果是可以处理某种类型的文件的话,我们是希望程序以自己的方式来处理文件的,比如演示文档的编辑工具AxeSlide,如果直接拖放多媒体文件就会变成画布内的编译元素,如果是dbk文件就是打开文件进行全新的编辑。

如果是Dbk文件,就是下面的效果:

上面演示的就是针对不同的文件做不同的处理。这里面涉及到的知识点,一个是获取文件的信息,主要是路径;第二是的文件的读取、保存和进一步处理。

下面我们修改一下上面的代码:

<html>

<head>

    <title>拖放测试 </title>

    <style>

        #holder {

            border10pxdashed#ccc;

            width300px;

            height300px;

            margin20pxauto;

        }

 

            #holder.hover {

                border10pxdashed#333;

            }

    </style>

</head>

<bodystyle="background-color:rgba(0,0,0,0);">

    <pid="output">

       <h1>拖放测试</h1>

        <h5>

        </h5>

        </p>

    <divid="holder"></div>

    <script>

        window.ondragover = function (e) { e.preventDefault(); returnfalse };

        window.ondrop = function (e) { e.preventDefault(); returnfalse };

        var holder = document.getElementById('holder');

        holder.ondragover = function () { this.className = 'hover'returnfalse; };

        holder.ondragleave = function () { this.className = ''returnfalse; };

        var h5 = document.querySelector("h5");

        holder.ondrop = function (e) {

            e.preventDefault();

 

            for (var i = 0; i < e.dataTransfer.files.length; ++i) {

                h5.textContent+=e.dataTransfer.files[i].path;

            }

            returnfalse;

        };

 

    </script>

</body>

</html>

效果如下:

我们新建了一个div来处理文件拖放。

  holder.ondrop = function (e) {

            e.preventDefault();

 

            for (var i = 0; i < e.dataTransfer.files.length; ++i) {

                h5.textContent+=e.dataTransfer.files[i].path;

            }

            returnfalse;

        };

上面代码通过回调中的dataTransfer.files来获取文件信息。

接下来我们可以通过nodejs的文件操作来通过路径读取文件了,这里就不进一步展开了。不过通过HtmlFileReader对象也是可以获取文件数据的,例如:

holder.ondrop=function (e) {

  e.preventDefault();

 

  var file = e.dataTransfer.files[0],

      reader =newFileReader();

  reader.onload=function (event) {

    console.log(event.target);

  };

  console.log(file);

  reader.readAsDataURL(file);

 

  returnfalse;

};

ok,关于文件拖放就给大家介绍到这里,有问题可以留言。nw.jselectron交流群 313717550

 



所有文章会在本人的博客 玄魂 - 博客园 和个人公众号 “xuanhun521”   ‘’微博  ,知乎专栏 http://zhuanlan.zhihu.com/xuanhun 进行同步,欢迎关注。

 


本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/p/5132974.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
存储 前端开发 JavaScript
使用JavaScript实现拖放功能
使用JavaScript实现拖放功能
|
JavaScript 前端开发
|
JavaScript 前端开发 测试技术
|
Web App开发 移动开发 JavaScript
Table Dragger - 简单的 JS 拖放排序表格插件
  Table Dragger 是一个极简的实现拖放排序的表格插件,纯 JavaScript 库,不依赖 jQuery。用于构建操作方便的拖放排序功能,超级容易设置,有平滑的动画,支持触摸事件。        在线演示      免费下载   您可能感兴趣的相关文章 网站开发中很...
3262 0
|
Web App开发 JavaScript 前端开发
|
移动开发 JavaScript 前端开发
Sortable – 简单灵活的 JavaScript 拖放排序插件
  当需要在网站中添加拖放排序功能的时候,jQuery UI 的排序组件可能是最流行的解决方案。今天给大家介绍另一款简单灵活的 JavaScript 拖放排序插件——Sortable,它使用 HTML5 原生的拖放 API 来实现拖放,并支持在触屏设备上使用。
1043 0
|
JavaScript Android开发 Web App开发
《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》销售排名第4,发篇ExtJS的文章(拖放树结点)庆祝下
    《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》一书上架短短几天,就进入了互动网计算机类销售总排名第4的好成绩(见下图)。
1189 0
|
2月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
43 1
JavaScript中的原型 保姆级文章一文搞懂
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
127 2
|
2月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
27 0