Skip to content

Commit 2133162

Browse files
authored
fix(popper): add stopPropagation for wheel event (#1245)
1 parent 4ba3f5d commit 2133162

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

packages/renderless/src/common/deps/popper.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ const getOffsetRect = (el: HTMLElement) => {
238238
return elementRect
239239
}
240240

241+
const stopFn = (ev: Event) => {
242+
ev.stopPropagation()
243+
}
241244
interface PopperOptions {
242245
arrowOffset: number
243246
arrowElement: string
@@ -366,6 +369,8 @@ class Popper {
366369
update() {
367370
let data = { instance: this, styles: {} } as unknown as UpdateData
368371

372+
this.stopEventBubble() // 每次更新都检查
373+
369374
this.popperOuterSize = null as unknown as { width: number; height: number }
370375
data.placement = data._originalPlacement = this._options.placement
371376
data.offsets = this._getRefPopOffsets(this._popper, this._reference, data.placement)
@@ -377,6 +382,14 @@ class Popper {
377382
typeof this.state.updateCallback === 'function' && this.state.updateCallback(data)
378383
}
379384

385+
// 阻止popper的mousewheel等事件冒泡。 通过 onxxx 绑定,是为了避免重复绑定事件
386+
stopEventBubble() {
387+
if (!this._popper) return
388+
389+
if (!this._popper.onmousewheel) this._popper.onmousewheel = stopFn
390+
if (!this._popper.onwheel) this._popper.onwheel = stopFn
391+
}
392+
380393
/** 按顺序执行Modifiers, 如果传入终点modifier,则执行到指定位置 */
381394
runModifiers(data: UpdateData, modifiers: Function[], ends?: Function) {
382395
let modifiersToRun = modifiers.slice()
@@ -385,7 +398,7 @@ class Popper {
385398
if (ends !== undefined) {
386399
modifiersToRun = this._options.modifierFns.slice(
387400
0,
388-
_options.modifierFns.findIndex((m) => m == ends)
401+
_options.modifierFns.findIndex((m) => m === ends)
389402
)
390403
}
391404

0 commit comments

Comments
 (0)