search
HomeWeb Front-endH5 TutorialJS HTML5 drag and drop upload image preview

1. File API: (File API)

Each file selected by the file type form control is a file object, and the FileList object is a collection list of these file objects, representing all the selected files. The file object inherits from the Blob object, which represents binary raw data and provides the slice method to access the raw data block inside the bytes. In short, the file object contains the FlieList object, and the file object inherits from the Blob object!

Relevant attribute relationships of each object:

JS HTML5拖拽上传图片预览

FileReader interface:
As can be seen from the figure: HTML5 also provides the FileReader interface: used to read files into memory and read data in the file.

var reader=new FileReader();

This interface has a total of four methods and six events:
•readAsBinaryString(file): Read the file as binary
•readAsDataURL(file): Read file DataURL
•readAsText(file,[encoding]): Read the file as text
•about(none): Interrupt file reading
-------------------------------------------------- ----------------------------------
•onabort: Triggered when reading a file is interrupted
•onerror: Triggered when an error occurs while reading the file
•onloadstart: Triggered when reading the file starts
•onprogress: always triggered when reading a file
•onload: Triggered when file reading is successful
•onloadend: Triggered when reading the file ends (triggered on both success and failure)
The above event parameter e has e.target.result or this.result pointing to the read result!

2. Drag and drop API:

Drag and drop attributes: Set the dragable attribute of the element that needs to be dragged and dropped to true (dragable="true")! The img element and a element can be dragged and dropped by default.

Drag and drop events: (divided into drag and drop element events and target element events)

Drag and drop element events:
•dragstart: Triggered before dragging
•drag, triggers continuously before dragging and after dragging
•dragend, triggered when dragging ends
Target element event:
•dragenter, trigger when entering the target element
•dragover, triggered continuously between entering and leaving the target
•dragleave, triggered when leaving the target element
•drop, triggered by releasing the mouse on the target element
but! It should be noted that the default behavior (refuse to be dragged and dropped) must be prevented in the dragover and drop events of the target element, otherwise drag and drop cannot be implemented!

-------------------------------------------------- ----------------------------------

DataTransfer object: specifically used to store data to be carried during drag and drop, and can be set as the dataTransfer attribute of the drag and drop event.

3 attributes:
•effectAllowed: Set cursor style (none, copy, copyLink, copyMove, link, linkMove, move, all and uninitialized)
•effectAllowed: Set the visual effect of drag and drop operations
•Types: Type of stored data, pseudo array of strings
•files: Get external dragged files and return a fileList. There is a type attribute under filesList to return the file type
4 methods:
•setData(): Set data key and value (must be strings)
•getData(): Get data and get the corresponding value
based on the key value •clearData(): Clear the data stored in the DataTransfer object
•setDragImage(imageUrl,log x,long y): Use the img element to set the drag and drop icon

//Example:
target.addEventListener('dragstart',function(e){
var fs = e.dataTransfer.files;//Get the drag-and-drop file object list FlieList object
var dt=e.dataTransfer;//dataTransfer attribute as drag and drop event
dt.effectAllowed='copy';
dt.setData('text/plain','hello');
dt.setDragImage(dragIcom,-10,-10);
});

3. Drag and drop to upload image preview:

Idea:
1. Be familiar with the four events of file drag and drop target elements. Note: Default behavior is blocked in ondragover and ondrop events
2. After dragging and placing, the file object collection is obtained: e.dataTransfer.files
3. Loop through each file object in the collection, determine the file type and file size, and perform corresponding operations if the type is specified
4. Read the file information object: new FileReader(), which has methods such as reading the file object DataUrl: readAsDataURL (file object), events triggered after successful reading: onload event, etc., this.result is the read data
5. Carry out corresponding logical processing in several events in the FileReader object

HTML:

<div class="container">
  <p class="text">请将图片文件拖拽至此区域!</p>
</div>

Total loads: 100

JQ:

<script type="text/javascript">
    $(function() {
      /*思路:
       *1.熟悉文件拖拽 目标元素 的四个事件,注意:ondragover、ondrop事件中阻止默认行为
       *2.拖拽放置后,获取到文件对象集合:e.dataTransfer.files
       *3.循环该集合中的每个文件对象,判断文件类型以及文件大小,是指定类型则进行相应的操作
       *4.读取文件信息对象:new FileReader(),它有读取文件对象为DataUrl等方法:readAsDataURL(文件对象)、读取成功之后触发的事件:onload事件等,this.result为读取到的数据
       *5.在FileReader对象中的几个事件中进行相应的逻辑处理
       *
       */
 
      //必须将jq对象转换为js对象,调用原生方法
      var oDiv = $(".container").get(0);
      var oP = $(".text");
      //进入
      oDiv.ondragenter = function() {
          oP.html('');
        }
        //移动,需要阻止默认行为,否则直接在本页面中显示文件
      oDiv.ondragover = function(e) {
 
          e.preventDefault();
        }
        //离开
      oDiv.onleave = function() {
          oP.html('请将图片文件拖拽至此区域!');
        }
        //拖拽放置,也需要阻止默认行为
      oDiv.ondrop = function(e) {
 
        e.preventDefault();
        //获取拖拽过来的对象,文件对象集合
        var fs = e.dataTransfer.files;
        //若为表单域中的file标签选中的文件,则使用form[表单name].files[0]来获取文件对象集合
        //打印长度
        console.log(fs.length);
        //循环多文件拖拽上传
        for (var i = 0; i < fs.length; i++) {
          //文件类型
          var _type = fs[i].type;
 
          console.log(_type);
          //判断文件类型
          if (_type.indexOf('image') != -1) {
            //文件大小控制
            console.log(fs[i].size);
            //读取文件对象
            var reader = new FileReader();
            //读为DataUrl,无返回值
            reader.readAsDataURL(fs[i]);
            reader.onloadstart = function(e) {
                //开始加载
              }
              // 这个事件在读取进行中定时触发
            reader.onprogress = function(e) {
 
              $("#total").html(e.total);
            }
 
            //当读取成功时触发,this.result为读取的文件数据
            reader.onload = function() {
                //文件数据
                // console.log(this.result);
                //添加文件预览
                var oImg = $("<img  src="/static/imghwm/default1.png"  data-src="https://img.php.cn/upload/image/399/396/818/1484211194180670.gif?x-oss-process=image/resize,p_40"  class="lazy"    style="max-width:90%"  / alt="JS HTML5 drag and drop upload image preview" >");
                oImg.attr("src", this.result);
                $(oDiv).append(oImg); //oDiv转换为js对象调用方法
              }
              //无论成功与否都会触发
            reader.onloadend = function() {
              if (reader.error) {
                console.log(reader.error);
              } else {
                //上传没有错误,ajax发送文件,上传二进制文件
              }
            }
          } else {
            alert('请上传图片文件!');
          }
        }
 
      }
    });
  </script>

Rendering:

JS HTML5拖拽上传图片预览

Summary: Combined with the knowledge of drag-and-drop event API, DataTransfer object and file reading object FileList, a simple drag-and-drop upload image preview effect is achieved. You need to be familiar with the relationship and usage of each object, and have a clear implementation idea!

The above is the entire content of this article. I hope it will be helpful to everyone's learning. I also hope that everyone will support the PHP Chinese website.

For more articles related to JS HTML5 drag-and-drop upload image preview, please pay attention to the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
HTML5: The Standard and its Impact on Web DevelopmentHTML5: The Standard and its Impact on Web DevelopmentApr 27, 2025 am 12:12 AM

The core features of HTML5 include semantic tags, multimedia support, offline storage and local storage, and form enhancement. 1. Semantic tags such as, etc. to improve code readability and SEO effect. 2. Simplify multimedia embedding with labels. 3. Offline storage and local storage such as ApplicationCache and LocalStorage support network-free operation and data storage. 4. Form enhancement introduces new input types and verification properties to simplify processing and verification.

H5 Code Examples: Practical Applications and TutorialsH5 Code Examples: Practical Applications and TutorialsApr 25, 2025 am 12:10 AM

H5 provides a variety of new features and functions, greatly enhancing the capabilities of front-end development. 1. Multimedia support: embed media through and elements, no plug-ins are required. 2. Canvas: Use elements to dynamically render 2D graphics and animations. 3. Local storage: implement persistent data storage through localStorage and sessionStorage to improve user experience.

The Connection Between H5 and HTML5: Similarities and DifferencesThe Connection Between H5 and HTML5: Similarities and DifferencesApr 24, 2025 am 12:01 AM

H5 and HTML5 are different concepts: HTML5 is a version of HTML, containing new elements and APIs; H5 is a mobile application development framework based on HTML5. HTML5 parses and renders code through the browser, while H5 applications need to run containers and interact with native code through JavaScript.

The Building Blocks of H5 Code: Key Elements and Their PurposeThe Building Blocks of H5 Code: Key Elements and Their PurposeApr 23, 2025 am 12:09 AM

Key elements of HTML5 include,,,,,, etc., which are used to build modern web pages. 1. Define the head content, 2. Used to navigate the link, 3. Represent the content of independent articles, 4. Organize the page content, 5. Display the sidebar content, 6. Define the footer, these elements enhance the structure and functionality of the web page.

HTML5 and H5: Understanding the Common UsageHTML5 and H5: Understanding the Common UsageApr 22, 2025 am 12:01 AM

There is no difference between HTML5 and H5, which is the abbreviation of HTML5. 1.HTML5 is the fifth version of HTML, which enhances the multimedia and interactive functions of web pages. 2.H5 is often used to refer to HTML5-based mobile web pages or applications, and is suitable for various mobile devices.

HTML5: The Building Blocks of the Modern Web (H5)HTML5: The Building Blocks of the Modern Web (H5)Apr 21, 2025 am 12:05 AM

HTML5 is the latest version of the Hypertext Markup Language, standardized by W3C. HTML5 introduces new semantic tags, multimedia support and form enhancements, improving web structure, user experience and SEO effects. HTML5 introduces new semantic tags, such as, ,, etc., to make the web page structure clearer and the SEO effect better. HTML5 supports multimedia elements and no third-party plug-ins are required, improving user experience and loading speed. HTML5 enhances form functions and introduces new input types such as, etc., which improves user experience and form verification efficiency.

H5 Code: Writing Clean and Efficient HTML5H5 Code: Writing Clean and Efficient HTML5Apr 20, 2025 am 12:06 AM

How to write clean and efficient HTML5 code? The answer is to avoid common mistakes by semanticizing tags, structured code, performance optimization and avoiding common mistakes. 1. Use semantic tags such as, etc. to improve code readability and SEO effect. 2. Keep the code structured and readable, using appropriate indentation and comments. 3. Optimize performance by reducing unnecessary tags, using CDN and compressing code. 4. Avoid common mistakes, such as the tag not closed, and ensure the validity of the code.

H5: How It Enhances User Experience on the WebH5: How It Enhances User Experience on the WebApr 19, 2025 am 12:08 AM

H5 improves web user experience with multimedia support, offline storage and performance optimization. 1) Multimedia support: H5 and elements simplify development and improve user experience. 2) Offline storage: WebStorage and IndexedDB allow offline use to improve the experience. 3) Performance optimization: WebWorkers and elements optimize performance to reduce bandwidth consumption.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function