element-ui组件el-image预览功能关闭后无法从头开始

本文讲述了如何修复Element-UI组件el-image预览时的顺序问题,通过修改hide方法和调整图片预览逻辑,确保关闭后重新打开显示正确的图片顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

element-ui 组件el-image预览功能,预览关闭后,再次打开时,记录了上次预览的顺序,

复现步骤:

有4张图分别是 A B C D,点击B图,预览右箭头操作B->C->D,关闭,点击B,此时看到的图片是D,我们需求是看到B

  • 原因:

关闭时,没有把index置为0

  •  解决:

1、修改node_modules/element-ui/packages/image/src/image-viewer.vue的hide方法,index=0,发现没效果

 2、修改的位置不对,应该修改发布之后的js文件node_modules/element-ui/lib/image/index.js

3、预览时,每次从当前图片,循环预览,:preview-src-list="getSrcList(index)"

<template>
	<div class="hi-upload-file" ref="imgbox">
		<template v-if="arrFileData && arrFileData.length > 0">
			<!-- 1、图片展示 -->
			<div class="file-icon img" 
				v-for="(file,index) in arrFileData" 
				:style="{width:imgWidth,height:imgHeight+'px','margin-right':(index+1)%num==0?'0':marginSpan+'%'}"
				:key="index" 
			>
				<el-image :ref="'imgPreview'+index" :src="file.url" :preview-src-list="getSrcList(index)" :fit="'cover'" @error.once="loadError">
					<div slot="error" class="image-error"></div>
				</el-image>
			</div>
		</template>
		<template v-else>
			<span>暂无图片</span>
		</template>
	</div>
</template>
<script>
	import Vue from 'vue'
	import uploadUtil from '@/utils/uploadUtil.js'
	export default {
		props:{
			arrFileData:{
				type:Array,
				default:function(){
					return [];
				}
			},
			...
		},
		data() {
			return {
				...
				previewSrcList:[],//存所有的url
			};
    	},
    	// 坑1:this.$refs.imgbox这个对象不知道什么时候获取到,在watch和mounted均做一次处理
		watch: {
			arrFileData:{
				handler(newName, oldName) {
					..
					this.getPreviewSrcList();
				},
				deep: true
			}
		}, 
		mounted() {
			...
			this.getPreviewSrcList();
		},
		beforeDestroy(){
			this.previewSrcList=[];
		},
		methods: {
			getPreviewSrcList(){
				this.previewSrcList=this.arrFileData.map((ele)=>{
					return ele.url
				});
			},
			getSrcList(index){
				return this.previewSrcList.slice(index).concat(this.previewSrcList.slice(0, index));
			},
			/** 图片加载失败调用 */
			loadError(event){
				...
			},
			...
		}
  }
</script>
<style lang="stylus" scoped>
	@import "~assets/stylus/upload"
</style>

如果要修改el-image的样式,可以在父组件中如下修改即可

<style>
	[class*=" el-icon-"], [class^=el-icon-]{
		font-size: 30px;
		color:#fff;
	}
	.el-image-viewer__close{
		top:80px;
		right: 180px;
	}
	.el-image-viewer__mask{
		opacity: .6;
	}
	.el-image-viewer__next{
		right: 180px;
	}
	.el-image-viewer__prev{
		left: 180px;
	}
</style>
<style lang="stylus" scoped>
	@import "~assets/stylus/upload"
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛佛ง

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值