vue3使用viewer
介绍
v-viewer是一款基于viewer.js的强大的插件,不但支持vue3版本,还支持vue2、JavaScript、jquery,有以下特点:
- 支持移动设备触摸事件
- 支持响应式
- 支持放大/缩小
- 支持旋转(类似微博的图片旋转)
- 支持水平/垂直翻转
- 支持图片移动
- 支持键盘
- 支持全屏幻灯片模式(可做屏保)
- 支持缩略图
- 支持标题显示
- 支持多种自定义事件
官网
官方网站
网站里介绍了三种用法,基本用法写的很详细了,这边就不再赘述,主要讲讲我使用这个插件的心路历程
需求
接到任务要求写一个图片查看标注系统,主要功能就是能查看图片、缩放,并对图片进行添加、删除标签的操作,并且明确不要用element的图片查看器,说是不好用……随手一百度就能找到这款viewer.js,经过一番探索,发现居然还有支持vue2、支持vue3的版本,开心!就决定用你啦!(还是开心的太早了……)
系统功能
系统包含一下功能:
- 切换图片要获取到当前展示的哪一张图片
- 点击图片缩略图可以重新排序并展示当前图片
- 能给当前图片添加标签
- 切换图片时获取当前图片的标签并展示标签
构造页面
页面形式确定后,首先想到是用API形式使用,因为可以随时随地想用就用,但就发现问题了,那就是inline模式下,查看大图的窗口没有办法关闭,会一直罩着,于是就放弃API了,然后就不知道为啥,经过尝试之后选择directive,以指令形式使用,其实组件和指令的都是大同小异,大家看着来就行。
改善页面
inline模式下,查看大图会一直无法关闭,怎么办呢?
改下页面布局,上面部分是图片的缩略图
预想的是点击图片下方主页面部分会切换图片的展示,
HTML部分代码如下
<div class="left"> <div class="imgs" v-viewer.rebuild="options" > <template > <div v-for="class="lazy" data-src in showimages" :key="class="lazy" data-src.name"> <img :class="lazy" data-src="class="lazy" data-src.url" class="img" > div> template> div>div>
官方例子中, 经过研究,在viewer.js中,有一个判断 当用户点击viewer切换图片时,我希望最上面的图片展示也能切换到当前展示的这一张,对viewer来说,有提供几个回调函数,其中就有view和viewed,所以我们只需要在 选中图片的高亮显示只需要动态获取当前选中图片的key或者id,动态添加css就可以了。 这部分大都来自于 用法: 启用modal背景,为单击时不会关闭模态的背景指定静态 是否显示右上角关闭按钮 是否显示缩略图导航 指定标题的可见性和内容 指定工具栏及其按钮的可见性和布局。 要添加到viewer根元素的自定义类名。 Document.querySelector的元素或有效选择器,用于将viewer置于modal模式的容器。只在inline:false时有效 没用过,不知道具体能填哪些字段 指定筛选图片的函数,会遍历每张图片,return true的图片展示,return false的图片隐藏,所以function应有返回值 注意,默认情况下,没有class="lazy" data-src属性集的图像将被忽略 自动播放时是否全屏 定义要从原始图像继承的额外属性。 注意,基本属性class="lazy" data-src和alt将始终继承自原始图像。 定义查看图像的初始覆盖范围。它必须是介于0(0%)和1(100%)之间的正数。 定义要查看的图像的初始索引。指定开始查看图像的下标 也用作视图方法的默认参数值。 启用内联模式 播放时自动循环图像之间的间隔时间。单位:hms 是否允许用键盘操作(操作放大缩小、上一张下一张的功能) Focus the active item in the navbar when initialized. 需要将keyboard设置为true 加载图像时是否显示加载微调器。 是否启用循环查看(查看到最后一张,再点下一张跳转到第一张) 指定viewer的最小宽度 只在inline是true时生效 指定viewer的最小宽度 只在inline是true时生效 是否可以移动图片 是否允许旋转图片 是否可以缩放图像 是否可以缩放图像 是否开启触摸缩放图像功能 是否开启鼠标缩放图像功能 通过在触摸屏上滑动,可以滑动到下一个或上一个图像 是否在双击图像时在其自然大小和初始大小之间切换图像大小;双击图像时自动调用切换方法 是否显示缩放百分比 是否使用CSS3过度 图片查看器modal模式时z-index值 图片查看器inline模式时z-index值 鼠标滚轮滚动时缩放比例 最小缩放比例 最大缩放比例 设置查看图片时的图片地址来源 回调函数,就绪时调用 回调函数,加载展示图层前调用 回调函数,加载展示图层完成后调用 回调函数,点击关闭展示按钮时调用 回调函数,展示图层关闭前调用 回调函数,加载展示图片前调用 回调函数,加载展示图片后调用 回调函数,图片移动时调用 回调函数,图片异动后调用 回调函数,图片旋转前调用 回调函数,图片旋转后调用 回调函数,图片缩放前调用 回调函数,图片缩放后调用 回调函数,图片缩放前调用 回调函数,图片缩放后调用 回调函数,图片开始自动播放时调用 回调函数,图片停止自动播放时调用 用法:获取到实例 是否立即显示查看器,只在modal模式下有效 使用viewer查看下标为index的图片。如果viewer被隐藏,改图片将首先显示 是否设置第一张图片的上一张是最后一张图片(头尾相接) 是否设置最后一张图片的下一张是第一一张图片(头尾相接) 使用相对偏移移动图像 x: y (optional): Move the image with relative offsets. 移动图像到指定位置 x: y (optional): 在原来的基础上旋转图像 旋转图像至指定角度 图像翻转 scaleX: scaleY (optional): 图像水平方向翻转 图像竖直方向翻转 以指定比例缩放图像 ratio: showTooltip (optional): pivot (optional): 缩放图像到指定比例 ratio: showTooltip (optional): pivot (optional): Play the images. 停止播放 inline模式下有效,播放时全屏 退出全屏 所有事件都可以在其处理程序中使用 Be careful to use these events with other components which have the same event names, e.g.: Bootstrap’s modal. 在 This event fires when the viewer modal has shown. Only available in modal mode. This event fires when the viewer modal starts to hide. Only available in modal mode. This event fires when the viewer modal has hidden. Only available in modal mode. This event fires when a viewer starts to show (view) an image. This event fires when a viewer has shown (viewed) an image. This event fires when a viewer starts to move an image. This event fires when a viewer has moved an image. This event fires when a viewer starts to rotate an image. This event fires when a viewer has rotated an image. This event fires when a viewer starts to scale an image. This event fires when a viewer has scaled an image. This event fires when a viewer starts to zoom (in or out) an image. This event fires when a viewer has zoomed (in or out) an image. This event fires when the viewer starts to play. You can abort the playing process by calling This event fires when the viewer starts to stop. You can abort the stopping process by calling 来源地址:https://blog.csdn.net/weixin_44364294/article/details/129010981 免责声明: ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。 ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341 下载Word文档到电脑,方便收藏和打印~ 反馈 我要中是没有
标签上加key会报错,所以就再加了一层
showimages
里面添加、删除元素时,整个页面看起来没有变化……也就是这个变动对viewer
来说没有生效。 解决办法
image
数组是否发生变化的函数imageDiff
,在这个函数中,判断是否发生变化的条件是,获取指令元素的子元素中的标签,而我用
会导致找到的
个数为0,所以导致无法更新
image
数组。所以解决的办法就是直接写元素或者
template
下不要写
就这个问题,看了一早上才看出来问题…呜呜呜我是菜鸡前端。解决这个问题之后,只需要改变数组顺序,对数组进行操作就可以实现切换展示图片。 切换图片的回调函数
options
中定义好view函数,就可以获取到当前展示的数据的下标,或者e.detail.image
对象下有class="lazy" data-src
和currentclass="lazy" data-src
字段分别记录了图片文件名和图片路径,可以根据这个高亮显示当前选中的图片。
其实是有更好的方法,就是viewer
自带view(index)
方法可以指定查看图片的下标,但是这个我调用了没有生效,所以暂时用 平替方法代替,就是修改viewer
展示数组顺序,这样会销毁重绘viewer
,使用起来体验是没什么区别的。选中的图片高亮显示
在viewer中,有一个图片切换完成的回调函数viewed
,还有切换图片之前的回调函数view
,可以根据需要在option中设置。当用户点击上一张或下一张的时候,回调函数的入参会有e.detail.index
,这个是当前图片在数组中的下标,可以根据下标获取到当前图片的信息。其他整理
viewer.js
官方文档,v-viewer
是基于viewer.js
的Options
Viewer.setDefaults(options)options = {inline :true,fullsreen: false}
inline
Boolean
是否启用inline模式—inline模式就是在区域内展示,不是全屏幕覆盖backdrop
Boolean
or String
true
button
Boolean
true
navbar
Boolean
or Number
true
0
or false
: 隐藏缩略图导航
1
or true
: 显示缩略图导航
2
: 仅当屏幕宽度大于768像素时显示导航栏
3
: 仅当屏幕宽度大于992像素时显示导航栏
4
: 仅当屏幕宽度大于1200像素时显示导航栏title
Boolean
or Number
or Function
or Array
true
0
or false
: 不显示标题
1
or true
or Function
or Array
:显示标题
2
: 仅当屏幕宽度大于768像素时显示标题
3
: 仅当屏幕宽度大于992像素时显示标题
4
: 仅当屏幕宽度大于1200像素时显示标题
Function
: 自定义标题内容
[Number, Function]
: Number
指示可见性,Function
自定义标题内容toolbar
Boolean
or Number
or Object
true
0
or false
: 隐藏工具栏.
1
or true
: 显示工具栏.
2
: 仅当屏幕宽度大于768像素时显示工具栏
3
: 仅当屏幕宽度大于992像素时显示工具栏
4
: 仅当屏幕宽度大于1200像素时显示工具栏
{ key: Boolean | Number }
: 显示或隐藏工具栏.
{ key: String }
: 自定义工具栏大小(size).
{ key: Function }
: 自定义工具栏按钮的单击处理函数.
{ key: { show: Boolean | Number, size: String, click: Function }
: 自定义按钮的每个属性.
Available built-in keys(key可选项): “zoomIn”, “zoomOut”, “oneToOne”, “reset”, “prev”, “play”, “next”, “rotateLeft”, “rotateRight”, “flipHorizontal”, “flipVertical”.
Available built-in sizes(size可选项): “small”, “medium” (default) and “large”.className
String
''
container
Element
or String
'body'
filter
Function
null
fullscreen
Boolean
or FullscreenOptions
true
inheritedAttributes
Array
['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'class="lazy" data-srcset', 'useMap']
initialCoverage
Number
0.9
initialViewIndex
Number
0
inline
Boolean
false
interval
Number
5000
keyboard
Boolean
true
focus
Boolean
true
loading
Boolean
true
loop
Boolean
true
minWidth
Number
200
minHeight
Number
100
movable
Boolean
true
rotatable
Boolean
true
scalable
Boolean
true
zoomable
Boolean
true
zoomOnTouch
Boolean
true
zoomOnWheel
Boolean
true
slideOnTouch
Boolean
true
toggleOnDblclick
Boolean
true
tooltip
Boolean
true
transition
Boolean
true
zIndex
Number
2015
zIndexInline
Number
0
zoomRatio
Number
0.1
minZoomRatio
Number
0.01
Define the min ratio of the image when zooming out.maxZoomRatio
Number
100
Define the max ratio of the image when zooming in.url
如果它是一个字符串,它应该是每个图像元素的属性之一。
如果它是一个函数,它应该返回一个有效的图像URL。String
or Function
'class="lazy" data-src'
ready
Function
null
show
Function
null
shown
Function
null
hide
Function
null
hidden
Function
null
view
Function
null
viewed
Function
null
move
Function
null
moved
Function
null
rotate
Function
null
rotated
Function
null
scale
Function
null
scaled
Function
null
zoom
Function
null
zoomed
Function
null
play
Function
null
stop
Function
null
method
const viewer = this.$el.querySelector('.viewer').$viewer viewer.show()
show([immediate])
Boolean
false
view([index])
Number
0
(继承自 initialViewIndex
)viewer.view(1); // 展示下标是1的图片(第二张)
prev([loop=false])
Boolean
false
next([loop=false])
Boolean
false
move(x[, y = x])
Number
Number
x
viewer.move(1);viewer.move(-1, 0); // 左移viewer.move(1, 0); // 右移viewer.move(0, -1); // 上移viewer.move(0, 1); // 下移
moveTo(x[, y = x])
Number
Number
x
相同.rotate(degree)
Number
viewer.rotate(90);viewer.rotate(-90);
rotateTo(degree)
Number
viewer.rotateTo(0); // 转到0°viewer.rotateTo(360); // 转一圈
scale(scaleX[, scaleY])
Number
1
1
时,不起作用Number
x
viewer.scale(-1); // Flip both horizontal and verticalviewer.scale(-1, 1); // Flip horizontalviewer.scale(1, -1); // Flip vertical
scaleX(scaleX)
Number
1
viewer.scaleX(-1); // Flip horizontal
scaleY(scaleY)
Number
1
1
时不起作用,不会发生变化viewer.scaleY(-1); // Flip vertical
zoom(ratio[, showTooltip[, pivot]])
Number
Boolean
false
Object
null
{ x: Number, y: Number }
viewer.zoom(0.1);viewer.zoom(-0.1);
zoomTo(ratio[, showTooltip[, pivot]])
Number
Boolean
false
Object
null
{ x: Number, y: Number }
viewer.zoomTo(0); // Zoom to zero size (0%)viewer.zoomTo(1); // Zoom to natural size (100%)// Zoom to 50% from the center of the window.viewer.zoomTo(.5, { x: window.innerWidth / 2, y: viewer.innerHeight / 2,});
play([fullscreen])
Boolean
or FullscreenOptions
false
stop()
full()
exit()
inline模式下有效Events
this.viewe
访问查看器实例。
let viewer;image.addEventListener('viewed', function () { console.log(this.viewer === viewer); // > true});viewer = new Viewer(image);
ready
viewer
准备好的时候会触发此事件,在modal
模式下,只有点击查看了图片才会触发此事件true
true
null
show
viewer
show
的时候会触发此事件,只在modal
模式下有效true
true
null
shown
true
true
null
hide
true
true
null
hidden
true
false
null
view
true
true
Number
HTMLImageElement
HTMLImageElement
viewed
true
false
view
event.move
true
true
Number
Number
Number
Number
Event
or null
pointermove
, touchmove
, and mousemove
.moved
true
false
move
event.rotate
true
true
Number
Number
rotated
true
false
rotate
event.scale
true
true
Number
Number
Number
Number
scaled
true
false
scale
event.zoom
true
true
Number
imageData.width / imageData.naturalWidth
).Number
Event
or null
wheel
, pointermove
, touchmove
, and mousemove
.zoomed
true
false
zoom
event.play
true
true
null
event.preventDefault()
.stop
true
true
null
event.preventDefault()
.vue3使用viewer
vue3使用viewer
vuev-viewer组件使用示例详解(v-viewer轮播图)
vue组件image-viewer使用要注意什么
vnc viewer西西软件,vnc viewer西西软件推荐,vnc客户端使用教程
如何利用v-viewer结合vue预览相册
Vue3如何使用JSX
vue3怎么使用defineExpose
vue3中cookie如何使用
怎么使用vue3的setup()
Vue3中TypeScript怎么使用
Vue3<scriptsetuplang=“ts“>使用指南
vue3中localStorage怎么使用
如何在Linux系统中使用Coreutils Viewer显示命令运行进度
Python 学习之路 - Python
chatgpt的中文全称是什么
C/C++可变参数的使用
Python 3 教程
Python pip包管理
反馈