欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js异步上传多张图片插件的使用方法

程序员文章站 2022-10-15 07:53:01
本文为大家分享了js异步上传多张图片插件的使用方法,供大家参考,具体内容如下 效果展示: 功能描述: 1.实现图片预览,预览图片移除,任意张数异步上传,上...

本文为大家分享了js异步上传多张图片插件的使用方法,供大家参考,具体内容如下

效果展示:

js异步上传多张图片插件的使用方法

功能描述:

1.实现图片预览,预览图片移除,任意张数异步上传,上传进度条指示,已选中且上传的图片不会重复上传,且不能移除

使用方法:

界面顶部引入imgup.css,2.0版本以下的jquery,页面底部引入imgup.js
界面中必须存在三个元素

1、图片选择: id必须是“div_imgfile”,可以是任意元素,onclick事件触发选择对话框
2、图片预览容器:id必须是“div_imglook”的div,里面包含一个清除浮动的div
3、确定上传按钮:id必须是“btn_imgupstart”,可以是任意元素,onclick事件开始上传全部选中图片        

样式可随意更改,js文件顶部有三个变量,可以分别设置单张图片大小限制,单位mb,最多选中图片张数,异步提交服务端位置

ajax中回调函数可以修改提示信息样式,查找“alert”也可。

<body>
  <!--图片选择对话框-->
  <div id="div_imgfile">选择图片</div>
 
  <!--图片预览容器-->
  <div id="div_imglook">
    <div style="clear: both;"></div>
  </div>
 
  <!--确定上传按钮-->
  <input type="button" value="确定上传" id="btn_imgupstart" />
</body>
 
<style>
/*选择图片框样式*/
#div_imgfile {
  width: 130px;
  height: 130px;
  text-align: center;
  line-height: 130px;
  font-family: 微软雅黑;
  font-size: 16px;
  box-sizing: border-box;
  border: 2px solid #808080;
  cursor: pointer;
}
  /*选择图片框鼠标移入移出效果*/
  #div_imgfile:hover {
    background-color: #d1cfcf;
  }
 
.imgfile {
  display: none;
}
 
/*这里是图片预览容器样式*/
#div_imglook {
  margin-top: 20px;
  background-color: #ffefd5;
}
 
/*单个图片预览模块样式*/
.lookimg {
  width: 130px;
  height: 130px;
  box-sizing: border-box;
  border: 1px solid #808080;
  float: left;
  margin-right: 10px;
  position: relative;
}
 
  .lookimg img {
    width: 100%;
    height: 100%;
  }
 
/*删除按钮样式*/
.lookimg_delbtn {
  position: absolute;
  bottom: 0px;
  left: 0px;
  width: 100%;
  height: 30px;
  text-align: center;
  line-height: 30px;
  background-color: #808080;
  opacity: 0.8;
  color: white;
  font-size: 16px;
  font-family: 微软雅黑;
  display: none;
  cursor: pointer;
}
 
  /*删除按钮移入移出效果*/
  .lookimg_delbtn:hover {
    opacity: 1;
  }
 
/*上传进度条样式*/
.lookimg_progress {
  position: absolute;
  bottom: 15px;
  left: 0px;
  width: 100%;
  height: 20px;
  background-color: #e0e0e0;
  box-sizing: border-box;
  border: 1px solid black;
  display: none;
  text-align: center;
  line-height: 20px;
  font-size: 14px;
}
 
  .lookimg_progress div {
    position: absolute;
    left: 0px;
    top: 0px;
    height: 100%;
    width: 0px;
    background-color: #e9cc2e;
  }
 
 
/*确定上传按钮样式*/
#btn_imgupstart {
  width: 130px;
  height: 40px;
  margin-top: 30px;
}
</style>
 
<script>
var img_length = 1;//图片最大1mb
var img_maxcount = 5;//最多选中图片张数
var img_ajaxpath = "ajax/imgupload.ashx";//异步传输服务端位置
 
 
var up_imgcount = 0;//上传图片张数记录
//打开文件选择对话框
$("#div_imgfile").click(function () {
  if ($(".lookimg").length >= img_maxcount) {
    alert("一次最多上传" + img_maxcount + "张图片");
    return;
  }
 
  var _cre_file = document.createelement("input");
  if ($(".imgfile").length <= $(".lookimg").length) {//个数不足则新创建对象
    _cre_file.setattribute("type", "file");
    _cre_file.setattribute("class", "imgfile");
    _cre_file.setattribute("accept", ".png,.jpg,.jpeg");
    _cre_file.setattribute("num", up_imgcount);//记录此对象对应的编号
    $("#div_imgfile").after(_cre_file);
  }
  else { //否则获取最后未使用对象
    _cre_file = $(".imgfile").eq(0).get(0);
  }
  return $(_cre_file).click();//打开对象选择框
});
 
//创建预览图,在动态创建的file元素onchange事件中处理
$(".imgfile").live("change", function () {
  if ($(this).val().length > 0) {//判断是否有选中图片
 
    //判断图片格式是否正确
    var format = $(this).val().substr($(this).val().length - 3, 3);
    if (format != "png" && format != "jpg" && format != "peg") {
      alert("文件格式不正确!!!");
      return;
    }
 
    //判断图片是否过大,当前设置1mb
    var file = this.files[0];//获取file文件对象
    if (file.size > (img_length * 1024 * 1024)) {
      alert("图片大小不能超过" + img_length + "mb");
      $(this).val("");
      return;
    }
    //创建预览外层
    var _prevdiv = document.createelement("div");
    _prevdiv.setattribute("class", "lookimg");
    //创建内层img对象
    var preview = document.createelement("img");
    $(_prevdiv).append(preview);
    //创建删除按钮
    var img_delbtn = document.createelement("div");
    img_delbtn.setattribute("class", "lookimg_delbtn");
    img_delbtn.innerhtml = "移除";
    $(_prevdiv).append(img_delbtn);
    //创建进度条
    var img_progress = document.createelement("div");
    img_progress.setattribute("class", "lookimg_progress");
    $(img_progress).append(document.createelement("div"));
    $(_prevdiv).append(img_progress);
    //记录此对象对应编号
    _prevdiv.setattribute("num", $(this).attr("num"));
    //对象注入界面
    $("#div_imglook").children("div:last").before(_prevdiv);
    up_imgcount++;//编号增长防重复
 
    //预览功能 start
    var reader = new filereader();//创建读取对象
    reader.onloadend = function () {
      preview.src = reader.result;//读取加载,将图片编码绑定到元素
    }
    if (file) {//如果对象正确
      reader.readasdataurl(file);//获取图片编码
    } else {
      preview.src = "";//返回空值
    }
    //预览功能 end
  }
});
 
//删除选中图片
$(".lookimg_delbtn").live("click", function () {
  $(".imgfile[num=" + $(this).parent().attr("num") + "]").remove();//移除图片file
  $(this).parent().remove();//移除图片显示
});
 
//删除按钮移入移出效果
$(".lookimg").live("mouseover", function () {
  if ($(this).attr("isup") != "1")
    $(this).children(".lookimg_delbtn").eq(0).css("display", "block");;
});
$(".lookimg").live("mouseout", function () {
  $(this).children(".lookimg_delbtn").eq(0).css("display", "none");;
});
 
//确定上传按钮
$("#btn_imgupstart").click(function () {
 
  if ($(".lookimg").length <= 0) {
    alert("还未选择需要上传的图片");
    return;
  }
 
  //全部图片上传完毕限制
  if ($(".lookimg[isup=1]").length == $(".lookimg").length) {
    alert("图片已全部上传完毕!");
    return;
  }
 
  //循环所有已存在的图片对象,准备上传
  for (var i = 0; i < $(".lookimg").length; i++) {
    var nowlook = $(".lookimg").eq(i);//当前操作的图片预览对象
    nowlook.index = i;
    //如果当前图片已经上传,则不再重复上传
    if (nowlook.attr("isup") == "1")
      continue;
 
    //上传图片准备
    var img_base = nowlook.children("img").eq(0).attr("src"); //要上传的图片的base64编码
    var img_ind = nowlook.attr("num");
    var img_route = $(".imgfile[num=" + img_ind + "]").eq(0).val();//获取上传图片路径,为获取图片类型使用
    var img_endfour = img_route.substr(img_route.length - 4, 4);//截取路径后四位,判断图片类型
    var img_fomate = "jpeg"; //图片类型***
    if (img_endfour.trim() == ".jpg")
      img_fomate = "jpg";
    else if (img_endfour.trim() == ".png")
      img_fomate = "png";
 
    //图片正式开始上传
    $.ajax({
      type: "post",
      url: img_ajaxpath,
      data: { 'imgbase': img_base, 'imgformat': img_fomate, 'lookindex': nowlook.index },//图片base64编码,图片格式(当前仅支持jpg,png,jpeg三种),图片对象索引
      datatype: "json",
      success: function (data) {
        if (data.isok == "1") {
          //图片上传成功回调
          var uptime = math.ceil(math.random() * 400) + 400;//生成一个400-800的随机数,假设进图条加载时间不一致
          $(".lookimg").eq([data.ind]).attr("isup", "1");//记录此图片已经上传
          $(".lookimg").eq([data.ind]).children(".lookimg_progress").eq(0).children("div").eq(0).animate({ width: "100%" }, uptime, function () {
            $(this).css("background-color", "#00ff00").text('上传成功');
          });
        }
        else {//图片未上传成功回调
          $(".lookimg")[data.ind].children(".lookimg_progress").eq(0).children("div").eq(0).css("width", "100%").css("background-color", "red").text("上传失败");
        }
      },
      error: function (err) {
        //服务器连接失败报错处理
        alert("error");
        //alert(err.responsetext);
      },
      beforesend: function () {
        //图片上传之前执行的操作,当前为进度条显示
        nowlook.children(".lookimg_progress").eq(0).css("display", "block");//进度条显示
      }
    });
  }
});
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。