javascript实现移动端上传图片功能

本文实例为大家分享了javascript实现移动端上传图片的具体代码,供大家参考,具体内容如下

核心部分(.html)

window.onload = function() {
 let fileTag = document.getElementById('file');
 // console.log(fileTag)
 // console.log(this.pic)
 let that = this

 fileTag.onchange = function() {
  let file = fileTag.files[0];
  let fileReader = new FileReader();
  // console.log(file)
  console.log(fileReader)
  // console.log(that.pic)
  fileReader.onloadend = function() {
  console.log(1212)
  if (fileReader.readyState == fileReader.DONE) {
   // console.log(that.pic)
   console.log(fileReader)

   if(that.pic=="") {
   console.log(1111)
   that.pic = fileReader.result
   that.input1 = false

   that.upLoad(fileReader.result)
   return
   }else{
   if(that.pic2=='') {
    console.log(2222)
    that.pic2 = fileReader.result
    that.input2 = false
    return
   }else {
    if(that.pic3=='') {
    console.log(3333)
    that.pic3 = fileReader.result
    that.input3 = false
    return
    }else {
    if(that.pic4=='') {
     console.log(4444)
     that.pic4 = fileReader.result
     that.input4 = false
     return
    }else {
     console.log(5555)
     if(that.pic5=='') {
     that.pic5 = fileReader.result
     that.input5 = false
     return
     }

    }
    }
   }

   }
   // console.log(that.pic)
  }
  };

  fileReader.readAsDataURL(file);
 }
} 

vue项目代码

主要是HTML页面设计

<div class="imgBox" @click="upImg">
 <div style="display:flex;flex-flow:wrap;">
 <div class="Img" >
  <label>
  <img v-if="pic==''" src="./img/addPhotos.jpg">
  <img v-else width='100%' height='100%' style="border-radius:5px" id="img" :src="pic">
  <input v-if="input1" class="myInput" type="file" id="file" accept="image/*" multiple required>
  </label>
  <div v-if="pic!=''" class="myDel" @click="delImg(1)">X</div>

 </div>
 <div class="Img" v-if="pic!='' || !input2">
  <label>
  <img v-if="pic2==''" src="./img/addPhotos.jpg">
  <img v-else width='100%' height='100%' style="border-radius:5px" :src="pic2">
  <input v-if="input2" class="myInput" type="file" id="file" accept="image/*" multiple required>
  </label>
  <div v-if="pic2!=''" class="myDel" @click="delImg(2)">X</div>
 </div>
 <div class="Img" v-if="(pic!='' && pic2!='' ) || !input3">
  <label>
  <img v-if="pic3==''" src="./img/addPhotos.jpg">
  <img v-else width='100%' height='100%' style="border-radius:5px" :src="pic3">
  <input v-if="input3" class="myInput" type="file" id="file" accept="image/*" multiple required>
  </label>
  <div v-if="pic3!=''" class="myDel" @click="delImg(3)">X</div>
 </div>
 <div class="Img" v-if="(pic!='' && pic2!='' && pic3!='') || !input4">
  <label>
  <img v-if="pic4==''" src="./img/addPhotos.jpg">
  <img v-else width='100%' height='100%' style="border-radius:5px" :src="pic4">
  <input v-if="input4" class="myInput" type="file" id="file" accept="image/*" multiple required>
  </label>
  <div v-if="pic4!=''" class="myDel" @click="delImg(4)">X</div>
 </div>
 <div class="Img" v-if="(pic!='' && pic2!='' && pic3!='' && pic4!='') || !input5">
  <label>
  <img v-if="pic5==''" src="./img/addPhotos.jpg">
  <img v-else width='100%' height='100%' style="border-radius:5px" :src="pic5">
  <input v-if="input5" class="myInput" type="file" id="file" accept="image/*" multiple required>
  </label>
  <div v-if="pic5!=''" class="myDel" @click="delImg(5)">X</div>
 </div>
 </div>
</div>

data()部分

pic:'',
pic2:'',
pic3:'',
pic4:'',
pic5:'',
input1:true,
input2:true,
input3:true,
input4:true,
input5:true

methods:{}部分

upImg() {

 // window.onload = function() {
 let fileTag = document.getElementById('file');
 // console.log(fileTag)
 // console.log(this.pic)
 let that = this

 fileTag.onchange = function() {
  let file = fileTag.files[0];
  let fileReader = new FileReader();
  // console.log(file)
  console.log(fileReader)
  // console.log(that.pic)
  fileReader.onloadend = function() {
  console.log(1212)
  if (fileReader.readyState == fileReader.DONE) {
   // console.log(that.pic)
   console.log(fileReader)

   if(that.pic=="") {
   console.log(1111)
   that.pic = fileReader.result
   that.input1 = false

   that.upLoad(fileReader.result)
   return
   }else{
   if(that.pic2=='') {
    console.log(2222)
    that.pic2 = fileReader.result
    that.input2 = false
    return
   }else {
    if(that.pic3=='') {
    console.log(3333)
    that.pic3 = fileReader.result
    that.input3 = false
    return
    }else {
    if(that.pic4=='') {
     console.log(4444)
     that.pic4 = fileReader.result
     that.input4 = false
     return
    }else {
     console.log(5555)
     if(that.pic5=='') {
     that.pic5 = fileReader.result
     that.input5 = false
     return
     }
    }
    }
   }
   }
   // console.log(that.pic)
  }
  };
  fileReader.readAsDataURL(file);
 }
 // }
},
delImg(num) {
 if(num==1) {
 this.pic = ''
 this.input1 = true
 }
 if(num==2) {
 this.pic2 = ''
 this.input2 = true
 }
 if(num==3) {
 this.pic3 = ''
 this.input3 = true
 }
 if(num==4) {
 this.pic4 = ''
 this.input4 = true
 }
 if(num==5) {
 this.pic5 = ''
 this.input5 = true
 }
}

css部分(style)

#order .imgBox {
 margin-bottom: 100px;
 padding: 20px;
 box-sizing: border-box;
 background: #fff;
 height: 250px;
}

#order .Img {
 width: 90px;
 height: 90px;
 background: #fff;
 text-align: center;
 line-height: 132px;
 box-sizing: border-box;
 border-radius: 5px;
 border: 1px solid rgba(0,0,0,.2);
 position: relative;
 margin: 0 20px 20px 0;
}

#order .myInput {
 opacity:0;
 position:absolute;
 top:0;
 top:0;
 width:90px;
 height:90px;
 left:0;
}

#order .myDel {
 color: #fff;
 position: absolute;
 right: -10px;
 top: -7px;
 width: 25px;
 height: 25px;
 border-radius: 25px;
 line-height: 25px;
 background: rgba(0,0,0,.5);
}

效果图

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

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

(0)

相关推荐

  • Vue.js 2.0 移动端拍照压缩图片预览及上传实例

    在学习和使用Vue.js 2.0 的过程中遇到不少不一样的地方,本来移动端开发H5应用,准备将mui框架和Vue.js+vue-router+vuex 全家桶结合起来使用,但是在拍照上传的实现过程中遇到了无法调用plus的H5+接口的问题,所以最后拍照上传功能还是使用input file方式里解决的.但是内心还是不甘心的,由于项目进度推进,迭代版本,所以不得不放弃,后续可能我将此功能使用调用H5+接口实现. 首先我来讲我实现这个拍照预览压缩上传的思路,准确的说应该是拍照或选择图片压缩之后预览及上

  • javascript实现移动端 HTML5 图片上传预览和压缩功能示例

    本文实例讲述了javascript实现移动端 HTML5 图片上传预览和压缩功能.分享给大家供大家参考,具体如下: 在开发移动端web网页中,我们不可避免的会遇到文件上传的功能,但由于手机图片尺寸太大,上传时间过长导致用户体验太差,就需要在上传前对图片进行一定的压缩. 在代码之前,有必要先了解我们即将使用到的几个API file 和 FileList 对象 file对象可以用来获取某个文件的信息,还可以用来读取这个文件的内容.通常情况下,File对象是来自用户在一个 input 元素上选择文件后

  • 详解angularJS+Ionic移动端图片上传的解决办法

    前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有一些冲突,所以我们可以自己写一个图片上传的方法. 今天的demo是帮朋友做的一个移动端微信公众号项目,项目架构采用angular+ionic,因为对dom的操作jQuery会方便很多,但是jQuery比较厚重,所以最后选择用轻量级的zepto来对项目dom进行操作. 项目中有一个需求是上传个人作品,

  • JS移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候的想法是如果给file表单加了 multiple 属性就没有办法调用手机的摄像头拍照了,如果不加,就无法同时选择多张图片,于是我就照实跟同事说了这个情况.但回头一想,单张图片可以上传,那多张图片呢?于是就有了本文的内容. HTML5定义了 FileReader 作为文件 API 的重要成员用于读取文

  • js移动端图片压缩上传功能

    移动端图片压缩上传功能如何实现? 做移动端开发的时候,form里面的file后台经常获取不到,用foemdata也拿不到 找到了一个formdata的脚本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0, maximum-

  • Vue.js 2.0 移动端拍照压缩图片上传预览功能

    在学习和使用Vue.js 2.0 的过程中遇到不少不一样的地方,本来移动端开发H5应用,准备将mui框架和Vue.js+vue-router+vuex 全家桶结合起来使用,但是在拍照上传的实现过程中遇到了无法调用plus的H5+接口的问题,所以最后拍照上传功能还是使用input file方式里解决的.但是内心还是不甘心的,由于项目进度推进,迭代版本,所以不得不放弃,后续可能我将此功能使用调用H5+接口实现. 首先我来讲我实现这个拍照预览压缩上传的思路,准确的说应该是拍照或选择图片压缩之后预览及上

  • javascript html5移动端轻松实现文件上传

    PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. 用的技术主要是: ajax FileReader FormData HTML结构: <div class="camera-area"> <form enctype="multipart/form-data" method="post">

  • javascript实现移动端上传图片功能

    本文实例为大家分享了javascript实现移动端上传图片的具体代码,供大家参考,具体内容如下 核心部分(.html) window.onload = function() { let fileTag = document.getElementById('file'); // console.log(fileTag) // console.log(this.pic) let that = this fileTag.onchange = function() { let file = fileTa

  • JavaScript实现移动端签字功能

    本文实例为大家分享了JavaScript实现移动端签字功能的具体代码,供大家参考,具体内容如下 一.html部分 <div class="mui-content-padded"> <div class="mui-inline"><font style="font-family: '微软雅黑';font-size: 1.2rem;">验收人签字:</font></div> </div

  • javascript实现移动端上的触屏拖拽功能

    本文是分享了javascript实现移动端上的触屏拖拽功能,具体内容如下 效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <meta name="viewport" content="width=device-width, user-scalable=no, initi

  • JavaScript实现预览本地上传图片功能完整示例

    本文实例讲述了JavaScript实现预览本地上传图片功能.分享给大家供大家参考,具体如下: <html> <head> <title>www.jb51.net 图片上传预览</title> <script> function PreviewImage(imgFile) { var pattern = /(\.*.jpg$)|(\.*.png$)|(\.*.jpeg$)|(\.*.gif$)|(\.*.bmp$)/; if (!pattern.t

  • JavaScript实现PC端四格密码输入框功能

    本文实例为大家分享了JavaScript实现PC端四格密码输入框的具体代码,供大家参考,具体内容如下 html代码如下 比较简洁的一个demo <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>四个密码输入框</title> <script type="text/javascript" src="jquery.

  • javascript实现移动端触屏拖拽功能

    本文实例为大家分享了javascript实现移动端触屏拖拽的具体代码,供大家参考,具体内容如下 HTML: <body> <div id="div1"> </div> </body> CSS: <style media="screen"> * { margin: 0; padding: 0; } html,body { width: 100%; height:100%; } #div1 { width: 5

  • JavaScript前端实现压缩图片功能

    为什么要前端来压缩图片 最近在做一个移动端h5上传图片的功能,本来这个功能并不复杂,只需要将图片文件通过axios传到服务端即可,但是考虑到现在手机设配的拍照功能十分强大,随便一张照片都能动辄五六兆,而服务端的要求是上传图片必须小于两兆,而且直接传这么大图片,带宽它也受不了,所以前端进行压缩图片就成了一个必要的环节. 压缩效果 首先介绍下压缩的大概流程 通过原生的input标签拿到要上传的图片文件 将图片文件转化成img元素标签 在canvas上压缩绘制该HTMLImageElement 将ca

  • Java使用Ajax实现跨域上传图片功能

    说明 : 图片服务器是用Nginx搭建的,用的是PHP语言 这个功能 需要 用到两个js文件: jquery.js和jQuery.form.js <script type="text/JavaScript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.form.js"></scri

  • Asp.net使用SignalR实现酷炫端对端聊天功能

    一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少了不像QQ一样的端对端的聊天了.本篇博文将介绍如何使用SignalR来实现类似QQ聊天的功能. 二.使用SignalR实现端对端聊天的思路 在介绍具体实现之前,我先来介绍了使用SignalR实现端对端聊天的思路.相信大家在前篇文章已经看到过Clients.All.sendMessage(name,

随机推荐