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中的prototype使用说明
Apr 13 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
Jun 23 Javascript
详解JS-- 浮点数运算处理
Nov 28 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
ckeditor一键排版功能实现方法分析
Feb 06 Javascript
vue render函数动态加载img的src路径操作
Oct 26 Javascript
js作用域及作用域链工作引擎
Jul 07 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
python tornado修改log输出方式
2019/11/18 Python
python如何调用java类
2020/07/05 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
护理专业推荐信
2013/11/07 职场文书
个人评价范文分享
2014/01/11 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
教师求职自荐信
2014/03/09 职场文书
yy生日主持词
2014/03/20 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
采购员岗位职责
2015/02/03 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android