vue实现图片上传预览功能


Posted in Javascript onDecember 23, 2019

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

效果图

vue实现图片上传预览功能

html结构

<ul class="gallery-window-map" style="flex-wrap:wrap;">
 <!--点击上传按钮-->
 <li class="house-pic-item" v-if="!(!item.isNew&&editBtnType[index])" @click="houseUpload(index)">
  <div class="pic-box">
   <span class="iconfont icon-zengjia"></span>
   <h5 class="btn-tit">点击上传</h5>
  </div>
 </li>
 <!--展示区域-->
 <viewer :images="item.imgUrl">
  <li class="house-pic-item" v-for="(picItem, picIndex) in item.imgUrl" :key="picIndex">
   <img :src="picItem" alt="" :key="picItem" width="120" height="90" :ref="'showImg_'+index">
   <div class="mask">
    <div class="ico-box">
     <span class="font-btn" @click="clickWatchImg('showImg_'+index,picIndex)">
      <i class="iconfont icon-fangda"></i>
     </span>
     <span class="font-btn" v-if="!(!item.isNew&&editBtnType[index])" @click="delHouseImage(index,picIndex)">
      <i class="iconfont icon-shanchu"></i>
      <i class="line"></i>
     </span>
    </div>
   </div>
  </li>
 </viewer>
</ul>

css样式

.gallery-window-map{
 display: -webkit-box;
 display: -ms-flexbox;
 display: flex;
 margin-top: 10px;
}
.house-pic-item {
 position: relative;
 display: inline-block;
 margin-right: 13px;
 width: 120px;
 height: 90px;
 background-color: #e3e3e3;
}
.pic-box {
 width: 100%;
 text-align: center;
}
.icon-zengjia {
 position: relative;
 top: 12px;
 font-size: 26px;
 color: #b2b2b2;
}
.btn-tit {
 height: 38px;
 line-height: 38px;
 font-size: 12px;
 color: #999;
}
.mask {
 display: none;
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 background: rgba(34, 34, 34, 0.6);
}
.font-btn {
 display: inline-block;
 height: 40px;
 width: 50%;
 padding: 0 20px;
 -webkit-box-sizing: border-box;
 box-sizing: border-box;
}
.font-btn:last-child {
 position: relative;
}
.icon-fangda,
.icon-shanchu {
 font-size: 22px;
 color: #fff;
}
.line {
 content: '';
 display: inline-block;
 position: absolute;
 left: 0;
 top: 10px;
 width: 1px;
 height: 20px;
 background: #fff;
}
/** 
 * 模拟点击上传图片按钮
* @index 当前操作的户型box的索引
*/
houseUpload(index) {
 this.$refs.houseTypeLoad[index].click()
},
/** 
* 上传图片到服务器
* @index 当前操作的户型box的索引
*/
upLoadHouse(e, index) {
 let _that = this
 const file = e.target.files[0]
 if (!file) {
 return
 }
 new ImageCompressor(file, {
 quality: 0.9,
 maxWidth: 2000,
 maxHeight: 2000,
 success(result) {
 // debugger
 const formData = new FormData()
 formData.append('file', result, result.name)
 formData.append('watermark', false)
 // Send the compressed image file to server with XMLHttpRequest.
 if (result.size > 1 * 1024 * 1024 || result.size < 3 * 1024) {
 _that.$message('图片大小要在3K~1M之间')
 return
 } else {
 _that.$ajax.post('/img/upload', formData).then(res => {
 res = res.data
 if (res.images && res.images.length > 0) {
  if (res.images[0].src !== 'file size is too small') {
  let item = res.images[0].src
  console.log(item)
  _that.houseTypeForm[index].imgUrl.unshift(item)
      }
     }
 })
   }
   },
   error(e) {
   console.log(e.message)
   }
  })
  },
/** 
 * 打开图片查看器
 */
clickWatchImg(str, picIndex) {
console.log('=================')
console.log(picIndex)
console.log(this.$refs[str][picIndex])
this.$refs[str][picIndex].click()
},
 /** 
 * 删除指定图片,操作表单数据
* @index 当前操作的户型box的索引
* @picIndex 当前操作的图片索引
*/
delHouseImage(index, picIndex) {
 this.houseTypeForm[index].imgUrl.splice(picIndex, 1)
},

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

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

Javascript 相关文章推荐
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
Mar 12 Javascript
JavaScript的9种继承实现方式归纳
May 18 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
JavaScript基础教程——入门必看篇
May 20 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
关于Vue的路由权限管理的示例代码
Mar 06 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
Sep 16 Javascript
vue项目实现图片上传功能
Dec 23 #Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 #Javascript
vue图片上传组件使用详解
Dec 23 #Javascript
微信小程序实现签字功能
Dec 23 #Javascript
使用JS location实现搜索框历史记录功能
Dec 23 #Javascript
vue实现移动端图片上传功能
Dec 23 #Javascript
vue实现拖拽效果
Dec 23 #Javascript
You might like
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
微信小程序开发探究
2016/12/27 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Vue实现手机计算器
2020/08/17 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
wxPython的安装与使用教程
2018/08/31 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
关于空气污染危害的感想
2015/08/11 职场文书
如何做好工作总结!
2019/04/10 职场文书
创业计划书之美甲店
2019/09/20 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL