问一个网页定位的问题?
问题背景:我现在在做一个类似word一样的批注功能。word的批注功能界面如上。我现在想实现像它一样的批注间距的效果。它的批注的间距其实应该是分成两种格式:1.批注间隔远的,就近原则显示比如最上面的批注1区域,和下面的批注距离很远,它就把批注定位在离批注文字很近的位置。2.批注紧挨着的,就自适应紧挨在一起,不会相互重叠比如图片中下面的三条批注。
我现在想得到的就是,当用户增加批注时,就直接定位批注的Y轴位置,然后在批注区域创建,但是创建前需要做自适应,不然可能会出现批注重叠的情况,这个自适应没思路怎么做
回复
1个回答

test
2024-07-16
如果是我做,这个需求用 absolute 做。然后统计 top,height
自顶向下,做最大值
这样我们就可以把问题变成一个计算问题。然后就是做算法优化了
补一下数据结构
[
{top: 100, height: 200},
{top: 800, height: 200},
{top: 820, height: 200},
{top: 1020, height: 200},
]
计算出来就和瀑布流差不多,只不过多了一个 Math.max 而已
arr = [
{top: 100, height: 200},
{top: 800, height: 200},
{top: 820, height: 200},
{top: 1020, height: 200},
{top: 1430, height: 180},
]
arr.reduce((s, n, i) => {
n.currentTop = Math.max(n.top, (s.currentTop || s.top) + s.height)
return n
})
console.log(arr)
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容