feat(useBodyScrollLock): supports optional lock pointer events #1652
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 allows users to pass the following state to
useBodyScrollLock
to optionally lock scrolling and pointer events:This change remains backward compatible since it still supports
boolean
. When set totrue
, both scroll and pointerEvents are locked as before.Why
In my project, I needed to lock the body scroll. However, using VueUse’s
useScrollLock
caused some issues. For instance, after locking the body scroll and manually setting the body’spadding-right
, opening and closing a Radix Dialog would clear thepadding-right
.To address this, I decided to use Radix’s
useBodyScrollLock
for locking the body scroll. By default, it will setpointerEvents
tonone
, which prevents clicking on any elements.While a workaround like the one below exists:
It didn’t feel intuitive to me. I believe that "scroll locking" should not disable all pointer events. Therefore, I’ve added an option for
pointerEvents
inuseBodyScrollLock
so that users can choose whether to lock pointer events or not.