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 相关文章推荐
JS启动应用程序的一个简单例子
May 11 Javascript
匹配任意字符的正则表达式写法
Apr 29 Javascript
使用Firebug对js进行断点调试的图文方法
Apr 02 Javascript
JS高级笔记
Jul 13 Javascript
Javascript日期格式化format函数的使用方法
Aug 30 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
Jul 04 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php 使用array函数实现分页
2015/02/13 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
原生js实现节日时间倒计时功能
2017/01/18 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
跟老齐学Python之类的细节
2014/10/13 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
悬挂训练绳:TRX
2017/12/14 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
青春无悔演讲稿
2014/05/08 职场文书
物业管理工作方案
2014/05/10 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
复兴之路观后感
2015/06/02 职场文书
会计岗位工作总结
2015/08/12 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
详解Laravel框架的依赖注入功能
2021/05/27 PHP
MySQL插入数据与查询数据
2022/03/25 MySQL