Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Electron拖拽下载能力

Electron拖拽下载能力

原创
作者头像
ranky
修改于 2022-01-24 07:55:06
修改于 2022-01-24 07:55:06
3.6K40
代码可运行
举报
文章被收录于专栏:Coding改变生活Coding改变生活
运行总次数:0
代码可运行

1. h5 dragDrop简单介绍

dragdrop 是H5标准的新特性之一,针对每个HTML元素,可以设置一个draggable属性,true表示这个元素能够拖拽,false反之。对于能拖拽的元素,其能够响应‘dragstart’,‘dragover’,‘dragenter’,‘dragleave’,‘dragend’事件,通过addEventListener可以获取相应的拖拽操作。每个事件提供event参数,在dragdrop场景下,多了dataTransfer属性,dataTransfer包含了拖拽相关的数据信息,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  dragEffect: ['copy','move','link','none'], 表示dropEffect将被初始化成期望的动作
  effectAllowed:['copy','copymove',....] , 用来指定拖动时被允许的效果
  files,拖拽包含的文件列表,如果不涉及文件,那么这个列表为空
  setDragImage(imgElement,x,y), 设置拖拽时的图片
  setData(type,data),  设置拖拽时的数据信息,type是MIME字符串,例如text/plain
  getData(type), 返回对应类型的数据信息

2. 拖拽下载的实现

拖拽下载的难点在于:从web页面拖拽出去后,无法感知拖拽的目标地址,因此无法实现下载。因此拖拽下载的问题可以简化为如何感知drop的目标路径。

Electron中使用的内核是Chrome,而chrome在DragDrop setData(dataTransfer 属性之一) 新增了 DownloadURL类型,其作用是将一个已知类型的元素(如图片,octet-stream等拖拽到desktop指定位置)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Chrome: dataTransfer.setData('DownloadURL',[mime]:[filename]:[uri])

我们则可以利用这个特性,拖拽行为产生时,我们通过setData在本地创建一个文件,然后通过electron 调用native模块来监控本地文件的创建,只要能监控到本地文件的创建,那么我们就可以实现下载。

更多内容请访问个人博客, 谢谢: https://pinkcle.com/electron/dragdrop.html

转载需注明出处,请联系作者,谢谢。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
4 条评论
热度
最新
您好,请问一下native监控部分的github开源项目有哪些?现在卡在这不会弄了。期待您的回复!谢谢!
您好,请问一下native监控部分的github开源项目有哪些?现在卡在这不会弄了。期待您的回复!谢谢!
33点赞举报
chokidar,可以看看这个,但是在mac上性能可能不太好。但就拖拽来说的话,mac用monitor支持,windows原生支持,使用时加载不同的逻辑性能最好。
chokidar,可以看看这个,但是在mac上性能可能不太好。但就拖拽来说的话,mac用monitor支持,windows原生支持,使用时加载不同的逻辑性能最好。
回复回复点赞举报
非常感谢您的帮助!之前根据您的文章思路已经成功实现了拖拽下载的功能,使用的是node-watch(与您说的这个差不多),万分感谢!
非常感谢您的帮助!之前根据您的文章思路已经成功实现了拖拽下载的功能,使用的是node-watch(与您说的这个差不多),万分感谢!
回复回复点赞举报
查看全部3条回复
推荐阅读
编辑精选文章
换一批
drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践
对列表进行拖动排序,尺寸改变。之前一般会使用jQuery-UI(interactjs更加纯粹)。其通过mousedown、mousemove、mouseup这三个事件来实现页面元素被鼠标拖拽的效果。vue-drag-resize vuedraggable等包也大抵如此:https://codepen.io/lujun-zhou/pen/LYybXNx。
周陆军博客
2023/05/07
6.7K1
JS魔法堂:IE5~9的Drag&Drop API
一、前言                                  《 HTML5魔法堂:全面理解Drag & Drop API》中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一下吧! 二、IE5~9与HTML5的DnD API的不同点                      1. IE5~9DnD API仅对 img元素 、 a[href]元素 和 input[type=text]/textarea元素 中被选中的文字有效,且不用设置 
^_^肥仔John
2018/01/18
1.2K0
html5鼠标拖动排序及resize实现方案分析及实践
对列表进行拖动排序,尺寸改变。之前一般会使用jQuery-UI。其通过mousedown、mousemove、mouseup这三个事件来实现页面元素被鼠标拖拽的效果。vue-drag-resize vuedraggable等包也大抵如此:https://codepen.io/lujun-zhou/pen/LYybXNx。
周陆军
2021/07/13
3.3K0
前端拾零02—H5拖放总结
前端拾零收录日常开发中一些很常见很基础的前端操作,省去每次google甚至答案错误的烦恼
CS逍遥剑仙
2018/08/17
4.3K1
前端拾零02—H5拖放总结
前端拾零02—H5原生拖放总结 【原创】
前端拾零收录日常开发中一些很常见很基础的前端操作,省去每次google甚至答案错误的烦恼
CS逍遥剑仙
2018/09/26
2K0
HTML5拖拽
图片自带拖拽功能 其他元素可设置draggable属性:draggable :true 拖拽元素(被拖拽的元素)事件 :
踏浪
2019/07/31
4K0
js原生拖拽的两种方法
1.onmousedown:鼠标按下事件 2.onmousemove:鼠标移动事件 3.onmouseup:鼠标抬起事件
全栈程序员站长
2022/09/14
4.5K0
js原生拖拽的两种方法
【HTML5】逐步分析如何实现拖放功能
拖放就是通过鼠标放在一个物体上,按住鼠标不放就可以把一个物体托动到另一个位置。其实我们平时一直都有接触,如图
@零一
2021/01/29
1.7K0
HTML5中的拖放功能
每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,2021加油!欢迎关注加我vx:xiaoda0423,欢迎点赞、收藏和评论
达达前端
2021/02/02
2.9K0
HTML5魔法堂:全面理解Drag & Drop API
一、前言                                      在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面目吧! 二、由于篇幅较长,特设目录一陀                       三、HTML4下实现简单拖拽 四、HTML5下实现简单拖拽 五、如何启用DnD效果 六、draggable属性详解 七、DnD的生命周期 八、DnD中最重要的数
^_^肥仔John
2018/01/18
4.1K0
HTML5魔法堂:全面理解Drag & Drop API
HTML5 进阶系列:拖放 API 实现拖放排序
本文介绍了如何使用 HTML5 的拖放 API 实现一个简单的拖放排序功能。首先介绍了如何为元素设置拖放 API,然后通过一个示例展示了如何实现拖放排序。在示例中,使用了 dataTransfer 对象来存储数据,并通过 setDragImage() 方法来设置拖放图标。最后,指出了在 IE 和 iOS 上需要使用特定的插件来支持拖放排序。
IMWeb前端团队
2017/12/29
2.1K0
html5 新特性
1.querySelector 返回文档中匹配指定css选择器的一个元素.     注意:uerySelector() 方法仅仅返回匹配指定选择器的第一个元素         如果你需要返回所有的元素,请使用 querySelectorAll()     语法:document.querySelector(CSS selectors) 2.getElementsByClassName() 方法返回文档中所有指定类名的元素集合     语法:document.getElementsByClassName
用户1197315
2018/01/22
1.9K0
JavaScript进阶之实现拖拽
如果不设置这段代码,会发生奇怪的现象,这是因为浏览器有自己的对图片和一些其他元素的拖放处理,会在我们拖放时自动运行,这与我们的拖放处理产生了冲突。
落落落洛克
2021/01/08
2.8K0
JavaScript进阶之实现拖拽
理论 | HTML5 进阶系列:拖放 API 实现拖放排序
HTML5 中提供了直接拖放的 API,极大的方便我们实现拖放效果,不需要去写一大堆的 js,只需要通过监听元素的拖放事件就能实现各种拖放功能。 想要拖放某个元素,必须设置该元素的 draggable 属性为 true,当该属性为 false 时,将不允许拖放。而 img 元素和 a 元素都默认设置了 draggable 属性为 true,可直接拖放,如果不想拖放这两个元素,把属性设为 false 即可。 拖放事件 拖放事件由不同的元素产生。一个元素被拖放,他可能会经过很多个元素上,最终到达想要放置的元素内
用户1097444
2022/06/29
1.4K0
理论 | HTML5 进阶系列:拖放 API 实现拖放排序
低代码设计器的自由布局拖动的实现原理
大家好,我们在这篇文章中来分享一下自由布局拖动的实现原理,实现一个设计器组件自由拖动的最简demo。
zz_jesse
2021/12/06
4.8K0
低代码设计器的自由布局拖动的实现原理
html5 drag API 实现列表拖拽
在拖拽过程中蓝色的线条是一个边框,利用拖拽事件添加class 并设置css就能有“响应”式的效果。
上山打老虎了
2022/06/14
1.2K0
html5 drag API 实现列表拖拽
HTML5 拖放(Drag和drop)
在工作当中,我们会常常见到像UC浏览器的新选项卡一样的可以自定义拖拽摆放效果。大的像淘宝的装修,QQ空间装扮等,小到一些游戏等等随处可见拖放的使用场景。
业余草
2019/01/21
1.3K0
HTML5 拖放(Drag和drop)
vue 拖拽hooks ts版
import { ref, } from 'vue' import { useBool } from './useBool' export interface AnyFunction { (...args: any): any } // 数据获取标识 const DATA_SIGN = 'DRAG' export function getDragDataSign() { return DATA_SIGN } /** * DOM 绑定拖拽事件 * @returns { { elems,
copy_left
2021/01/27
9830
彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽完整实现
  一个典型的拖拽操作是这样的:用户用鼠标选中一个可拖动的(draggable)元素,移动鼠标到一个可放置的(droppable)元素,然后释放鼠标。 在操作期间,会触发一些事件类型,有一些事件类型可能会被多次触发(比如drag 和 dragover 事件类型)。   这里涉及几个知识点:
从入门到进错门
2018/12/05
3.5K0
彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽完整实现
vue-grid-layout数据可视化图表面板优化过程所遇问题汇总
对于drag事件不熟悉的,请先阅读:《drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践》
周陆军博客
2023/01/25
1.7K0
相关推荐
drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验