Vue页面已经渲染完图片再获取图片的宽高

<el-image :src="item.filePath" ref="imgSize" @onload="imgload"></el-image>

<span >{{item.imageWidth }}*{{item.imageHeight }}</span> //展示图片的宽高

//js 
// 获取图片宽高,再把宽高值插入原来的数组  this.imgload() 这个方法在页面图片渲染完后调用
imgload(){
  console.log('this.$refs',this.$refs)
  if(this.$refs.imgSize){
     let _o = this.$refs.imgSize
     // console.log('_o',_o)
     let list = this.list.shift(0,1) //去掉原来数组第0个
     for (var i = 0; i < _o.length; i++){
       for(var j = 0; j < this.list.length; j++){
         if(i==j){
            this.list[j].imageHeight =_o[i].imageHeight // 在原来的数组添加字段宽
            this.list[j].imageWidth =_o[i].imageWidth  // 在原来的数组添加字段宽
         }
        }
      }
      this.list.unshift({upload:'upload'}) //在数组最前面添加这个对象
   }
},


 

### 如何在 Vue.js 中动态获取图片 #### 使用 `ref` 和 DOM 方法获取图片原始尺寸Vue 3 的组合式 API 中,可以通过模板引用 (`ref`) 来访问 DOM 节点。对于图片元素,可以利用其属性 `naturalWidth` 和 `naturalHeight` 获取图像的原始分辨率。以下是具体实现方式: ```javascript <template> <img ref="imageRef" src="/path/to/image.jpg" alt="example"> </template> <script setup> import { ref, onMounted } from &#39;vue&#39;; const imageRef = ref(null); const originalWidth = ref(0); const originalHeight = ref(0); onMounted(() => { if (imageRef.value) { originalWidth.value = imageRef.value.naturalWidth; // 原始度 [^1] originalHeight.value = imageRef.value.naturalHeight; // 原始度 [^1] } }); </script> ``` 上述代码展示了如何通过 `ref` 访问图片节点,并读取它的自然尺寸。 --- #### 动态计算图片显示尺寸图片被缩放到容器内时,实际展示的可能不同于原始尺寸。此时可通过 `offsetWidth` 和 `offsetHeight` 属性来获取当前渲染后的尺寸。 ```javascript const displayWidth = ref(0); const displayHeight = ref(0); onMounted(() => { if (imageRef.value) { displayWidth.value = imageRef.value.offsetWidth; // 显示度 displayHeight.value = imageRef.value.offsetHeight; // 显示度 } }); ``` 此方法适用于需要了解图片页面上的最终呈现效果的情况。 --- #### 移动端适配下的 px 到 rem 转换 如果目标是在移动端开发中支持响应式设计,则需考虑将像素单位转换为相对单位(如 `rem`)。这通常涉及根字体大小的设置以及动态计算逻辑。 假设已知屏幕度和期望的比例关系,可按如下公式成转换: \[ \text{根字体大小}(\text{px}) = \frac{\text{元素度}(\text{rem})}{\text{屏幕度}(\text{px})} [\]^2] 例如,在 CSS 文件中定义基础比例: ```css html { font-size: calc(100vw / 7.5); /* 设定每份 rem 对应的实际物理度 */ } ``` 随后可以在 JavaScript 中进一步操作这些值以适应不同设备的需求。 --- #### 插件扩展:动态调整与增强功能 某些场景下仅获取不足以满足需求,比如希望加入旋转或其他交互行为。基于现有组件库(如 vue-preview),能够自定义修改源码或者封装新工具函数达成目的[^4]。 下面是一个简单的例子用于演示如何加载外部资源并解析其维度信息: ```javascript function getImgNaturalDimensions(imgSrc, callback) { const img = new Image(); img.src = imgSrc; img.onload = () => { callback({ width: img.width, height: img.height }); // 自然尺寸回调 [^3] }; } // Usage Example getImgNaturalDimensions(&#39;/path/to/image.jpg&#39;, dimensions => console.log(dimensions)); ``` 这种方法特别适合异步加载远程文件的情形。 --- ### 总结 综上所述,无论是直接操纵 DOM 元素还是借助第三方解决方案,都可以灵活应对各种复杂的业务挑战。关键是理解底层原理并与框架特性紧密结合起来加以运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值