图片/背景图的自适应 2.0版本(vue3)

该博客介绍了如何创建一个名为RemImg.vue的Vue组件,用于处理图片和背景图的自适应显示。组件接受多个属性,如图片模式、自适应模式、宽度和高度设置等。在图片加载完成后,根据不同的自适应模式(px或rem)调整图片大小,并提供了插槽以支持内容自适应背景图片。示例展示了如何导入和使用该组件。
摘要由CSDN通过智能技术生成

创建文件 RemImg.vue

<template>
	<!-- 图片类型 -->
	<img 
		v-if="props.mode=='img'" 
		class="rem-img" ref="img" alt="#" 
		:src="props.src" :style="{width,height}" 
	/>
	<!-- 背景图类型 -->
	<div 
		v-else-if="props.mode=='bg'"	
		:style="{width,height,background:`url(${props.src}) center/100% 100% no-repeat`}"
	>
		<slot></slot>
	</div>
</template>

<script setup>
	import { onMounted, ref, watch } from 'vue'; //组合API

	const props = defineProps({ // 父组件传来的值
		src: {  // 图片路径
			type: String
		},
		mode: { // 模式 是 图片 还是 背景
			type: String,
			default: 'img'
		},
		remMode: { // 自适应模式 是 px 还是 rem 
			type:String,
			default:'rem'
		},
		isFullWidth:{ // 是否原尺寸宽度
			type: Boolean,
			default: false
		},
		isFullHeight:{ // 是否原尺寸高度
			type: Boolean,
			default: false
		}
	});

	const width = ref(0);
	const height = ref(0);

	watch(()=>props.src,(src)=>{ //监听 图片 的路径
		console.log(src)
	},{
		immediate:true,
		deep:true
	})

	onMounted(()=>{ // 生命周期
		const img = new Image()
		img.onload = () =>{ // 修改 图片大小 单位 px or rem

			switch(props.remMode){
				case 'px':
					width.value = img.naturalWidth + 'px'
					height.value = img.naturalHeight + 'px'
					break
				case 'rem':
					if(props.isFullWidth){
						width.value = img.naturalWidth + 'px'
						height.value = img.naturalHeight / 100 + 'rem'
					}else if(props.isFullHeight){
						width.value = img.naturalWidth  / 100 + 'rem'
				 		height.value = img.naturalHeight + 'px'
					}else{
						width.value = img.naturalWidth / 100 + 'rem'
						height.value = img.naturalHeight / 100 + 'rem'
					}
					break
			}
		} 

		watch(()=>props.src,(src)=>{ // 重置图片
			img.src = src
		},{
			immediate:true,
			deep:true
		})
		
	})
</script>

使用:

1. import RemImg from '_c/RemImg.vue';
2. <RemImg 
	:src="require('../assets/images/frame/rotate-bg.png')" 
	mode="bg" 
	remMode="rem"
   >
    <div>插槽自适应背景图片</div>
   </RemImg>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值