首页 > 其他分享 >手写一个拖拽文件功能

手写一个拖拽文件功能

时间:2024-05-31 20:30:01浏览次数:15  
标签:files 文件 const 拖动 冒泡 手写 type 拖拽 拖放

前言

想法:业务开发可能会用到第三方的组件或库,但如果要你手写一个拖拽文件功能你能搞定吗

实现

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .upload-wrap {
        margin: 100px auto;
        border: 1px dashed #ccc;
        width: 400px;
        height: 400px;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 20px;
        font-size: 20px;
      }
      .highlight {
        background-color: pink;
      }
    </style>
  </head>
  <body>
    <div
      class="upload-wrap"
      ondrop="handleDrop(event)"
      ondragenter="handleDrop(event)"
      ondragover="handleDrop(event)"
      ondragleave="handleDrop(event)"
      onclick="handleClick()"
    >
      <input
        type="file"
        style="display: none"
        multiple
        accept="*"
        id="file"
        onchange="handleChange(event)"
      />
      <div class="upload-title">点击上传文件</div>
    </div>
    <script>
      const handleDrop = (e) => {
        e.preventDefault();
        const files = e.dataTransfer.files;
        const type = e.type;
        if (type === "dragenter" || type === "dragover") {
          e.target.classList.add("highlight");
        } else {
          e.target.classList.remove("highlight");
        }

        if (!files[0]) return;
        console.log(files);
      };
      const handleClick = () => {
        const fileInput = document.getElementById("file");
        fileInput.click();
      };
      const handleChange = (event) => {
        console.log(event.target.files);
      };
    </script>
  </body>
</html>

API

 dragenter

  • 当拖动的项目进入拖放目标区域时触发,会冒泡

dragover

  • 当拖动的项目在拖放目标区域上悬停时持续触发,会冒泡
  • 默认情况下,浏览器不会允许放置项目。通过阻止默认行为可以标记为允许放置

dragleave

  • 当拖动的项目离开拖放目标区域时触发,会冒泡

drop

  • 当拖动的项目放下到拖放目标区域时触发,会冒泡
  • 默认情况下,浏览器可能会打开文件或执行其他默认操作。通过阻止默认行为可以处理自定义的放下操作

最后

如果要封装成拖拽文件上传组件,可增添限制文件类型以及文件大小,显示上传进度条等功能

标签:files,文件,const,拖动,冒泡,手写,type,拖拽,拖放
From: https://blog.csdn.net/hometowna/article/details/139336783

相关文章

  • 【C语言】文件操作全解速览
    文件操作目录文件操作1.文件的打开和关闭fopen()/fclose()2.文件读写位置相关feof()ftell()fseek()rewind()3.文件内容读取fgetc()/fputc()fgets()/fputs()fprintf()/fscanf()fread()/fwrite()fflush()4.其他stat()/fstat()remove()rename()最后文件操作 ......
  • linux 文件属性被替换修改查询并修改
    系统服务发布本来非常正常,但是今天不知道为什么,打包发布异常,删除文件目录的权限都没有。上网搜索后,最终找到文件属性被修改,导致无法删除。通过lsattr命令查询文件的属性,如果出现,其中----i-----------的文件是属性被修改的。查找文件时,注意,隐藏文件也要查询。[root@localhost......
  • 章节测验(文件)
    第1关:第一题任务描述本关任务:根据编程要求,完成任务。编程要求打开右侧代码文件窗口,在Begin至End区域补充代码,完成任务。在本地目录/data/bigfiles中有两个文件a.txt与b.txt,现在需要对这两个文件进行合并,并剔除其中重复的内容,将合并结果存储到/root/result/目......
  • 找出长时序遥感影像的缺失日期并用像素均为0的栅格填充缺失日期的文件
      本文介绍基于C++语言的GDAL库,基于一个存储大量遥感影像的文件夹,依据每一景遥感影像的文件名中表示日期的那个字段,找出这些遥感影像中缺失的成像日期,并新生成多个像元值全部为0的栅格文件,作为这些缺失日期当日的遥感影像文件的方法。  首先,我们来看一下本文需要实现的需求。......
  • mapreduce的多种格式文件输出-自定义OutputFormat
    /***@description:mapreduce多种格式的文件输出方式*/publicclassMultipleTypeOutputFormat<K,V>extendsFileOutputFormat<K,V>{privatestaticfinalStringORCEXTENSION=".orc";privatestaticfinalStringCSVEXTENSION=".c......
  • 向GitHub远程仓库同步文件使用经验【2】
    新手流畅一顿操作由于没搞懂CSDN的更新文档策略,只能把新写的内容作为新文章发布了。前一篇文章在这将本地仓库与远程仓库同步当本地仓库没修改,但远程仓库修改了,这时可以吧远程仓库同步到本地仓库===方法一===gitfetch //将本地仓库中的远程分支更新成了远程仓库相应......
  • 手写HTML字符串解析成对应的 AST语法树
    先看效果展示如下:HTML模版转成ast语法树后在学习之前,我们需要了解这么一个问题,为什么要将HTML字符串解析成对应的AST语法树。为什么?语法分析:HTML字符串是一种标记语言,其中包含了大量的标签、属性、文本等内容。通过解析HTML字符串,可以将其转换为更易于操作和理解的......
  • 开机自动挂载配置文件 --- /etc/fstab
    /sbin/init执行rcS指定的脚本,脚本内包含挂载操作,会读取/etc/fstab实现开机挂载 /etc/fstab文件格式如下:<filesystem><mountpoint><type><options><dump><pass><filesystem>:要挂载的特殊设备,也可以是块设备,比如/dev/sda等<mountpoint&......
  • java数据list写入文件
    /***生成数据文件**@paramdata数据*@paramfileName文件名*@return数据文件对象*@throwsIOException*/privateFilegenerateDataFile(List<List<String>>data,StringfileName)throwsIOException{......
  • 反单引号在vue文件的alert中怎么换行
    在alert里面将dangerouslyUseHTMLString开启设置为true,这样子就可以使用html中的来进行换行了但是,message属性虽然支持传入HTML片段,但是在网站上动态渲染任意HTML是非常危险的,因为容易导致XSS攻击。因此在dangerouslyUseHTMLString打开的情况下,请确保message的内容......