Date Picker / Combo Box: Use mouseover event instead of mousemove #4256
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.
Description
This pull request seeks to improve performance of USWDS JavaScript by limiting the amount of event handling that occurs in response to mouse events.
Additional information
USWDS component scripts typically use event delegation for handling UI events, meaning that the actual event listener is attached to the document, and not to individual elements. A side-effect of this is that events are bound regardless of the presence of any particular components in the page.
The Date Picker and Combo Box components each bind events for
mousemovein order to apply a focus effect when the cursor is placed over items within the element.mousemovecan be a very noisy event, since it is emitted for every pixel movement (see demo). This can be problematic in combination with event delegation, where every movement of the cursor anywhere in the body is handled multiple times for each of the components, regardless whether any instances of that component exist in the page.Truthfully, I'm not sure I understand the goal in programmatically focusing the component elements in response to cursor movement, but the changes here don't aim to change the behavior, but instead serve as a refactoring of the existing implementation.
Future improvements could consider...
:hover)This may indirectly fix #4184, based on debugging at #4184 (comment) and #4184 (comment).
Before you hit Submit, make sure you’ve done whichever of these applies to you:
npm testand make sure the tests for the files you have changed have passed.