首页 前端知识 HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (1)

HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (1)

2024-04-29 11:04:50 前端知识 前端哥 432 142 我要收藏

HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一)

=====================================================================================================

这篇博客直接在上篇的基础上完成,最终效果:

效果图1:

效果图2:

好了,请允许我把图片贴了两遍,方便大家看效果了~

可以看出我们的图片的li的html其实还是挺复杂的,于是我把html文档做了一些修改:

  • 可以看到我把li的显示,独立写到了一个div#template,默认是hidden的,这样做的好处是什么呢?避免我们每上传一个文件,在js中出现大量的创建元素与赋属性的代码,一般设计比较复杂的html元素的生成,建议使用这种方式,可以简化代码,也利于我们代码的后期维护。

    Js代码:

    /**

    • User: zhy

    • Date: 14-6-16

    • Time: 下午11:06

    */

    var ZhangHongyang = {};

    ZhangHongyang.html5upload = (function ()

    {

    var _ID_UPLOAD_BOX = “uploadBox”;

    var _CLASS_PROGRESS = “progress”;

    var _CLASS_PERCENTAGE = “percentage”;

    var _tip_no_drag = “将文件拖拽至此区域,即可上传!”;

    var _tip_drag_over = “释放鼠标立即上传!”;

    var _uploadEle = null;

    /**

    • 初始化对象与事件

    • @private

    */

    function _init()

    {

    _uploadEle = document.getElementById(_ID_UPLOAD_BOX);

    _uploadEle.ondragenter = _onDragEnter;

    _uploadEle.ondragover = _onDragOver;

    _uploadEle.ondragleave = _onDragLeave;

    _uploadEle.ondrop = _onDrop;

    _setStatusNoDrag();

    };

    /**

    • 正在拖拽状态

    • @private

    */

    function _setDragOverStatus()

    {

    if (_checkContatinsElements())return;

    _uploadEle.innerText = _tip_drag_over;

    _uploadEle.style.border = “2px dashed #777”;

    $(_uploadEle).css({lineHeight: $(_uploadEle).height() + “px”});

    }

    /**

    • 初始化状态

    • @private

    */

    function _setStatusNoDrag()

    {

    if (_checkContatinsElements())return;

    _uploadEle.innerText = _tip_no_drag;

    _uploadEle.style.border = “2px dashed #777”;

    $(_uploadEle).css({lineHeight: $(_uploadEle).height() + “px”});

    }

    /**

    • 上传文件

    • @private

    */

    function _setDropStatus()

    {

    if (_checkContatinsElements())return;

    _uploadEle.innerText = “”;

    _uploadEle.style.border = “1px solid #444”;

    $(_uploadEle).css({lineHeight: “1em”});

    $(_uploadEle).append(“

      ”);

      };

      /**

      • 判断是否已经上传文件了

      • @private

      */

      function _checkContatinsElements()

      {

      return !!$(_uploadEle).find(“li”).size();

      }

      /**

      • 当ondragenter触发

      • @private

      */

      function _onDragEnter(ev)

      {

      _setDragOverStatus();

      }

      /**

      • 当ondargmove触发

      • @private

      */

      function _onDragOver(ev)

      {

      //ondragover中必须组织事件的默认行为,默认地,无法将数据/元素放置到其他元素中。

      ev.preventDefault();

      }

      /**

      • 当dragleave触发

      • @private

      */

      function _onDragLeave(ev)

      {

      _setStatusNoDrag();

      }

      /**

      • ondrop触发

      • @private

      */

      function _onDrop(ev)

      {

      //drop 事件的默认行为是以链接形式打开,所以也需要阻止其默认行为。

      ev.preventDefault();

      _setDropStatus();

      //拿到拖入的文件

      var files = ev.dataTransfer.files;

      var len = files.length;

      for (var i = 0; i < len; i++)

      {

      //页面上显示需要上传的文件

      _showUploadFile(files[i]);

      }

      }

      /**

      • 页面上显示需要上传的文件

      • @private

      */

      function _showUploadFile(file)

      {

      var reader = new FileReader();

      // console.log(file)

      // console.log(reader);

      //判断文件类型

      if (file.type.match(/image*/))

      {

      reader.onload = function (e)

      {

      var formData = new FormData();

      自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

      深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

      因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
      img
      img
      img
      img
      img
      img

      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

      由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

      如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
      img

      Vue

      • 什么是MVVM?

      • mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

      • 组件之间的传值?

      • Vue 双向绑定原理

      • 描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?

      • 虚拟 DOM 实现原理

      • Vue 中 key 值的作用?

      • Vue 的生命周期

      • Vue 组件间通信有哪些方式?

      • vue 中怎么重置 data?

      • 组件中写 name 选项有什么作用?

      • Vue 的 nextTick 的原理是什么?

      • Vuex 有哪几种属性?

        CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

      区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

      • 组件之间的传值?

      • Vue 双向绑定原理

      • 描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?

      • 虚拟 DOM 实现原理

      • Vue 中 key 值的作用?

      • Vue 的生命周期

      • Vue 组件间通信有哪些方式?

      • vue 中怎么重置 data?

      • 组件中写 name 选项有什么作用?

      • Vue 的 nextTick 的原理是什么?

      • Vuex 有哪几种属性?

        CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

    转载请注明出处或者链接地址:https://www.qianduange.cn//article/6275.html
    标签
    评论
    发布的文章

    JQuery中的load()、$

    2024-05-10 08:05:15

    大家推荐的文章
    会员中心 联系我 留言建议 回顶部
    复制成功!