【发布时间】:2016-12-17 13:15:24
【问题描述】:
"css 网格布局" = https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout
有没有人知道一种 javascript 方法来计算鼠标当前所在的列/行?
我猜这样的事情是获取鼠标所在单元格的开始,但这仅对大小相等的网格有用。
MouseGridColumn = round(mouseX / ( gridContainerWidth / gridTotalColumnsNumber ) )
MouseGridRow = round(mouseY / ( gridContainerHeight / gridTotalRowsNumber ) )
有没有办法对不相等的单元格执行此操作?
更新 1 - 添加代码笔
这是一个代码笔,它显示了 3 个不同百分比的列宽 (grid-template-columns: 25% 50% 25%;)、2 行、一个没有元素的网格单元和一个跨越多行的元素:http://codepen.io/anon/pen/NbeOXp
更新 2 - 尝试计算鼠标所在的网格单元格。
在这里,我为网格中的每个单元格添加了隐藏元素,以检测鼠标所在的单元格。但是它只返回它所在的当前元素的“自动”。添加额外的隐藏元素也很笨拙网格 IMO。
http://codepen.io/anon/pen/gLZBZw提示:使用鼠标悬停在网格上。
【问题讨论】:
-
如果你知道你所在的当前元素,你就可以知道该元素在它的父元素中的位置(以及他的父元素 [grid-container] 中的父元素 [row])。
-
您能否准备一个fiddle 以便我们了解您的标记有多复杂?
-
codepen.io/devrafalko/pen/LbMgmo运行console.log
-
感谢@Pawel,但是我正在尝试获取鼠标所在的当前单元格而不是元素。如何计算其中没有元素的单元格的网格坐标。类似的问题适用于跨越两个单元格的跨越元素。我能看到的唯一解决方案是,如果我在每个网格单元格中放置“隐藏元素”并定位它,但这感觉有点笨拙并且不是很动态。
-
这是一个非常有趣的问题,但我怀疑不会有简单的答案。没有任何东西代表 DOM 中的各个网格区域(只有可以放置在区域中的元素 - 但即便如此,它们也可能不会覆盖整个区域),因此没有事件信息的知识来源。在我看来,通用解决方案的唯一可能性是使用所需的项目填充和渲染网格,对网格线及其相对于内容的相应位置进行逆向工程,然后基于此确定位置。不容易,也不高效。
标签: javascript css css-grid