将html元素拖到电子窗口外以复制本地文件?

Pwd*_*wdr 4 javascript macos drag-and-drop node.js electron

我打算用电子实现音乐播放器。它将列出用户硬盘驱动器中的音乐。
是否可以定义拖放行为,以便我可以将 html 元素(例如,<span>Artist – Title</span>在电子窗口之外)拖到用户的桌面上以复制实际文件?

文件存储在这里:~/music/Artist-Title.mp3.

span从我的电子窗口拖放到桌面上时,应该制作一个副本:~/Desktop/Artist-Title.mp3

Pwd*_*wdr 5

工作示例:

放入main.js并复制一个拖动时要显示的图标 ( yourAppDir/img/icon/folder.png):

const {ipcMain} = require('electron')

ipcMain.on('ondragstart', (event, filePath) => {
  event.sender.startDrag({
    file: filePath,
    icon: 'img/icon/folder.png'
  })
})
Run Code Online (Sandbox Code Playgroud)

放入renderer.js,并设置要删除的文件的路径:

var ipcRenderer = require('electron').ipcRenderer

document.getElementById('drag').ondragstart = (event) => {
    event.preventDefault()
    ipcRenderer.send('ondragstart', '/Users/tim/dev/test/elektron-drag-out-test/img/icon/folder.png')
  }
Run Code Online (Sandbox Code Playgroud)

在 的 body 标签内创建可拖动元素index.html

...
<body>
  ...
  <a href="#" id="drag" class="draggable">drag item</a>
</body>
...
Run Code Online (Sandbox Code Playgroud)

我还创建了一个拖入/拖出的要点

另一个有用的资源:Electron – 添加webContents.startDrag(item)API