记录-做一个文件拖动到文件夹的效果

这篇具有很好参考价值的文章主要介绍了记录-做一个文件拖动到文件夹的效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录-做一个文件拖动到文件夹的效果

在我的电脑中,回想一下我们想要把一个文件拖动到另一个文件夹是什么样子的呢

1:鼠标抓起文件
2:拖动文件到文件夹上方
3:文件夹高亮,表示到达指定位置
4:松开鼠标将文件夹放入文件

记录-做一个文件拖动到文件夹的效果

下面就来一步步实现它吧👇

一:让我们的元素可拖动

方式一: draggable="true"

`<div draggable="true" class="dragdiv">拖动我</div>`

方式二:-webkit-user-drag: element;

  .dragdiv {

    width: 100px;

    height: 100px;

    background-color: bisque;

    -webkit-user-drag: element;

    }
    

效果

记录-做一个文件拖动到文件夹的效果

二:让文件夹有高亮效果

给文件夹添加伪类?

🙅如果你直接给文件夹设置伪类:hover,会发现当拖动元素时,文件夹的:hover是不会触发的

记录-做一个文件拖动到文件夹的效果

🧘这是因为在拖拽元素时,拖拽操作和悬停操作是不同的事件类型,浏览器在处理拖拽操作时,会优先处理拖拽事件,而不会触发悬停事件。拖拽操作是通过鼠标点击和拖拽来触发的,而悬停事件是在鼠标指针停留在一个元素上时触发的。

所以我们就来对拖拽操作的事件类型做功课吧🫱

  • dragstart:拖拽开始
  • dragend:拖拽结束
  • dragover:拖拽的元素在可放置区域内移动时触发,即鼠标指针在可放置区域内移动时持续触发
  • dragenter:拖拽的元素首次进入可放置区域时触发
  • dragleave:拖拽的元素离开可放置区域时触发
  • drop:当在可放置区域时,松开鼠标放置元素时触发
    什么是可放置元素?
    当你给元素设置事件:dragover、dragenter、dragleave、drop的时候  
    它就变成了可放置元素,特点是移到上面有绿色的➕号

拖动高亮实现

1:我们给files文件夹添加两个响应事件:dragoverdragleave

ps: 这里用dragover事件而不用dragenter事件是为了后续能够成功触发drop事件
2:当拖动元素进入可放置区域时,动态的给files添加类,离开时则移除类
// 显示高亮类
.fileshover {
    background-color: rgba(0, 255, 255, 0.979);
}
// 添加dragover事件处理程序,在可放置区域触发

files.addEventListener('dragover', (event) => {

    event.target.classList.add('fileshover');

});

// 添加dragleave事件处理程序,离开可放置区域触发

files.addEventListener('dragleave', (event) => {

    event.target.classList.remove('fileshover');

});

🥳 恭喜你成功实现了移动到元素高亮的效果了

记录-做一个文件拖动到文件夹的效果

三:文件信息传递

文件拖过去,是为了切换文件夹,在这里你可能会进行一些异步的操作,比如请求后端更换文件在数据库中的路径等。我们的需求多种多样,但是归根到底都是获取到文件的数据,并传递到文件夹中

DataTransfer对象

DragEvent.dataTransfer: 在拖放交互期间传输的数据

我们主要使用它的两个方法:

  • DataTransfer.setData(format, data):就是设置键值对,把我们要传的数据添加到drag object
  • DataTransfer.getData(format):根据键获取保存的数据

知道了这两个方法,相信你一定就有实现思路了 👊

拖拽开始 --> setData添加数据 --> 进入可放置区域 --> 放置时getData获取数据 --> 完成

1:给文件设置dragstart事件

// 开始拖拽事件

draggable.addEventListener('dragstart', (event) => {

    const data = event.target.innerText;
    
    event.dataTransfer.setData('name', data); //添加数据

})
2:在dragover事件中用event.preventDefault()阻止默认行为,允许拖拽元素放置到该元素上,否则无法触发drop事件
// 添加dragover事件处理程序

files.addEventListener('dragover', (event) => {

    event.target.classList.add('fileshover');

    event.preventDefault(); //新增

});

3:给文件夹设置放置事件drop

// 添加drop事件处理程序

files.addEventListener('drop', (event) => {

    const data = event.dataTransfer.getData('name'); // 获取文件的数据

    const text = document.createTextNode(data);

    files.appendChild(text);
    
    event.target.classList.remove('fileshover'); // 记得放置后也要移除类

});

实现效果:

记录-做一个文件拖动到文件夹的效果

四:完整代码:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<style>

.dragdiv {

width: 100px;

height: 100px;

background-color: bisque;

-webkit-user-drag: element;

}

.files {

width: 200px;

height: 200px;

background-color: rgba(0, 255, 255, 0.376);

margin-top: 100px;

}

.fileshover {

background-color: rgba(0, 255, 255, 0.979);

}

</style>

</head>

<body>

<div draggable="true" class="dragdiv">我是文件1</div>

<div class="files">

<p>文件夹</p>

拖动文件名称:

</div>

<script>

const draggable = document.querySelector('.dragdiv');

const files = document.querySelector('.files');

// 开始拖拽事件

draggable.addEventListener('dragstart', (event) => {

    const data = event.target.innerText;

    event.dataTransfer.setData('name', data);

})

// 添加dragover事件处理程序

files.addEventListener('dragover', (event) => {

    event.target.classList.add('fileshover')

    event.preventDefault()

});

// 添加dragleave事件处理程序

files.addEventListener('dragleave', (event) => {

    event.target.classList.remove('fileshover')

});

// 添加drop事件处理程序

files.addEventListener('drop', (event) => {

    const data = event.dataTransfer.getData('name')

    const text = document.createTextNode(data)

    files.appendChild(text);

    event.target.classList.remove('fileshover')


});

</script>

</body>

</html>

本文转载于:

https://juejin.cn/post/7210256070299549755

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录-做一个文件拖动到文件夹的效果文章来源地址https://www.toymoban.com/news/detail-428175.html

到了这里,关于记录-做一个文件拖动到文件夹的效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何查看某个文件夹的git修改记录

    要查看某个文件夹在Git中的修改记录,你可以使用 git log 命令,并指定文件夹的路径。下面是具体的步骤: 打开命令行或终端。 切换到你的Git仓库的根目录。 执行以下命令,其中 path/to/folder 是你想要查看修改记录的文件夹的相对路径: 这个命令会显示该文件夹及其内部文

    2024年03月15日
    浏览(71)
  • 在任何文件夹下打开jupyter 内核都是同一个文件夹

     我在 D:anaconda实例代码 下打开jupyter notebook  无论我在那个文件下打开jupyter 都是同一个文件这是因为你可能在jupyter notebook 的那个配置文件中设置固定的路径 假如你的.py 文件在D:anaconda实例代码 下 你想通过jupyter notebook 运行它很简单  上传到jupyter notebook本地      如何运

    2024年02月12日
    浏览(68)
  • QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件

    这个图片查看器功能很多,是我花了不少心思,不断优化,不断添加功能的成果: 1.能打开并显示所有常用图片格式文件,显示鼠标位置像素坐标及RGB值 2.能缩放,拖动图片,可以以鼠标为中心滚动滚轮进行缩放 3.右击可弹出菜单栏,菜单包括:适应宽度,适应窗口,原图大

    2024年02月10日
    浏览(63)
  • linux怎么复制文件到另一个文件夹

    1、linux怎么复制文件到另一个文件夹 2、Linux怎么复制文件进入文件系统中? 3、在Linux系统中,要将文件复制到另一个目录中,为防止意外覆盖相同文件名... 4、linux下怎样复制文件并且重命名文件? 可以使用cp命令来实现文件复制。例如,如果要将文件filetxt复制到文件夹folder2中,

    2024年02月10日
    浏览(50)
  • 文件管理秘籍:如何实现批量移动,每个文件夹仅存一个文件

    在日常的生活和工作中,文件管理是一项常见的任务。有时候会遇到要把多个文件移动到同一个文件夹,或者要每个文件夹中只包含一个文件的情况。下面一起来看云炫文件管理器如何批量移动文件,有效地管理的文件。 详情页图片被分类移动文件夹中的前面截图展示。 每

    2024年01月16日
    浏览(66)
  • linux对一个文件夹中的所有文件重命名

    在Linux中,你可以使用 mv 命令对一个文件夹下的所有文件进行重命名。下面是几种常见的用法: 方法1: 批量添加前缀或后缀: 方法2: 使用正则表达式重命名 例如,假设你有一个文件夹 /home/user/documents ,其中包含以下文件: file1.txt file2.txt file3.txt 如果你想给这些文件添加前

    2024年02月09日
    浏览(36)
  • Github | 如何在Github上只下载一个文件或文件夹!?

    用过 github 的小伙伴们都知道,我们可以通过 git clone 命令来下载 整个项目 到本地。😘 但我最近在使用 github 的时候遇到一个 问题 ,就是我 只 想下载这 一个文件 ,其他的我都 不想要 。🫠 解决方案 大家往下看吧:👇 1️⃣ 首先我们 点开 这个文件,点击 raw 。🤜 2️⃣

    2024年01月15日
    浏览(52)
  • python如何批量读取一个文件夹里的所以excel文件

    在数据分析工作中,尝尝需要处理多个不同月的excel文件,但无奈与excel文件的局限性,不能同时处理多个月的excel数据,所以python的批量读取excel文件就显得十分重要,下面我将展示如何用python将每个月度的excel数据进行读取并汇总处理和输出。 最好excel的文件名就是按照日期

    2024年02月16日
    浏览(63)
  • 如何用java给一个文件夹打成压缩包?

    上面的程序可以将 folderPath 指向的文件夹中所有文件和子文件夹打包成 zipFilePath 所指向的压缩文件。您只需要将文件夹路径和压缩文件路径替换为实际的值,然后在 Java 环境下运行该程序即可。 请注意,上面的代码块中的 PackageName 是您自己所定义的包名。如果没有将此类文

    2024年02月10日
    浏览(47)
  • Linux下复制一个大于1T的文件夹命令

    用netcat通过socket把流传送出去就可以搞定了。 需要发送文件的机器: 接收的机器: 文件夹的话前面弄个管道就行了: 发送的机器: 接收的机器: rsync mv cp

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包