Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 相对于用户在约束内单击的位置定位框的数学公式?_Javascript_Jquery_Html_Css_Math - Fatal编程技术网

Javascript 相对于用户在约束内单击的位置定位框的数学公式?

Javascript 相对于用户在约束内单击的位置定位框的数学公式?,javascript,jquery,html,css,math,Javascript,Jquery,Html,Css,Math,这对我来说很难解释,但我正在寻找一个数学公式,它定义了一个框相对于用户在一列行中单击的位置弹出的位置 这里有一个尝试来阐明我的意思: 红色圆圈是用户在左侧列中单击的位置,右侧的框是弹出的框。因此,当用户单击列底部的一行时,框应弹出,以便底部边缘与列底部对齐。如果用户在中间点击,它应该与中间对齐。这样弹出的框就不会超过左侧列的高度,用户就不必滚动 这有意义吗?我可以使用CSS设置长方体的绝对位置,但我只需要一个公式来计算它应该在哪里。我认为没有一个公式可以满足这个条件,但通过一些编程,你可以让它

这对我来说很难解释,但我正在寻找一个数学公式,它定义了一个框相对于用户在一列行中单击的位置弹出的位置

这里有一个尝试来阐明我的意思:

红色圆圈是用户在左侧列中单击的位置,右侧的框是弹出的框。因此,当用户单击列底部的一行时,框应弹出,以便底部边缘与列底部对齐。如果用户在中间点击,它应该与中间对齐。这样弹出的框就不会超过左侧列的高度,用户就不必滚动


这有意义吗?我可以使用CSS设置长方体的绝对位置,但我只需要一个公式来计算它应该在哪里。

我认为没有一个公式可以满足这个条件,但通过一些编程,你可以让它工作。你从显而易见的事情开始:

top    := click.y - height / 2
bottom := click.y + height / 2
然后,您可以对其进行优化:

if bottom > container.height -> 
    bottom := container.height
    top    := MAX(0, bottom - height)
elif top < 0 ->
    top    := 0
    bottom := MIN(container.height, height)
fi
if-bottom>container.height->
底部:=容器高度
顶部:=最大值(0,底部-高度)
elif top<0->
顶部:=0
底部:=最小值(容器高度,高度)
fi

这有效地达到了我想要的效果,但我想到了一种更酷的方法,即右侧框的位置始终与左侧单击的相同位置对齐,即使它没有溢出。我一点也解释不清楚…@Pancakes这个伪代码会根据垂直中心位置排列,就像你画的那样。哦,等等,现在我觉得很愚蠢。我把一个非常简单的解决方案复杂化了。你的解决方案正是我想要的lol我甚至在想什么。谢谢@煎饼很乐意帮忙:)