未定义文本浮动 div 的 CSS 偏移量

Posted

技术标签:

【中文标题】未定义文本浮动 div 的 CSS 偏移量【英文标题】:CSS offset undefined for a text floating div 【发布时间】:2021-09-27 08:54:07 【问题描述】:

给定:

const display = document.querySelector('.display');

document.addEventListener("click", (event) => 
  if (!event.target.closest("button")) return;
  
  if(event.target.id === "button") 

    if(event.target.textContent === "left")
        display.style.transform += "translateX(50px)";
     else if (event.target.textContent === "right")
        display.style.transform += "translateX(-50px)";
    
    console.log("left :" + display.style.offsetLeft + ", right : " + display.style.offsetRight);
    console.log("left :" + display.parentNode.style.offsetLeft + ", right : " + display.parentNode.style.offsetRight);
  
    
);
.meta-div 
  box-shadow: 0 0 25px  rgba(0, 0, 0, 0.4);
  position: relative;
  border-radius: 0.5em;
  overflow: hidden; /* allows the border-radius to be visible. */
  width: 14rem;

.outer-div 
  color: black;
  text-overflow: normal;
  white-space: nowrap;
  overflow: hidden;
  text-align: right;
  border-left: 30px solid black;
  border-right: 30px solid black;



.display 
  float:right;
  padding-right: 5px;
  transition: transform 250ms;
<div class="meta-div">
  <div class="outer-div">
    <div class="display">111 + 222 + 333 + 444 + 555 + 666 + 777 + 888 + 999</div>
  </div>
</div>
 <button id="button">left</button>
 <button id="button">right</button>

我的目标是找到一种方法来提取显示器相对于其容器的文本位置(我将其设置为 relative 以使 offsetLeft 起作用),这样当文本出现时左/右按钮不起作用已到达各自的左侧或右侧最大位置。基本上,我希望文本最少从“111 + ...”开始或最多以“... + 999”结束。

换句话说,我想对 display.style.transform += "translateX(50px)"; 函数调用从左侧和右侧设置一个限制。


在线查找解决方案似乎是使用offset。就我而言,display 文本元素及其父容器的两个方向的偏移量似乎都是 undefined。这可能是因为float:right 属性吗?我对如何实现这个小功能缺乏想法。我怀疑我什至可能根本没有使用正确的功能(偏移量)?

有人有什么建议或想法吗?

【问题讨论】:

【参考方案1】:

您的代码的主要问题是,应该使用的属性是display.offsetLeftdisplay.offsetTop。您目前正在使用display.style.offsetLeft. 除此之外,没有称为 offsetRight 的属性。如果你想这样做,你将不得不自己计算。

因此您的代码可以这样重写:

const display = document.querySelector('.display');

document.addEventListener("click", (event) => 
  if (!event.target.closest("button")) return;
  
  if(event.target.id === "button") 

    if(event.target.textContent === "left")
        display.style.transform += "translateX(50px)";
     else if (event.target.textContent === "right")
        display.style.transform += "translateX(-50px)";
    
    console.log("left :" + display.offsetLeft);
    
  
    
);

除此之外,您还可以使用 getBoundingClientRect() 函数,然后计算父元素和子元素之间的偏移量差异。但是因为,我不知道用例,所以我可能错了。 getBoundingClientRect 可以按如下方式使用:

const display = document.querySelector('.display');
const container = document.querySelector('.outer-div');


document.addEventListener("click", (event) => 
  if (!event.target.closest("button")) return;
  
  
  const eleRect = container.getBoundingClientRect();
  const targetRect = display.getBoundingClientRect();
  
  if(event.target.id === "button") 

    if(event.target.textContent === "left")
        display.style.transform += "translateX(50px)";
     else if (event.target.textContent === "right")
        display.style.transform += "translateX(-50px)";
    
    
    // Calculate the top and left positions
    const top = eleRect.top - targetRect.top;
    const left = eleRect.left - targetRect.left;
    
    console.log("left :" + left); 

  
    
);

【讨论】:

以上是关于未定义文本浮动 div 的 CSS 偏移量的主要内容,如果未能解决你的问题,请参考以下文章

未定义的偏移量:1 laravel

未定义的偏移量:-1

简单函数()中的php未定义偏移量

查找相对于父滚动 div 而不是窗口的偏移量

注意:未定义的偏移量:0 in

遍历关系时出现“未定义的偏移量 0”