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 相关文章推荐
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
express框架实现基于Websocket建立的简易聊天室
Aug 10 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
微信小程序实现复选框效果
Dec 28 Javascript
javascript中join方法实例讲解
Feb 21 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
js时间转换毫秒的实例代码
Aug 21 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
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处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
java必学必会之static关键字
2015/12/03 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python 2.7.14安装图文教程
2018/04/08 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python实现马丁策略的实例详解
2021/01/15 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
C/C++有关内存的思考题
2015/12/04 面试题
检查接待方案
2014/02/27 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
产品推广策划方案
2014/05/10 职场文书
关于运动会的口号
2014/06/07 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014年超市工作总结
2014/11/19 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
Python简易开发之制作计算器
2022/04/28 Python
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis