前端 数据大屏 元素等比例缩放

1、需要等比例缩放的内容 html

<div class="boxImg" ref="cont" style="position: absolute; top: 0; left: 0">
  <!-- 这里放上需要等比例缩放的内容 -->    
</div>

2、在vue中 methods 中写

methods: {
  updateScaleRatio(ImgObj, maxWidth, maxHeight) {
     var image = new Image();
     //原图片原始地址(用于获取原图片的真实宽高,当<img>标签指定了宽、高时不受影响)
     image.src = ImgObj.src;
     // 用于设定图片的宽度和高度
     var tempWidth;
     var tempHeight;

     if (image.width > 0 && image.height > 0) {
       //原图片宽高比例 大于 指定的宽高比例,这就说明了原图片的宽度必然 > 高度
       if (image.width / image.height >= maxWidth / maxHeight) {
         if (image.width > maxWidth) {
           tempWidth = maxWidth;
           // 按原图片的比例进行缩放
           tempHeight = (image.height * maxWidth) / image.width;
         } else {
           // 按原图片的大小进行缩放
           tempWidth = image.width;
           tempHeight = image.height;
         }
       } else {
         // 原图片的高度必然 > 宽度
         if (image.height > maxHeight) {
           tempHeight = maxHeight;
           // 按原图片的比例进行缩放
           tempWidth = (image.width * maxHeight) / image.height;
         } else {
           // 按原图片的大小进行缩放
           tempWidth = image.width;
           tempHeight = image.height;
         }
       }
       // 设置页面图片的宽和高
        ImgObj.height = tempHeight;
       ImgObj.width = tempWidth;
       // 提示图片的原来大小
       ImgObj.alt = image.width + "×" + image.height;
     }
    <!-- 下面代码是等比例缩放的时候小圆点跟着移动,若不需要删除即可-->
     // 获取所有点位
     let point = this.$refs.one;
     // 循环判断点位的位置
     this.itme.forEach((itme, index) => {
       // x 除以 图片最大宽度
       let left = itme.x / 1708;
       // y 除以 图片最大的高度
       let top = itme.y / 961;
        // 小圆点的缩放比例 屏幕除以1920
       let w = maxWidth / 1920;
       // this.$refs.one.width = 18 * w;
       // 小圆点基准值乘以小圆点的缩放比
       point[index].width = 18 * w;
       // 获取每一个点位
       let pointPosition = point[index];
        // 让图片的宽度乘以比例
       pointPosition.style.left = ImgObj.width * left + "px";
       // 让图片的高度乘以比例
       pointPosition.style.top = ImgObj.height * top + "px";
     });
     <!-- 到这里结束 -->
   },
 },

3、在 mounted中设置一个事实监听调度函数

 mounted() {
    window.addEventListener("resize", () => {
      this.updateScaleRatio(
        this.$refs.conten,
        window.innerWidth,
        window.innerHeight
      );
    });
    this.updateScaleRatio(
      this.$refs.conten,
      window.innerWidth,
      window.innerHeight
    );
  },

 如果有很多一样的点位则可以循环渲染 ,在data中写入数据 需要多少就写多少

data() {
    return {
      // 需要循环渲染的点位位置数据
      itme: [
        {
          // left值
          x: 560,
          // top值 
          y: 600,
        },
        {
        // left值
        x: 560,
        // top值 
        y: 600,
         },
      ],
    };
  },

 4、在需要渲染的点位中加上 v-for进行循环渲染

<img
  class="Point-one"
  src="@/assets/images/monitor.state.w.png"
  ref="one"
  v-for="item in itme"
  :key="item.x"
/>

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

生活在北极的企鹅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值