javascript - react 和 getClientBoundingRect

标签 javascript css reactjs

我有一段像这样的 React html:

<div id="grandparent">
 Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
 Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas 
 congue ligula ac quam viverra nec consectetur 
 <span class='container' style='position:relative'>
   <span class='hilited'>ante hendrerit. </span>
   <div id='grandchild' style='position:absolute; top:...'>
     Stuff...
   </div>
 </span> 
 Donec et mollis dolor....
</div>

我希望“grandchild”div 出现在“hilited”span 的正下方和“grandparent”div 的左边缘内,因此我计划通过取 getClientBoundingRect().left 的差值来计算孙子的左侧位置来自祖 parent 和容器元素。

因为这都是由 React 生成的,所以我在创建时没有元素。我猜我需要收集对“祖 parent ”和“容器”的引用,将它们与状态/ Prop 一起传递给“孙子”并在那里进行计算。最初的尝试失败了。

处理这个问题的最佳方式是什么?

编辑:

Diagram of desired layout

注意:整个东西需要嵌套。有时“grandchild”会包含自己的文本,其中有一个突出显示的部分,下面嵌套了自己的 grandchild。

最佳答案

我找到了一个 refs 解决方案。

添加此函数作为孙子的引用:

function(el) {
  if (el) {
    var gpar = el.parentElement.parentElement;
    var par = el.parentElement;
    var offset = gpar.getClientBoundingRect().left - 
                 par.getClientBoundingRect().left;
    el.style.left = (offset + 15).toString().concat('px');
  }
}

我仍然不介意看到纯 CSS 解决方案。

关于javascript - react 和 getClientBoundingRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603315/

相关文章:

javascript - 如何在 Amazon Lambda 中使用 .pem 文件访问 EC2 实例

android - 混合移动应用程序中图标的响应式设计

javascript - css 自动检查我的 html 复选框

html - 对齐列表中心,而列表项在 d-flex 中向左浮动

javascript - 状态返回 undefined --React Native

javascript - 在 emberjs 2.x 和 Firebase 3.x 中使用自定义 ID 创建记录

javascript - 什么是最好的免费JavaScript模糊处理程序,可以作为javascript库或python库使用

javascript - 更改特定 div 内 h2 的类

javascript - 即使我正在使用 react update add on,react setState 也不会改变状态

javascript - HTML 表单共享不需要的输入值