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 相关文章推荐
javascript学习网址备忘
May 29 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
Aug 14 Javascript
js获取图片大小的函数代码
Sep 20 Javascript
可选择和输入的下拉列表框示例
Nov 05 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
VUE 解决mode为history页面为空白的问题
Nov 01 Javascript
vue-i18n实现中英文切换的方法
Jul 06 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
解决基于 keep-alive 的后台多级路由缓存问题
Dec 23 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
apache+php+mysql安装配置方法小结
2010/08/01 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
Python 实现随机数详解及实例代码
2017/04/15 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
python实现音乐下载的统计
2018/06/20 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
辞职信范文大全
2015/03/02 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
如何撰写促销方案?
2019/07/05 职场文书
python中如何对多变量连续赋值
2021/06/03 Python