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中创建实例与原型继承揭秘
Dec 21 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
JS模拟并美化的表单控件完整实例
Aug 19 Javascript
JS简单实现多级Select联动菜单效果代码
Sep 06 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
JavaScript 数组的进化与性能分析
Sep 18 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
Nov 15 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 Javascript
原生js实现自定义滚动条
Jan 20 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python with语句用法原理详解
2020/07/03 Python
python实现双人五子棋(终端版)
2020/12/30 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
建筑施工实习自我鉴定
2013/09/19 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
物理研修随笔感言
2014/02/14 职场文书
债务纠纷起诉书
2015/05/20 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
python基础之停用词过滤详解
2021/04/21 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
Python字典的基础操作
2021/11/01 Python
python小型的音频操作库mp3Play
2022/04/24 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript