jQuery-WEUI的Uploader实现上传多张图片并且限制上传数量的方法

jQuery-WEUI的Uploader目前只有CSS样式,并没有对应的JS插件。于是自己根据之前在网上找到的未完善的代码做了修改。实现了多图上传并且限制上传数量的方法,点击预览的时候可以删除当前已添加的图片。

这是jQuery-WEUI官网的demo示例代码。只有前端css样式。

特别说明,本人已经重写Uploader上传方法,增加了可配置化和可直接上传到服务器的方法。

新方法地址:https://blog.youkuaiyun.com/wuyuander/article/details/100581314

我的上传实现原理是把选择的照片以base64格式存起了。然后我我上传的时候取base64上传再在后台转成图片;

话不多说,先看代码;

<!--weui-uploader 照片上传功能-->
<div class="weui-uploader">
    <div class="weui-uploader__hd">
        <p class="weui-uploader__title">上传现场照片</p>
        <div class="weui-uploader__info" id="uploader_count" data-total="3" data-val="0">0/3</div>
    </div>
    <div class="weui-uploader__bd">
        <ul class="weui-uploader__files" id="uploader_files"></ul>
        <div class="weui-uploader__input-box">
            <input class="weui-uploader__input" id="uploader_input" type="file" accept="image/*" multiple="">>
        </div>
    </div>
</div>
<!--weui-uploader 照片上传功能 END-->

其中 <div class="weui-uploader__info" id="uploader-count" data-total="3" data-val="0">0/3</div>

<!--用于设置最多上传数量以及记录已上传数量的-->

我把实现上传的JS代码封装为weui.expand.js。 然后引用js文件:<script src="/weui/js/weui.expand.js"></script>

jQuery-WEUI的Uploader JS拓展代码:

/*========================================================
*****   weui-uploader 实现图片上传+预览+删除方法  ********
* Editor:吴远德_Dale ,最初引用于:http://jqweui.com/components
*引用JS:jquery-2.1.4.js,weui.min.js,jquery-weui.js;
*引用CSS:weui.min.css;jquery-weui.css;
*用到了:weui-uploader及 实现了上传,weui-gallery实现了预览及删除
========================================================*/
$(function () {
    //var tmpl = '<li id="" class="weui-uploader__file" style="background-image:url(#url#)"></li>',//weui.js中的方法
    //var tmpl = '<li id="" class="weui-uploader__file" style="background-image:url(#url#)"><input type="hidden" id="#imgid#" name="#imgid#" value="#url#" /></li>',
    var tmpl = '<li id="" class="weui-uploader__file" style="background-image:url(#url#)"><input type="hidden" id="#imgid#" name="#imgid#" value="#url#" /><div class="weui-uploader__file-content">50%</div></li>',
        $gallery = $(".weui-gallery"), $galleryImg = $(".weui-gallery__img"),
        $gallery__del = $(".weui-gallery__del"),
        $uploaderInput = $("#uploader_input"),
        $uploaderFiles = $("#uploader_files"),
        $uploaderCount = $("#uploader_count")//显示已上传数的div元素
    ;
    // 允许上传的图片类型
    var allowTypes = ['image/jpg', 'image/jpeg', 'image/png', 'image/gif'];
    // 1024KB,也就是 1MB
    var maxSize = 1024 * 1024;
    // 图片最大宽度
    var maxWidth = 300;
    // 最大上传图片数量
    var imgTotal = 0;
    // 记录当前已上传数量
    var imgCount = 0;
    //记录当前被gallery的click事件打开的li元素
    var $galleryClickLi;
    $uploaderInput.on("change", function (e) {
        var src, url = window.URL || window.webkitURL || window.mozURL, files = e.target.files;
        imgTotal = parseInt($uploaderCount.attr("data-total"));//从显示上传数的$uploaderCount获取最大上传数量
        imgCount = parseInt($uploaderCount.attr("data-val"));//从显示上传数的$uploaderCount获取当前的数量
        for (var i = 0, len = files.length; i < len; ++i) {
            var file = files[i];

            if (url) {
                src = url.createObjectURL(file);
            } else {
                src = e.target.result;
            }
            imgCount = imgCount + 1;//数量+1;
            //$uploaderFiles.append($(tmpl.replace('#url#', src)));
            //新方法中对隐藏域的ID和value进行替换
           
            var reader = new FileReader();
            reader.onload = function (e) {
                var img = new Image();
                img.onload = function () {
                    // 不要超出最大宽度
                    var w = Math.min(maxWidth, img.width);
                    // 高度按比例计算
                    var h = img.height * (w / img.width);
                    var canvas = document.createElement('canvas');
                    var ctx = canvas.getContext('2d');
                    // 设置 canvas 的宽度和高度
                    canvas.width = w;
                    canvas.height = h;
                    ctx.drawImage(img, 0, 0, w, h);
                    var base64 = canvas.toDataURL('image/png');

                    // 插入到预览区
                    $uploaderFiles.append($(tmpl.replace('#url#', base64).replace('#imgid#', "img" + imgCount).replace('#imgid#', "img" + imgCount).replace('#url#', base64)));

                    // 然后假装在上传,可以post base64格式,也可以构造blob对象上传,也可以用微信JSSDK上传
                    var progress = 0;
                    function uploading() {
                        $uploaderFiles.find('.weui-uploader__file-content').text(++progress + '%');
                        if (progress < 100) {
                            setTimeout(uploading, 30);
                        } else {
                            // 如果是失败,塞一个失败图标
                            //$preview.find('.weui-uploader__file-content').html('<i class="weui_icon_warn"></i>');
                            $uploaderFiles.removeClass('weui-uploader__file_status')
                                    .find('.weui-uploader__file-content')
                                    .remove();
                        }
                    }
                    setTimeout(uploading, 30);
                };
                img.src = e.target.result;
            };
            reader.readAsDataURL(file);

        }
        //更新记录数量的$uploaderCount 中的值和显示内容
        updateImgCount();
    });
    $uploaderFiles.on("click", "li", function () {
        $galleryImg.attr("style", this.getAttribute("style"));
        $gallery.fadeIn(100);
        $galleryClickLi = this;//记录被单击调用$gallery显示的li元素
    });
    $gallery.on("click", function () {
        $gallery.fadeOut(100);
    });
    $gallery__del.on("click", function () {
        $gallery.fadeOut(100);
        $galleryClickLi.remove();// $gallery删除事件执行移除li元素
        imgCount = imgCount - 1;
        updateImgCount();
    });

    //更新记录数量的$uploaderCount中的值和显示内容
    function updateImgCount() {
        $uploaderCount.attr("data-val", imgCount);
        $uploaderCount.html("" + imgCount + "/" + imgTotal + "");
        if (imgCount >= imgTotal) {
            $('.weui-uploader__input-box').hide();
        } else {
            $('.weui-uploader__input-box').show();
        }
    }
});

然后引用拓展JS即可实现:

 

 

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值