Popper.js 虚拟元素(VirtualElement )

可以使用虚拟元素而不是实际的DOM元素作为引用。这允许您将popper相对于由您希望的任何坐标定义的虚拟区域进行定位。

一个常见的用例是让popper跟随鼠标光标,在鼠标光标作为一个点引用。

虚元素是一个普通对象:

type VirtualElement = {|
  getBoundingClientRect: () => ClientRect | DOMRect,
  contextElement?: Element,
|};

contextElement 是一个可选属性,用来描述虚拟元素的 DOM 上下文。如果 getBoundingClientRect 是从真正的DOM 元素派生而来,并且该元素与 popper 元素在不同的滚动容器上下文中,那么这是必要的。


演示

popper.js虚拟元素演示


使用

下面的代码使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();
});

查看笔记

扫码一下
查看教程更方便