首页 > 其他分享 >element实现大图预览和图片动态加载

element实现大图预览和图片动态加载

时间:2024-01-31 11:44:07浏览次数:37  
标签:index 预览 大图 image element imageList 图片

element的el-image组件支持大图预览模式,但需要和小图模式配合使用,项目中刚好有需求需要直接使用大图预览并且需要支持图片的动态加载,研究了一下el-image组件的源码发现el-image组件是通过引用image-viewer组件实现的大图预览的,刚好可以利用一下!

image

image-viewer属性

urlList: 图片列表,数组类型
onSwitch: 图片切换事件
onClose: 关闭事件
initialIndex: 图片预览初始图片index
zIndex:设置图片预览的 z-index

源码

  props: {
    urlList: {
      type: Array,
      default: () => []
    },
    zIndex: {
      type: Number,
      default: 2000
    },
    onSwitch: {
      type: Function,
      default: () => {}
    },
    onClose: {
      type: Function,
      default: () => {}
    },
    initialIndex: {
      type: Number,
      default: 0
    },
    appendToBody: {
      type: Boolean,
      default: true
    },
    maskClosable: {
      type: Boolean,
      default: true
    }
  }

项目使用

页面需要单独引入image-viewer组件,打开大图预览时通过接口默认从后台获取2张图片,然后再利用图片切换事件onSwitch在浏览第二张图片时从后台获取第3张图片,依此类推以实现图片的动态加载。
小贴士: 项目中也要求图片要通过 token 访问,于是后台接口读取图片返回图片流,前端使用URL.createObjectURL生成图片临时地址即可。

代码

<template>
  <basic-container>
    <el-image-viewer
      v-if="imgViewerVisible"
      :on-close="closeImgViewer"
      :onSwitch="switchImage"
      :url-list="imageList" />
  </basic-container>
</template>

<script>

export default {
  data () {
    return {
      imageList: [],
      imgViewerVisible: false
    }
  },
  components: {
    'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
  },
  methods: {
   //打开大图预览
    view (row) {
      this.imageList = []
      this.image(row, 0)
    },
	//通过接口获取图片列表,默认获取两张
    image (row, index) {
      let query = {}
      query.page = index + 1
      preview(query).then((response) => {
	    //后台返回图片流,利用createObjectURL生成临时对象地址
        const blob = new Blob([response], {
          type: 'image/jpeg'
        })
        this.imgViewerVisible = true
        this.imageList.push(window.URL.createObjectURL(blob))
        if (index === 0 && row.pageCount > 1) {
          this.image(row, 1)
        }
        console.log(this.imageList.length)
      }).catch((response) => {
        console.error('预览出错', response)
      })
    },
	//关闭大图预览
    closeImgViewer () {
      this.imgViewerVisible = false
    },
	//图片切换事件,浏览第二张时获取第三张,依此类推
    switchImage (index) {
      if (index > this.index && this.imageList.length - 1 === index && this.imageList.length < this.currentRow.pageCount) {
        this.image(this.currentRow, this.imageList.length)
      }
      this.index = index
    }
  }
}
</script>

进阶优化

image-viewer组件有个小问题,大图预览模式图片缩放时页面如果有滚动条也会跟着滚动体验不太好,可以在打开大图模式时禁用页面滚动,关闭大图模式再启用页面滚动

代码

    //打开大图预览
    view (row) {
	  this.disableMove()
      this.imageList = []
      this.image(row, 0)
    },
    //关闭大图预览
    closeImgViewer () {
      this.imgViewerVisible = false
	  this.enableMove()
    },
    disableMove () {
      const m = (e) => { e.preventDefault() }
      document.body.style.overflow = 'hidden'
      document.addEventListener('touchmove', m, false)
    },
    enableMove () {
      const m = (e) => { e.preventDefault() }
      document.body.style.overflow = 'auto'
      document.removeEventListener('touchmove', m, true)
    }

标签:index,预览,大图,image,element,imageList,图片
From: https://www.cnblogs.com/barros/p/17997510

相关文章

  • vue3 预览照片的插件 v-viewer
    查看图片主要使用的旋转、翻转、缩放、上下切换、键盘操作等功能都有。1、首先是安装pnpminstallv-viewerviewerjs 2、安装完在引用(还要记得引用它的css样式)下面有两种调用方式<scriptlang="ts"setup>importViewerfrom'v-viewer';import'viewerjs/dist/vi......
  • Element Plus el-select el-tree-select 获取选中的label值
    select下拉框通过@change选择改变,轮巡方式根据id取name的值<el-form-itemlabel="企业类型"prop="entTypeId"><el-selectv-model="form.entTypeId"placeholder="请选择企业类型"style="width:220px"@change="entTypeCha......
  • Element ui table表格实现触底加载更多数据
    Elementuitable代码<el-table   header-align="center"   v-loadmore="addData"   :data="myData"   height="300"   v-loading="loading"   style="width:100%"   class=&......
  • element select多选 选择一条数据后自动隐藏下拉选框
    <el-selectv-model="form.roleIds"placeholder="请选择角色"multiplemultiple-limit="1"@change="handleVisibleChange"ref......
  • Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--PDF预览器框选
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewer框选PDF坐标及区域内文字:关键代码://选中区域的坐标转成相对于pdf的坐标varpoint1=this.PointToPdf(newPoint(_currRect.X,_currRect.Y));varpoint2=......
  • elementUI表格滚动条样式修改,隐藏表格右边留白
    修改滚动条样式//设置滚动条的宽度.el-table__body-wrapper::-webkit-scrollbar{width:4px;}//设置滚动条的背景色和圆角.el-table__body-wrapper::-webkit-scrollbar-thumb{background-color:#535353;-webkit-box-shadow:inset005pxrgba(0,0,0,0.2......
  • 使用 For each 循环替换xelement操作中断
     使用Foreach循环替换xml元素xelement时,只能操作一个然后就中断了.是因为修改了枚举组自身,导致foreach中断.  解决方案: 在枚举组添加ToArray转换为数组或列表后再进行操作. ForEachbrAsXElementInSelectorXe.......
  • element upload avator hover 有遮罩层 删除和预览按钮 选项
    hover:<divclass="upload"><el-uploadclass="avatar-uploader":on-success="handleAvatarSuccess"><imgv-if="ruleForm.imageUrl":src="ruleForm.image......
  • 文件图片上传+预览
    基本结构```文件上传:上传`上边要注意的就是input中的accept属性,其代表上传文件的一个限制,这里的image/*代表支持图片的书友格式,如果想支持jpeg的可以写成accept="image/jpeg"。也可以同时支持多种图片格式,如下:<inputtype="file"accept="image/jpeg,image/p......
  • Qt编写linux系统onvif工具(支持预览/云台/预置位/录像等)
    一、功能特点广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设置Onvif用户信息,用于认证获取详细信息......