首页 > 编程 > JavaScript > 正文

Vue2.0 实现移动端图片上传功能

2019-11-19 13:45:09
字体:
来源:转载
供稿:网友

本文主要介绍VUE2.0图片上传功能的实现。原理是通过js控制和input标签的方式完成这一效果,无需加载其他组件。

效果图如下:

这里写图片描述

1.DOM代码

1.1input标签

 由于我们是通过input标签的方式进行图片上传的,但是input标签的样式有点丑,所以我们隐藏该样式display: none

<input @change="fileChange($event)" type="file" id="upload_file" multiple style="display: none"/>

1.2添加图片按钮

 如果需要用到此方法,只需要在你的上传按钮的地方调用@click=”chooseType”即可,其他部分代码为样式布局仅供参考。

 <div class="add" @click="chooseType"> <div class="add-image" align="center">  <i class="icon-camera"></i> //按钮中的图片是一个icon字体图标  <p class="font13">添加图片</p> </div></div>

1.3图片预览区域

 如果需要用到此方法,只需要在你的预览区域进行v-for循环输出上传的图片集合即可。

<div class="add-img" v-show="imgList.length"> <p class="font14">图片(最多6张,还可上传<span v-text="6-imgList.length"></span>张)</p> <ul class="img-list">  <li v-for="(url,index) in imgList">   <img class="del" src="../../assets/img/home/btn_clean.png" @click.stop="delImg(index)"/>    //del删除样式,icon字体图标需要自己找哦   <img :src="url.file.src">  </li> </ul></div>

1.4图片预览区域-拓展(1.3为简单运用,如果有时间后续会将完整的案例上传)

 如果需要用到此方法,只需要在你的预览区域进行v-for循环输出上传的图片集合即可。本案例还运用的Y-DUI的lightbox组件,如有需要请参照图片预览的调用方式。此处,也调用了vue的懒加载和css背景图自适应的方法。

<div class="add-img" v-show="imgList.length"> <p class="font14">图片(最多6张,还可上传<span v-text="6-imgList.length"></span>张)</p> <ul class="img-list">  <li v-for="(url,index) in imgList">   <img class="del" src="../../assets/img/home/btn_clean.png" @click.stop="delImg(index)"/>   <yd-lightbox>    <div class="app-bg">     <yd-lightbox-img class="app-bg" :original="url.file.src" v-lazy:background-image="{src: url.file.src, error: require('../../assets/img/common/img_placeholder400.png'), loading: require('../../assets/img/common/img_placeholder400.png')}"></yd-lightbox-img>    </div>   </yd-lightbox>  </li> </ul></div>

2.JS代码块

tips:此处的提示弹窗调用的Y-DUI的提示框,可以改成自己的提示框。

<script> export default {  name: "Feedback",  data() {   return {    showFace: false,    imgList: [],    size: 0,    limit:6, //限制图片上传的数量    tempImgs:[]   }  },  methods: {   chooseType() {    document.getElementById('upload_file').click();   },   fileChange(el) {    if (!el.target.files[0].size) return;    this.fileList(el.target);    el.target.value = ''   },   fileList(fileList) {    let files = fileList.files;    for (let i = 0; i < files.length; i++) {     //判断是否为文件夹     if (files[i].type != '') {      this.fileAdd(files[i]);     } else {      //文件夹处理      this.folders(fileList.items[i]);     }    }   },   //文件夹处理   folders(files) {    let _this = this;    //判断是否为原生file    if (files.kind) {     files = files.webkitGetAsEntry();    }    files.createReader().readEntries(function (file) {     for (let i = 0; i < file.length; i++) {      if (file[i].isFile) {       _this.foldersAdd(file[i]);      } else {       _this.folders(file[i]);      }     }    });   },   foldersAdd(entry) {    let _this = this;    entry.file(function (file) {     _this.fileAdd(file)    })   },   fileAdd(file) {    if (this.limit !== undefined) this.limit--;    if (this.limit !== undefined && this.limit < 0) return;    //总大小    this.size = this.size + file.size;    //判断是否为图片文件    if (file.type.indexOf('image') == -1) {     this.$dialog.toast({mes: '请选择图片文件'});    } else {     let reader = new FileReader();     let image = new Image();     let _this = this;     reader.readAsDataURL(file);     reader.onload = function () {      file.src = this.result;      image.onload = function(){       let width = image.width;       let height = image.height;       file.width = width;       file.height = height;       _this.imgList.push({        file       });       console.log( _this.imgList);      };      image.src= file.src;     }    }   },   delImg(index) {    this.size = this.size - this.imgList[index].file.size;//总大小    this.imgList.splice(index, 1);    if (this.limit !== undefined) this.limit = 6-this.imgList.length;   },   displayImg() {   }  } }</script>

3.CSS样式代码块,仅供参考

太太懒了,没有一一区分

 .app-bg >>>img{  width: 100%;  height: 100%;  -webkit-transform: scale(1.03);  -moz-transform: scale(1.03);  -ms-transform: scale(1.03);  -o-transform: scale(1.03);  transform: scale(1.03); } textarea {  padding: 10px; } .text-length {  font-size: 14px;  z-index: 999;  width: 100%;  text-align: right;  margin-bottom: 10px;  color: #e4e4e4; } .warning {  color: #fe9900; } .add-img {  width: 100%;  padding: 10px; } .add-img p {  color: #999; } .mui-content {  padding-bottom: 60px; } .mui-content .idea {  margin-top: 8px;  background-color: #FFFFFF; } .good-item {  text-align: center;  width: 33%;  max-width: 100%;  overflow: hidden;  padding-right: 10px;  padding-bottom: 10px;  float: left; } .good-item span {  font-size: 15px;  height: 30px;  line-height: 30px;  border-radius: 50px;  display: block;  width: 100%;  color: #333;  overflow: hidden;  white-space: nowrap;  text-overflow: ellipsis;  border: 1px solid #CCCCCC; } .mui-table {  padding-top: 10px;  color: #333;  padding-left: calc(0.5% + 10px); } .h-line-behind {  line-height: 40px;  padding-left: 10px; } .question {  border: 0;  margin-bottom: 10px; } .add {  display: inline-block;  margin-bottom: 20px; } .add-image {  padding-top: 15px;  margin-left: 10px;  width: 80px;  top: 20px;  height: 80px;  border: 1px dashed rgba(0, 0, 0, .2); } .add-image .icon-camera {  font-size: 24px; } .good-item .choose {  color: #fff;  background-color: #87582E;  color: #FFF;  border: 0; } .mui-btn-block {  border: 0;  border-radius: 0;  background-color: #87582E;  color: #fff;  margin-bottom: 0;  bottom: 0; } .mui-buttom {  position: fixed;  width: 100%;  bottom: 0;  z-index: 999; } /*九宫格*/ .img-list {  overflow: hidden; } .img-list > li {  float: left;  width: 32%;  text-align: center;  padding-top: 31%;  margin-left: 1%;  margin-top: 1%;  position: relative; } .img-list > li > div {  position: absolute;  left: 0;  top: 0;  width: 100%;  height: 100%;  overflow: hidden; } .img-list > li > div .app-bg {  width: 100%;  height: 100%; } .mui-fullscreen {  z-index: 9999; } .del {  position: absolute;  width: 18px;  top: 0;  right: 0;  z-index: 999 }

以上所述是小编给大家介绍的Vue2.0 移动端图片上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表