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 相关文章推荐
有关DOM元素与事件的3个谜题
Nov 11 Javascript
javascript采用数组实现tab菜单切换效果
Dec 12 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
javascript中setTimeout的问题解决方法
May 08 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
canvas实现绘制吃豆鱼效果
Jan 12 Javascript
javascript 秒表计时器实现代码
Mar 09 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
详解js模板引擎art template数组渲染的方法
Oct 09 Javascript
uni-app如何页面传参数的几种方法总结
Apr 28 Javascript
ES2020让代码更优美的运算符 (?.) (??)
Jan 04 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
VUE重点问题总结
2018/03/19 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
js实现小时钟效果
2020/03/25 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Django框架自定义session处理操作示例
2019/05/27 Python
Python计算信息熵实例
2020/06/18 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
零件设计自荐信范文
2013/11/27 职场文书
个性大学生自我评价
2013/12/04 职场文书
水毁工程实施方案
2014/04/01 职场文书
《社戏》教学反思
2014/04/15 职场文书
六一亲子活动总结
2014/07/01 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
2015年统战工作总结
2015/05/19 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL