vue 关于图片和文字的绝对定位 js 动态设置定位

背景

  • 实现以下功能,并且在页面缩放下 文字不会偏差
    在这里插入图片描述

结果

在这里插入图片描述

  • 核心代码
    <div class="content-box" id="od-datas">
      <div class="od-data">
        <p class="od-detail">{{ fmtValue(infoData.estation['Meter.Ptotal'],2) }} kW</p>
        <p class="od-detail">{{ fmtValue(infoData.estation['Meter.Qtotal'],2) }} kVar</p>
        <p class="od-detail">{{ fmtValue(infoData.estation['Meter.Ia'],2) }} A</p>
        <p class="od-title">能源站负荷</p>
      </div>

      <div class="od-data">
        <p class="od-title">市电</p>
        <p class="od-detail">{{ fmtValue(infoData.es['Meter.Ptotal'],2)}} kW</p>
        <p class="od-detail">{{ fmtValue(infoData.es['Meter.Qtotal'],2)}} kVar</p>
        <p class="od-detail">{{ fmtValue(infoData.es['Meter.Ia'],2)}} A</p>
      </div>

      <div class="od-data">
        <p class="od-detail">{{ fmtValue(infoData.yq['Meter.Ptotal'],2)}} kW</p>
        <p class="od-detail">{{ fmtValue(infoData.yq['Meter.Qtotal'],2)}} kVar</p>
        <p class="od-detail">{{ fmtValue(infoData.yq['Meter.Ia'],2)}} A</p>
        <p class="od-title">用户负荷</p>
      </div>

      <div class="od-data">
        <p class="od-title">光伏</p>
        <p class="od-detail">{{ fmtValue(infoData.pv['Meter.Ptotal'],2)}} kW</p>
      </div>

      <div class="od-data">
        <p class="od-detail">0 kW</p>
        <p class="od-detail">0 kW</p>
        <p class="od-title">储能</p>
      </div>
    </div>
.content-box {
  padding-top: 15px;
  height: calc(100% - 25px);
  box-sizing: border-box;
  position: relative;
  background-image: url(../../../assets/imgs/optimizationData-bg.png);
  background-repeat: no-repeat;
  background-position: center;
}
.od-data {
  position: absolute;
}
// 下 1-3-5
.od-data:nth-child(1) {
  bottom: 35px;
  left: 410px;
  .od-title {
    margin-top: 35px;
  }
}
.od-data:nth-child(3) {
  bottom: 35px;
  left: 860px;
  .od-title {
    margin-top: 35px;
  }
}
.od-data:nth-child(5) {
  width: 120px;
  bottom: 35px;
  left: 1310px;
  .od-title {
    margin-top: 50px;
  }
  .od-detail {
    position: absolute;
    bottom: 90px;
    &:nth-child(1) {
      left: 0px;
    }
    &:nth-child(2) {
      left: -123px;
    }
  }
}
// 上 2-4
.od-data:nth-child(2) {
  top: 40px;
  left: 675px;
  .od-title {
    margin-bottom: 75px;
  }
}
.od-data:nth-child(4) {
  top: 40px;
  left: 1035px;
  .od-title {
    margin-bottom: 90px;
  }
}
.od-title {
  height: 25px;
  font-size: 18px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: rgba(255, 255, 255, 1);
  line-height: 25px;
}



  mounted(){ // dom加载完毕之后,开始计算 文字位置,并且添加窗口变化的监听
    this.resizePosition();
     window.addEventListener("resize", () => {
       console.log('windows resize');
       this.resizePosition();
     });
  },


// 计算绝对定位的
 resizePosition() {
      // 重新定位
     
        // 背景图 1166*361
        // 1920*1080 下 1660*425  开始计算位置
        let width = document.getElementById("od-datas").offsetWidth;
        let height = document.getElementById("od-datas").offsetHeight;

        let pleft = (width - 1166) / 2;
        let ptop = (height - 361) / 2;
        let pbottom = (height - 361) / 2;

        let left0 = 163 + pleft;
        let left2 = 613 + pleft;
        let left4 = 1063 + pleft;

        let left1 = 428 + pleft;
        let left3 = 788 + pleft;

        let bottom = 3 + pbottom;
        let top = 7 + ptop;

        var pdata = document.getElementsByClassName("od-data");
        pdata[0].style.bottom = bottom + "px";
        pdata[0].style.left = left0 + "px";
        pdata[2].style.bottom = bottom + "px";
        pdata[2].style.left = left2 + "px";
        pdata[4].style.bottom = bottom + "px";
        pdata[4].style.left = left4 + "px";

        pdata[1].style.bottom = top + "px";
        pdata[1].style.left = left1 + "px";
        pdata[3].style.bottom = top + "px";
        pdata[3].style.left = left3 + "px";
    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值