扫码一下
查看教程更方便
detectOverflow实用程序返回popper或引用元素相对于给定边界的溢出偏移量的对象。
import { detectOverflow } from '@popperjs/core';
const overflow = detectOverflow(state, options);
您可以在自己的自定义修饰符中使用此实用程序。
第一个参数是传递给修饰符的popper实例状态。
type Options = {
placement: Placement, // state.placement
elementContext: Context, // "popper"
boundary: Boundary, // "clippingParents"
rootBoundary: RootBoundary, // "viewport"
altBoundary: boolean, // false
padding: Padding, // 0
};
// Below are the relative types
type Context = 'reference' | 'popper';
type Boundary = 'clippingParents' | HTMLElement | Array<HTMLElement>;
type RootBoundary = 'document' | 'viewport';
type Padding =
| number
| {|
top?: number,
right?: number,
bottom?: number,
left?: number,
|};
```
## placement
这将检查溢出时,popper是给定的位置。默认情况下,它是 `state.placement`。
## elementContext
它描述被检查的相对于边界是否溢出的元素。
```javascript
detectOverflow(state, {
elementContext: 'reference', // 'popper' by default
});
这描述了将检查元素是否相对于其溢出的区域。
默认情况下,它是“clippingParents”,这是滚动容器,可能导致元素部分或完全切断。
const customBoundary = document.querySelector('#boundary');
detectOverflow(state, {
boundary: customBoundary, // 'clippingParents' by default
});
这描述将检查是否溢出的根边界。只有两个“根”——视口和文档。viewport是默认的,它是用户在屏幕上实际可以看到的文档区域。“文档”是可以滚动的整个页面。
detectOverflow(state, {
rootBoundary: 'document', // 'viewport' by default
});
这描述了是否使用alt元素的边界。例如,如果elementContext是“popper”,那么它将检查引用的边界上下文,反之亦然。
detectOverflow(state, {
altBoundary: true, // false by default
});
对边界应用虚拟填充。
您可以传递一个数字,它将是所有四个边的相等的填充,或一个对象,包含有各自的填充值的边属性。
detectOverflow(state, {
// Same padding on all four sides
padding: 8,
// Different padding on certain sides – unspecified sides are 0
padding: { top: 8, right: 16 },
});
//如果数字是正数,popper溢出像素的数量。
//当为0或负值时,popper在其边界内。
type OverflowOffsets = {
top: number,
bottom: number,
right: number,
left: number,
};
对于你的自定义修饰符,确保你在requiresIfExists中添加了"offset",因为如果offset存在于修饰符的生命周期中,util需要访问这个信息:
import { detectOverflow } from '@popperjs/core';
const myModifier = {
name: 'myModifier',
enabled: true,
phase: 'main',
requiresIfExists: ['offset'],
fn({ state }) {
const overflow = detectOverflow(state);
// ...
},
};
detectOverflow 默认情况下只考虑偏移量修饰符,并报告值,就好像当前没有其他修饰符影响它一样。这意味着如果 prevtoverflow 被启用,它的值应该被考虑在内 (state. modifiersdata . preventtoverflow) ,以及任何其他可能改变 popperoffset 的修饰符。