前言: 之前项目需求,需要找一个预览图的组件,最开始,找了vue-preview组件。因为vue-preview是直接引入 < vue-preview>这个标签,无法看到对组件里面的图片img进行操作。后来,需求变更,需要在缩略图下面添加文字,所以,又在网上找了v-viewer组件,发现这个组件是缩略图功能还挺齐全的,文档资料也很详细,在此记录一下。(移动端用vant-ui的imgpreview挺不错的)

一、先安装依赖

npm install v-viewer --save

二、在main.js内引用并注册调用

//引入v-viewer
//注册
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'
// 使用
Vue.use(Viewer);
Viewer.setDefaults({'inline':false,//是否直接展示'button':true, //右上角按钮"navbar": true, //底部缩略图"title": true, //当前图片标题"toolbar": true, //底部工具栏"tooltip": true, //显示缩放百分比"movable": true, //是否可以移动"zoomable": true, //是否可以缩放"rotatable": true, //是否可旋转"scalable": true, //是否可翻转"transition": true, //使用 CSS3 过度"fullscreen": true, //播放时是否全屏"keyboard": true, //是否支持键盘"url": "data-source",debug: true,defaultOptions: {zIndex: 9999}
});

三、在vue页面中使用

<template><div v-viewer="options" class="images clearfix" v-if="detailShow"><template v-for="{source, thumbnail ,index,captureTime} in images"><template><div class="imgList"><img :src="thumbnail"onerror="this.src='http://xxxx-smartgo.oss-cn-shanghai.aliyuncs.com/haik/placeholder.png'" :data-source="source" class="image" :key="index" alt=""><i class="imageDate"><i>{{captureTime}}</i></i></div></template></template></div>
</template>
<script>
export default {data() {return {options: {toolbar: true,url: 'data-source'},sourceImages:[],images:[],}},methods:{handleClick(row) {//查看按钮this.getThirdHaikEventList(row.indexCode);},//根据设备获取报警图片async getThirdHaikEventList(val) {this.loading = true;const params = {v: "v1.0",type: 8008,start: this.pageNumPhoto ? this.pageNumPhoto : '0',limit: '12',deviceIndexCode: val,beginTime: startTime,endTime: endTime,eventType: '131594', //事件类型};let data = await this.$http.get('/bi/elevatorMonitor/getThirdHaikEventList', { params });if (data && Object.keys(data).length) {data.list.forEach(item => {item.source = item.imageUrl;  //大图item.thumbnail = item.imageUrl;  //小图item.index = item.id;item.captureTime = item.createTime.slice(0,4) + '年' + item.createTime.slice(5,7) + '月' + item.createTime.slice(8,10) + '日' + '' + item.weekStr + item.createTime.slice(10);})this.sourceImages = data.list;this.images = data.list;this.totalPhoto = data.total;this.loading = false;if(data.list.length > 0){this.detailShow = true;}    }else {this.sourceImages = [];this.images = [];this.totalPhoto = data.total;this.loading = false;}},}
}
</script>
<style lang="scss" rel="stylesheet/scss" scoped>.imgList{float: left;width: calc(24% - 10px);margin: 5px;
}
.image {width: 100%;cursor: pointer;display: inline-block;
}
.imageDate{display: inline-block;width: 100%;text-align: center;color: #000;i {font-style: normal;}
}
</style>

效果图如下所示:

四、扩展问题

1.onerror事件
     背景: 在实际开发中,当出现网速较慢的时候,部分图片会因为加载不出来,而出现破损的问题。所以,我们可以使用占位符图片。通过给img添加onerror事件,来解决这个问题。
    定义和用法:onerror事件在加载外部文件(文档或图像)发生错误时触发。

<img :src="thumbnail"onerror="this.src='http://xxxx-smartgo.oss-cn-shanghai.aliyuncs.com/haik/placeholder.png'" :data-source="source" class="image" :key="index" alt="">

2. vue相关报错:< template v-for> key should be placed on the < template> tag
    因为示例中,将v-for循环写在了template标签中,导致编辑器出现“< template v-for> key should be placed on the < template> tag”。

     原因 : v-for是循环指令,它会返回多个值,而这里的template是根节点,根节点,根节点只有一个,根节点不能有多个,所以v-for写在根节点上就有问题。
     解决 : 在其外面可以包裹一层div,使其不是根节点即可。加div会被渲染出来,如果不想被渲染,也可以加template标签即可。

<div v-viewer="options" class="images clearfix" v-if="detailShow"><template v-for="{source, thumbnail ,index,captureTime} in images"><template><div class="imgList"><img :src="thumbnail"onerror="this.src='http://xxxx-smartgo.oss-cn-shanghai.aliyuncs.com/haik/placeholder.png'" :data-source="source" class="image" :key="index" alt=""><i class="imageDate"><i>{{captureTime}}</i></i></div></template></template>
</div>

解释: 在一个组件中怎么会有多个template嵌套?第二个template其实相当于自带隐藏属性的容器,这里也可以用div来代替,但div的话就会被渲染成元素。
第二个template可以放执行语句,最终编译后不会被渲染成元素。一般常和v-for和v-show一起结合使用,这样,会使整个html结构没有那么多多余的元素,整个结构会更加清晰。

五、v-viewer相关资料

①v-viewer文档资料 https://mirari.cc/2017/08/27/Vue%E5%9B%BE%E7%89%87%E6%B5%8F%E8%A7%88%E7%BB%84%E4%BB%B6v-viewer%EF%BC%8C%E6%94%AF%E6%8C%81%E6%97%8B%E8%BD%AC%E3%80%81%E7%BC%A9%E6%94%BE%E3%80%81%E7%BF%BB%E8%BD%AC%E7%AD%89%E6%93%8D%E4%BD%9C/
    ②v-viewer实例Demo网站 https://mirari.cc/v-viewer/
    ③v-viewer的github地址 https://github.com/mirari/v-viewer
    ④v-viewer使用指令的示例 https://github.com/mirari/v-viewer/blob/master/example/views/example/DirectiveExample.vue

参考博客: vue viewerjs实现图片预览旋转/放大缩小/上下切换等功能 https://segmentfault.com/a/1190000039952732?utm_source=sf-similar-article
        vue图片点击放大预览 https://www.cnblogs.com/zhengzemin/p/v-viewer_vue-photo-preview.html
        v-viewer 预览图简单使用 https://www.jianshu.com/p/80771b3956fd/
        onerror 事件 https://m.runoob.com/jsref/event-onerror.html
https://www.cnblogs.com/willingtolove/p/9544576.html
        vue中中v-for的使用以及多层嵌套问题 https://www.cnblogs.com/jennydtt/p/10277493.html
        VUE 设置加载默认图片 https://www.jianshu.com/p/72b7350a136f
        图片加载失败优化处理 https://www.cnblogs.com/zhuzhenwei918/p/6891368.html

v-viewer预览图的使用(图片预览旋转/放大缩小/上下切换等)相关推荐

  1. 不同手机型号图文预览_手机端图片预览查看

    图片预览 /*正式样式 start*/.wrap{width:100%; }.head-box{height:40px;background:#4ecbf3;width:100%;text-align ...

  2. Android图片查看支持双击放大缩小、多点触摸(多机型测试,长期使用很稳定)

    该模块主要实现了放大和原大两个级别的缩放. 另外功能更加强大的一个类见本人另一篇博客 http://blog.csdn.net/gfg156196/article/details/49741233#r ...

  3. uni-app图片如何设置双指放大缩小

    图片设置双指放大缩小这个功能相对来说比较简单的,是用于官方文档的路径(组件->视图容器->movable-area),movable-area可以做双指放大缩小,并且放大的同时可以左右移动 ...

  4. html 图片在一个div中放大缩小效果

    图片放大,缩小也是前端中经常遇到得问题,以下就根据这个需求,做如下示范: <!DOCTYPE html> <html> <head><title>图片放 ...

  5. 【Mac 教程系列第 3 篇】如何用 Mac 预览图工具修改图片的分辨率

    这是[Mac 教程系列第 3 篇],如果觉得有用的话,欢迎关注专栏. 修改图片分辨率,可能你首先想到的是 PS ,其实 Mac 自带的预览图工具就可以修改,下面简单说下修改过程. 第一步 双击打开要修 ...

  6. vue点击预览图片插件(可放大缩小翻转等)

    开发工具webstorm 首先npm安装插件:npm install viewerjs 然后再main.js中引用 import Viewer from 'v-viewer' import 'view ...

  7. 超大超长图片居中显示且放大缩小无影响

    1. 超大图片居中显示 1.1 放大缩小都居中显示 <!DOCTYPE html> <html lang="en"> <head> <me ...

  8. 背景图片随页面滚动放大缩小

    我是用jq写的所以先引入了jquery.js剩下的就是和我之前写的头部导航栏差不多是一样的 $(window).scroll(function() {//首先监听页面滚动 p = $(this).sc ...

  9. ios html5缩小,IOS H5页面图片点击捏合放大缩小

    方式是以注入JS代码的方式,遍历所有的图片img标签,然后通过js获取到图片的url地址,然后自己再做点击弹出图片页面和添加捏合手势,代码如下(方法来自网络,从他人出学习来的,原文章地址找不到了... ...

最新文章

  1. OpenGL中的VAO和VBO使用技巧
  2. e.getMessage 为空NULL
  3. 【百度联盟峰会】李彦宏详解AI时代思维方式,算法驱动的降维攻击
  4. 【深度学习】图片分类CNN模板
  5. Kafka消息的可靠性
  6. 这个关系国计民生的“黑盒子” 我们造出来了
  7. matlab求傅里叶级数展开式_明明学过积分和三角函数就能秒理解傅里叶变换.........
  8. Python字符串常用操作方法
  9. Openfire服务端安装和配置
  10. 清华姚班、斯坦福博士、普林斯顿NLP组创始人 陈丹琦 获小诺奖之称的斯隆奖!...
  11. GdiPlus[45]: IGPGraphics (四) 关于呈现质量与合成模式
  12. 思科模拟器5506防火墙配置_企业办公网络配置不求人之二
  13. 郝斌C语言开篇 C语言简介
  14. A股市场周内效应研究
  15. GCC种builtin函数的介绍以及实现过程(1)
  16. 【前端面试宝典】超基础的vue知识
  17. vw 前端_px转vw和vh的工具(对前端同学有用)
  18. 低成本FPV制作记录(空心杯+2.5寸FPV)
  19. 多看阅读怎么更换背景图
  20. 利用Try-with-resources(TWR)读取Excel文件

热门文章

  1. 《魔兽争霸3》魔兽攻防算法
  2. 一骑绝尘的大疆无人机,正在遭遇对手围攻光明顶?
  3. 专家不建议年轻人掏空六个钱包凑首付
  4. Photoshop - 如何用 PS 合成一张 Sprite 图(雪碧图)
  5. bert获得词向量_BERT烹饪之法:fintune 的艺术
  6. python 安装Crypto库
  7. 计算机教室标语6个字,教室横幅标语60句
  8. 星厨齐聚,演绎致美奢厨:2022米兰家具展中的ASKO×NORM展厅
  9. 【Autoware规控】PurePursuit纯跟踪控制节点
  10. Gobinet QMI-WWAN区别