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 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
Ionic2开发环境搭建教程
Aug 20 Javascript
原生JS获取元素的位置与尺寸实现方法
Oct 18 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
Oct 10 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
JavaScript Array对象使用方法解析
Sep 24 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
微信小程序的引导页实现代码
Jun 24 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内存使用情况如何获取
2015/10/10 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python的gevent框架的入门教程
2015/04/29 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
技校生自我鉴定范文
2013/09/26 职场文书
端午节演讲稿
2014/05/23 职场文书
黑白记忆观后感
2015/06/18 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android
你需要掌握的20个Python常用技巧
2022/02/28 Python
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android