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

_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();

    var li = $(“#template li”).clone();

    var img = li.find(“img”);

    var progress = li.find(“.progress”);

    var percentage = li.find(“.percentage”);

    percentage.text(“0%”);

    img.attr(“src”, e.target.result);

    $(“ul”, $(_uploadEle)).append(li);

    $(_uploadEle).find(“li”).size() == 10 && ( u p l o a d E l e ) . w i d t h ( ( (_uploadEle).width(( (uploadEle).width(((_uploadEle).width() + 8) + “px”).css(“overflow”, “auto”);

    formData.append(“uploadFile”, file);

    //上传文件到服务器

    _uploadToServer(formData, li, progress, percentage);

    };

    reader.readAsDataURL(file);

    }

    else

    {

    console.log(“此” + file.name + “不是图片文件!”);

    }

    }

    /**

    • 上传文件到服务器

    • @private

    */

    function _uploadToServer(formData, li, progress, percentage)

    {

    var xhr = new XMLHttpRequest();

    xhr.open(“POST”, “http://localhost:8080/strurts2fileupload/uploadAction”, true);

    xhr.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’, ‘Content-Type’, ‘multipart/form-data;’);

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

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

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

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

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

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

    写在最后

    在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

    如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!

    加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

    35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

    本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

    一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

    AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

    实战源码》]( )收录**

    一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

    AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

    • 18
      点赞
    • 14
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值