无法使用 getBoundingClientRect 将总和存储到变量

问题描述 投票:0回答:1

代码如下:

var finalProductDiv;
var workingsDiv;
var div1x = 0;

setTimeout(function(){ 
   finalProductDiv = document.getElementById('contentContaineriFrame').contentWindow.document.getElementById('finalProduct');
   workingsDiv = document.getElementById('contentContaineriFrame').contentWindow.document.getElementById('workings');
   div1x = finalProductDiv.getBoundingClientRect().left + finalProductDiv.getBoundingClientRect().width/2;
 }, 2000);

问题是

div1x
总是返回0.

finalProductDiv.getBoundingClientRect().left
返回 16,
finalProductDiv.getBoundingClientRect().width
返回 690。这两个值都是正确的,那么为什么
div1x
= 0 呢?应该是353吧?

javascript
1个回答
0
投票

这个要看你把console.log放到哪里去获取div1x的值

下面演示了设置超时内部和外部的区别。

var finalProductDiv;
var workingsDiv;
var div1x = 0;

setTimeout(() => {
finalProductDiv = document.getElementById('finalProduct');
   workingsDiv = document.getElementById('workings');
   div1x = finalProductDiv.getBoundingClientRect().left + finalProductDiv.getBoundingClientRect().width/2;
   console.log("Value in settimeout : ", div1x)
   // 
   // You should put codes that requires the value of div1x here
   //
   },2000)
   
   // value of div1x here will be 0 because it's not yet calculated
   console.log("Value outside settimeout : ", div1x) 
<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <div id="finalProduct" style="width: 320px; background-color: 'red'" />
    <div id="workings" style="width: 600px; background-color: 'blue'" />

  </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.