Skip to content

Commit 596fd06

Browse files
committed
fix(pat scroll box): Fix issue where elastic scrolling on Safari would remove the scroll-position-top class for a moment when overscrolling on top.
1 parent 61fa3d8 commit 596fd06

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/pat/scroll-box/scroll-box.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export default Base.extend({
6969
to_add.push("scrolling-down");
7070
}
7171

72-
if (scroll_pos === 0) {
72+
if (scroll_pos <= 0) {
7373
to_add.push("scroll-position-top");
7474
} else if (
7575
this.scroll_listener === window &&

src/pat/scroll-box/scroll-box.test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ describe("pat-scroll-box", function () {
6969
expect(el.classList).not.toContain("scrolling-up");
7070
expect(el.classList).toContain("scrolling-down");
7171

72+
el.scrollTop = 250; // overscrolling / elastic scrolling in Safari
73+
el.dispatchEvent(events.scroll_event());
74+
await utils.animation_frame();
75+
expect(el.classList).not.toContain("scroll-position-top");
76+
expect(el.classList).toContain("scroll-position-bottom");
77+
expect(el.classList).not.toContain("scroll-up");
78+
expect(el.classList).toContain("scroll-down");
79+
expect(el.classList).not.toContain("scrolling-up");
80+
expect(el.classList).toContain("scrolling-down");
81+
7282
el.scrollTop = 0;
7383
el.dispatchEvent(events.scroll_event());
7484
await utils.animation_frame();
@@ -79,6 +89,16 @@ describe("pat-scroll-box", function () {
7989
expect(el.classList).toContain("scrolling-up");
8090
expect(el.classList).not.toContain("scrolling-down");
8191

92+
el.scrollTop = -50; // overscrolling / elastic scrolling in Safari
93+
el.dispatchEvent(events.scroll_event());
94+
await utils.animation_frame();
95+
expect(el.classList).toContain("scroll-position-top");
96+
expect(el.classList).not.toContain("scroll-position-bottom");
97+
expect(el.classList).toContain("scroll-up");
98+
expect(el.classList).not.toContain("scroll-down");
99+
expect(el.classList).toContain("scrolling-up");
100+
expect(el.classList).not.toContain("scrolling-down");
101+
82102
// Test for clearing the scrolling classes after a scroll stop
83103
// scroll-up and scroll-down are not cleared.
84104

0 commit comments

Comments
 (0)