移动端使用vue3+vue-photo-preview-next实现图片预览

62 阅读2分钟

在项目开发中,公司前人使用vue3+elementPlus开发H5页面。

领导突然说你这个图片放大后咋不能双指缩放啊,其他的页面都能放大缩小。

我说,我看看代码怎么回事。

看完代码发现,H5页面内容是富文本字符串,使用div标签的v-html指令解析的。

然后再使用el-image标签实现的图片预览效果,当时我惊人天人,这在移动端,el-image能实现双指手势操作?

我就开始面向百度编程,找了一圈,有说el-image标签是可以在移动端适配的,可以双指操作,但是亲测实在是不行

我就开始在网上找各种插件,网上的插件天花乱坠,有ViewerJS、vue3-photo-preview、最后找到了

vue-photo-preview-next

其实vue3-photo-preview和vue-photo-preview-next插件应该一样,只是版本不同,这里附上链接

vue-photo-preview-next - npm

安装

npm install vue-photo-preview-next --save

全局注册main.js

import photoPreview from 'vue-photo-preview-next'
import 'vue3-photo-preview/dist/index.css'

app.use(photoPreview)

页面使用

<template>
  <photo-provider>
    <photo-consumer v-for="src in imgList" :intro="src" :key="src" :src="src">
      <img :src="src" class="view-box" />
    </photo-consumer>
  </photo-provider>
</template>

其实到这里在页面上已经可以预览图片了

但是!!!

我上面说了我内容是富文本渲染出来的,没办法在页面上插入photo-provider和photo-consumer组件

我一开始试了很多办法,比如在获取富文本内容的时候,把img标签全部替换成photo-provider和

photo-consumer,再v-html渲染出来,但是v-html不识别这两个标签,导致无法放大预览。

然后我在找其他插件的时候,发现vue-photo-preview-next还有个组件,PhotoSlider组件

作者在示例中也没有写怎么用,我就查这个组件怎么用的,发现这个组件可以直接预览图片,并进行双

指操作缩放。

<photo-slider
  v-model:visible="imgDialog"
  :items="elimageList"
  :index="elimageIndex"
  @changeIndex="handleSliderIndexChange"
  @clickMask="imgDialog=false"
  @clickPhoto="imgDialog=false"
  @closeModal="imgDialog=false"
/>

只要通过v-model:visible="imgDialog"就可以控制这个组件的显隐,当点击页面图片的时候

设置为true;

名称类型描述默认值必填
itemsItemType[]图片列表-
indexnumber图片当前索引-
visiblenumber是否显示模态框-
should-transitionboolean箭头切换是否需要过渡false
toggle-overlayboolean是否切换显隐覆盖物true
default-backdrop-opacitynumber默认背景透明度1
loopboolean是否循环显示预览图false
download-method(item: ItemType) => voidnull下载图片方法,不传使用内置的下载方法null

@changeIndex="handleSliderIndexChange"

通过changeIndex事件获取图片的索引来设置图片的切换。

这样就很完美的解决了在移动端H5页面内容为富文本的时候,实现图片双指操作缩放。

此致!!!开发插件的作者,感谢撒花🎉🎉🎉🎉🎉🎉