layui 上传插件 带预览 非自动上传功能的实例(非常实用)


Posted in Javascript onSeptember 23, 2019

首先 Html部分:

<form method="post" action="?" οnsubmit="return check();" id="form">
 <div class="refund-img">
 <div class="refund-img-item addRefundimg" id="addImg">
 <img class="proimg" src="{DT_PATH}member/images/addbanner.png">
 </div>
 <input type="hidden" name="thumb[]" id="proImg1">
 <input type="hidden" name="thumb[]" id="proImg2">
 <input type="hidden" name="thumb[]" id="proImg3">
 </div>
 <span class="refund-img-prompt">Max. 3 attachements. Max. 3MB for each image.</span>
 <div class="comment-btn" id="comment-btn">Submit</div>
 <input style="display: none;" type="submit" name="submit" id="submitForm"/>
 </form>

JS部分:

//添加图片
 layui.use('upload', function() {
  var upload = layui.upload;//得到upload对象
 
 
  var frequency = 0;//记录上传成功的个数
 
 
  //多文件列表示例
  var demoListView = $('.comment-imgbox.refund-img #addImg'),
   uploadListIns = upload.render({ //执行实例
    elem: '#addImg',//绑定文件上传的元素
    url: '../upload.php',
    multiple: true,
    number: 3,//允许上传的数量
    auto: false,
    bindAction: '#comment-btn',//指向一个按钮触发上传 
     size:'3072',//尺寸
    accept: "images",//指定允许上传时校验的文件类型
     acceptMime:'image/*',只显示图片文件
    exts:"jpg|png|gif|jpeg",//允许后缀
    drag:"false",//是否文件拖拽上传
    data:{width:400,height:400},//上传接口的额外参数
    choose: function(obj) { //选择文件后的回调函数
     var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
  //如果图片3个,addImg隐藏 //假如项目只能传3个图片
  if(Object.keys(files).length == 3){
  $("#addImg").hide();
  }
 
     //读取本地文件 如果是多文件,则会遍历。(不支持ie8/9)
      console.log(index); //得到文件索引console.log(file); //得到文件对象console.log(result); //得到文件base64编码,比如图片//obj.upload(index, file); //对上传失败的单个文件重新上传,一般在某个事件中使用
     obj.preview(function(index, file, result) {
      //obj.upload(index, file); //对上传失败的单个文件重新上传,一般在某个事件中使用
       var div = $(['<div id="upload-' + index + '" class="refund-img-item exist">', '<img class="proimg" src="' + result + '">',   '<img src="../member/images/close.png" class="refund-img-close">', '</div>'].join(''));
      //删除列表中对应的文件
      div.find('.refund-img-close').on('click', function() {
       delete files[index]; //删除对应的文件
       div.remove();
       uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
       $("#addImg").show();
      });
 
      demoListView.before(div);
 
     });
    },
    before:function(){ //obj参数包含的信息,跟 choose回调完全一致如果带参 修改了layui js的before方法
 
     return confirm("Did you confirm submitting this review? Comments scores and content will not be changeable after submission');");
      //为了可以让客户在点击确定是时候有2个选择
    },
  done: function(res) {
  //上传成功
  frequency++;
  $("#proImg"+frequency).val(res);//隐藏域表单赋值
  alert(11);
          
          //当节点与上传成功一致时
   if($(".refund-img .exist").length == frequency){
  $("#submitForm").trigger("click");//提交表单
  }
 },
 error: function(res, index, upload) {
  Dtoast("Failed to upload picture");
 }
 })
 });

部分CSS:

.refund-img{
 display: -webkit-box;
 display: -moz-box;
 display: -ms-flexbox;
 display: flex;
 -webkit-box-align: center;
  -moz-box-align: center;
  -ms-flex-align: center;
   align-items: center;
 margin-top: 30px;
}
.refund-img-item{
 width: 30%;
 position: relative;
}
.refund-img-item:nth-child(2){
 margin: 0 5%;
}
.addRefundimg{
 border: 1px dashed #BFBFBF;
}
.refund-img-item img.proimg{
 width: 100%;
}
.refund-img-item input[type=file]{
 position: absolute;
 left: 0;
 top: 0;
 width: 100%;
 height: 100%;
 outline: none;
 border: none;
 opacity: 0;
}
.refund-img-close{
 position: absolute;
 width: 20px;
 top: 0;
 right: 0;
 padding-right: 5px;
 padding-top: 5px;
 /*display: none;*/
}
.addRefundimg .refund-img-close{
 /*display: none;*/
}
.refund-img-prompt{
 display: block;
 margin-top: 5px;
 margin-bottom: 3px;
}
 
.refund-submit{
 display: block;
 text-align: center;
 height: 40px;
 line-height: 40px;
 width: 98%;
 background-color: #fc6900;
 color: #fff;
 font-size: 16px;
 border: none;
 outline: none;
 margin-top: 8px;
 margin-bottom: 20px;
}
.comment-btn{
 width: 96%;
 background-color: #fc6900;
 color: #fff;
 height: 36px;
 text-align: center;
 line-height: 36px;
 display: block;
 outline: none;
 border: none;
 margin-top: 30px;
}

我用的layui版本是layui2.2.5 它这个默认不支持阻止图片上传的,所以需要改动框架的upload.js,

改动前 (查找before快速定位):

y=function(){return"choose"===t?l.choose&&l.choose(g):(l.before&&l.before(g),a.ie?a.ie>9?u():c():void u())};

降上面代码稍作修改 改为以下:

if("choose"===t){return l.choose&&l.choose(g)};
if(l.before&&l.before(g)){return false};
return (a.ie?a.ie>9?u():c():void u());

以上这篇layui 上传插件 带预览 非自动上传功能的实例(非常实用)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery中this的使用说明
Sep 06 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
javascript判断变量是否有值的方法
Apr 20 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 Javascript
JavaScript对象参数的引用传递
Jan 14 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 Javascript
重新理解JavaScript的六种继承方式
Mar 24 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
Sep 20 Javascript
vue component 中引入less文件报错 Module build failed
Apr 17 Javascript
Node 使用express-http-proxy 做api网关的实现
Oct 15 Javascript
详解从vue-loader源码分析CSS Scoped的实现
Sep 23 #Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 #Javascript
Node.js实现简单管理系统
Sep 23 #Javascript
webpack的pitching loader详解
Sep 23 #Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 #Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 #Javascript
小程序实现锚点滑动效果
Sep 23 #Javascript
You might like
PHP MSSQL 存储过程的方法
2008/12/24 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
wxPython窗口的继承机制实例分析
2014/09/28 Python
python基于ID3思想的决策树
2018/01/03 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
python数据归一化及三种方法详解
2019/08/06 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
即兴演讲稿
2014/01/04 职场文书
优乐美广告词
2014/03/14 职场文书
面试通知短信
2015/04/20 职场文书
夫妻吵架保证书
2015/05/08 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
基于Python实现射击小游戏的制作
2022/04/06 Python