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事件热键兼容ie|firefox
Dec 30 Javascript
js获取php变量的实现代码
Aug 10 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
javascirpt实现2个iframe之间传值的方法
Jun 30 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
openLayer4实现动态改变标注图标
Aug 17 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
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
python 实现敏感词过滤的方法
2019/01/21 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
python绘制分布折线图的示例
2020/09/24 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
主持人演讲稿范文
2013/12/28 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
化妆品活动策划方案
2014/05/23 职场文书
维修工先进事迹
2014/05/29 职场文书
专业见习报告范文
2014/11/03 职场文书
环卫工人慰问信
2015/02/15 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
毕业实习感受与体会
2015/05/26 职场文书
创业计划书之熟食店
2019/10/16 职场文书
mysql 索引合并的使用
2021/08/30 MySQL