話不多說直接上代碼
以下是h5代碼,因為之后qq瀏覽器和華為和小米自帶的瀏覽器可以一次性選多張圖片,所以在其他瀏覽器下,我們只能采用多個input選多次的方式來實現文件上傳
h5 用的框架是jq ui,文件上傳的插件也是用的這個不過有一個要注意的就是 input 一定要放在div 下,不能放在ul 下,不然會有非常美妙的效果,你懂得,ul 下只能放li子元素
<div class="weui-uploader"> <div class="weui-uploader__hd"> <p class="weui-uploader__title">圖片上傳</p> </div> <div class="weui-uploader__bd"> <ul class="weui-uploader__files" id="uploaderFiles"> </ul> <div class="weui-uploader__input-box" id="inputbox"> <input id="uploaderInput0" class="weui-uploader__input" name="images[0]" type="file" accept="image/*" multiple=""> </div> </div> </div>
下面是js代碼
$(function () { var tmpl = '<li class="weui-uploader__file" style="background-image:url(#url#)"></li>', $gallery = $("#gallery"), $galleryImg = $("#galleryImg"), $uploaderFiles = $("#uploaderFiles"); var imageIndex = 0; function jsFileChange(event) { console.info("jsFileChange run")
//這一部分是圖片預覽的效果 var src, url = window.URL || window.webkitURL || window.mozURL, files = event.target.files; for (var i = 0, len = files.length; i < len; ++i) { var file = files[i]; if (url) { src = url.createObjectURL(file); } else { src = event.target.result; } $uploaderFiles.append($(tmpl.replace('#url#', src))); }
//選完當前圖片之后隱藏當前input,然后創建一個新的input 來接收下一個圖片或文件 $("#uploaderInput" + imageIndex).css('display', 'none'); imageIndex++; var imgInputStr = '<input id="uploaderInput' + imageIndex + '" class="weui-uploader__input" name="images[' + imageIndex + ']" type="file" accept="image/*" multiple="">'; $("#inputbox").append(imgInputStr); $("#uploaderInput" + imageIndex).on("change", jsFileChange); } $("#uploaderInput0").on("change", jsFileChange); var index; //第幾張圖片 $uploaderFiles.on("click", "li", function () {
//預覽之后可以刪除,這是刪除代碼 index = $(this).index(); $galleryImg.attr("style", this.getAttribute("style")); $gallery.fadeIn(100);
//刪除完縮略圖之后刪除對應的input元素 $("#inputbox input:eq(" + index + ")").remove(); }); $gallery.on("click", function () { $gallery.fadeOut(100); }); //刪除圖片 刪除圖片的代碼也貼出來。 $(".weui-gallery__del").click(function () { console.log('刪除'); $uploaderFiles.find("li").eq(index).remove(); }); });
參考:https://www.zhihu.com/question/24212111