Describe the bug
Two popups with the Auto Open trigger can fight over the same animation frame. One popup opens fine. The other popup's animation breaks and it can stay hidden.
Site information
Popup Maker version: v1.21.0 through v1.24.0 (regression present across all of these; confirmed still present in the current stable release, v1.24.0)
WordPress version: 7.1
PHP version: 8.2.27
Expected behavior
Both popups open and animate in.
Current behavior
Only one popup shows a clean open animation. The other popup can flash, skip its animation, or stay hidden.
Steps to reproduce
- Create two popups.
- Set the Auto Open trigger on both.
- Give both the same delay, for example 1000ms.
- Load a page where both popups are active.
- Watch the page after the delay passes.
Errors
None. This is a visual/animation timing bug, not a script error.
Additional context
When this broke
This worked in versions before v1.21.0.
The v1.21.0 release (2025-09-15) changed the popup open code to fix a different set of animation bugs. The changelog entry says the change aimed to improve browser animation reliability. That change added a forced browser reflow inside initializeState().
A forced reflow happens when code reads a layout property like offsetHeight right after changing styles. The read forces the browser to apply pending style changes right away, instead of waiting for the next paint.
When two Auto Open triggers share the same delay, they fire in the same script tick. The second popup's forced reflow also flushes the first popup's pending opacity: 0 style. This breaks the first popup's animation start state.
Cause
In assets/js/src/site/plugins/pum.js, initializeState() reads $popup[0].offsetHeight and $container[0].offsetHeight right after clearing inline styles. This is a forced synchronous reflow. It runs a full layout pass on the whole page, not just the one popup. So it can touch style changes queued by a second popup that is opening in the same tick.
Describe the bug
Two popups with the Auto Open trigger can fight over the same animation frame. One popup opens fine. The other popup's animation breaks and it can stay hidden.
Site information
Popup Maker version: v1.21.0 through v1.24.0 (regression present across all of these; confirmed still present in the current stable release, v1.24.0)
WordPress version: 7.1
PHP version: 8.2.27
Expected behavior
Both popups open and animate in.
Current behavior
Only one popup shows a clean open animation. The other popup can flash, skip its animation, or stay hidden.
Steps to reproduce
Errors
None. This is a visual/animation timing bug, not a script error.
Additional context
When this broke
This worked in versions before v1.21.0.
The v1.21.0 release (2025-09-15) changed the popup open code to fix a different set of animation bugs. The changelog entry says the change aimed to improve browser animation reliability. That change added a forced browser reflow inside
initializeState().A forced reflow happens when code reads a layout property like
offsetHeightright after changing styles. The read forces the browser to apply pending style changes right away, instead of waiting for the next paint.When two Auto Open triggers share the same delay, they fire in the same script tick. The second popup's forced reflow also flushes the first popup's pending
opacity: 0style. This breaks the first popup's animation start state.Cause
In
assets/js/src/site/plugins/pum.js,initializeState()reads$popup[0].offsetHeightand$container[0].offsetHeightright after clearing inline styles. This is a forced synchronous reflow. It runs a full layout pass on the whole page, not just the one popup. So it can touch style changes queued by a second popup that is opening in the same tick.