DDR爱好者之家 Design By 杰米

前言

本文主要介绍如何使用原生js,通过面向对象的方式实现一个文件上传预览的组件,该组件利用FileReader来实现文件在前端的解析,预览,读取进度等功能,并对外暴露相应api来实现用户自定义的需求,比如文件上传,进度监听,自定义样式,读取成功回调等。

组件设计架构如下:

教你3分钟利用原生js实现有进度监听的文件上传预览组件

涉及的核心知识点如下:

  1. 闭包:减少变量污染,缩短变量查找范围
  2. 自执行函数
  3. file API:对文件进行读取,解析,监控文件事件
  4. DocumentFragment API:主要用来优化dom操作
  5. minix :用来实现对象混合
  6. 正则表达式:匹配文件类型
  7. class :类组件

github地址

用原生js实现具有进度监听的文件上传预览组件 (本地下载)

Demo演示

教你3分钟利用原生js实现有进度监听的文件上传预览组件

教你3分钟利用原生js实现有进度监听的文件上传预览组件

教你3分钟利用原生js实现有进度监听的文件上传预览组件

教你3分钟利用原生js实现有进度监听的文件上传预览组件

使用:

<div id="test"></div>
<script src="/UploadFiles/2021-04-02/xjFile.js">

css代码:

.xj-wrap {
   position: relative;
   display: inline-block;
   border: 1px dashed #888;
   width: 200px;
   height: 200px;
   border-radius: 6px;
   overflow: hidden;
  }
  .xj-wrap::before {
   content: '+';
   font-size: 36px;
   position: absolute;
   transform: translate(-50%, -50%);
   left: 50%;
   top: 50%;
   color: #ccc;
  }
  .xj-wrap .xj-pre-img {
   width: 100%;
   height: 100%;
   background-repeat: no-repeat;
   background-position: center center;
   background-size: 100%;
  }
  .xj-file {
   position: absolute;
   left: 0;
   right: 0;
   bottom: 0;
   top: 0;
   opacity: 0;
   cursor: pointer;
  }

js代码:

(function(win, doc){
 function xjFile(opt) {
  var defaultOption = {
   el: doc.body,
   accept: '*', // 格式按照'image/jpg,image/gif'传
   clsName: 'xj-wrap',
   beforeUpload: function(e) { console.log(e) },
   onProgress: function(e) { console.log(e) },
   onLoad: function(e) { console.log(e) },
   onError: function(e) { console.error('文件读取错误', e) }
  };

  // 获取dom
  if(opt.el) {
   opt.el = typeof opt.el === 'object' "htmlcode">
class XjFile {
 constructor(opt) {

 }

 init() {

 }

 watch() {

 }

 render() {

 }

 clearFile() {

 }

 minix(source, target) {
  
 }

 isImage(type) {
  
 }
}

总结

该组件仍有需要完善的地方,在后期使用中,会慢慢更新,优化,欢迎大家提出宝贵的建议。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米