扫码一下
查看教程更方便
可以使用虚拟元素而不是实际的DOM元素作为引用。这允许您将popper相对于由您希望的任何坐标定义的虚拟区域进行定位。
一个常见的用例是让popper跟随鼠标光标,在鼠标光标作为一个点引用。
虚元素是一个普通对象:
type VirtualElement = {|
getBoundingClientRect: () => ClientRect | DOMRect,
contextElement?: Element,
|};
contextElement 是一个可选属性,用来描述虚拟元素的 DOM 上下文。如果 getBoundingClientRect 是从真正的DOM 元素派生而来,并且该元素与 popper 元素在不同的滚动容器上下文中,那么这是必要的。
下面的代码使popper跟随鼠标光标,如上面的演示所示:
function generateGetBoundingClientRect(x = 0, y = 0) {
return () => ({
width: 0,
height: 0,
top: y,
right: x,
bottom: y,
left: x,
});
}
const virtualElement = {
getBoundingClientRect: generateGetBoundingClientRect(),
};
const instance = createPopper(virtualElement, popper);
document.addEventListener('mousemove', ({ clientX: x, clientY: y }) => {
virtualElement.getBoundingClientRect = generateGetBoundingClientRect(x, y);
instance.update();
});