fix(hero) : WebGL animation lifecycle logic#2286
Merged
ShubhamOulkar merged 5 commits intoexpressjs:redesignfrom Apr 20, 2026
Merged
fix(hero) : WebGL animation lifecycle logic#2286ShubhamOulkar merged 5 commits intoexpressjs:redesignfrom
ShubhamOulkar merged 5 commits intoexpressjs:redesignfrom
Conversation
✅ Deploy Preview for expressjscom-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

This PR refactors the WebGL background animation lifecycle in the Hero component. Previously, multiple independent event listeners (IntersectionObserver, visibilitychange, and motionQuery) could send conflicting play() and pause() commands to the WebGL controller.
The primary issue fixed: If a user scrolled down (triggering a pause via IntersectionObserver) and then switched tabs and returned, the visibilitychange listener would blindly trigger play(), causing the animation to run at 60fps while completely off-screen.
How to Test?
Included temporary console.log statements in the sync() function to make verification easy.
Adaptive Performance 64628ba:
By using the isMobile listener, the UI dynamically adapts to the current browser environment. If a user on a laptop enters a split-screen or small-window view, the system automatically shuts down the WebGL loop to prioritize the readability of the documentation.
Improved page reload blank background
Express.js.Node.js.web.application.framework.mp4