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 相关文章推荐
javascript getElementsByTagName
Jan 31 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
Dec 14 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
Jan 05 Javascript
BootStrapTable 单选及取值的实现方法
Jan 10 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
对angularJs中$sce服务安全显示html文本的实例
Sep 30 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 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中函数内引用全局变量的方法
2008/10/20 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
php微信开发之谷歌测距
2018/06/14 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
生产管理的三大手法
2013/11/11 职场文书
聘任书模板
2014/03/29 职场文书
公司请假条范文
2014/04/11 职场文书
学校安全防火方案
2014/06/07 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
就业导师推荐信范文
2015/03/27 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers
使用Apache Camel表达REST服务的方法
2022/06/10 Servers