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

前端之家收集整理的这篇文章主要介绍了Vue2.0 实现移动端图片上传功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

效果图如下:

这里写图片描述

1.DOM代码

1.1input标签

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

1.2添加图片按钮

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

//按钮中的图片是一个icon字体图标

添加图片

1.3图片预览区域

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

图片(最多6张,还可上传张)

    删除样式,icon字体图标需要自己找哦

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

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

图片(最多6张,还可上传张)

    Box-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')}">

2.JS代码

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

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() { } } }

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

太太懒了,没有一一区分

>>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,.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 移动端图片上传功能。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

原文链接:https://www.f2er.com/vue/32084.html

猜你在找的Vue相关文章