You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug: ion-infinite-scroll fires continuously (position="top") or never (position="bottom") when the scroll element is flex-direction: column-reverse #31602
A chat-style page lays the scroll element out bottom-up with ion-content::part(scroll) { display: flex; flex-direction: column-reverse; } so that the newest row sits at the bottom and the scroller starts there. In that layout the browser's scrollTop is 0 at the bottom and goes negative towards the top ([-320, 0] in the reproduction).
ion-infinite-scroll computes its distance as if scrollTop were non-negative (core/src/components/infinite-scroll/infinite-scroll.tsx L121–129):
With the trigger placed at the oldest end of the list (the last DOM child, painted at the top) and threshold="100px":
position
what happens
top
ionInfinite fires on the very first scroll step, 315 px away from the oldest end, and again on every later step (7 of 7 steps fired)
bottom
never fires, including at scrollTop = -320, i.e. with the trigger fully on screen at the oldest end
Scroller in the reproduction: scrollHeight 1164, clientHeight 844, so the whole scrollable range is 320 px.
connectedCallback (L96–101) and complete() (L184–200) also write scrollEl.scrollTop = scrollHeight - clientHeight / scrollHeight - prev for position="top", which are positions outside the [-320, 0] range of a column-reverse scroller.
Expected Behavior
The trigger fires once when the user is within threshold of the trigger element, whichever direction the scroll element grows in.
Steps to Reproduce
<ion-content> with the style above, 60 rows of 48 px, and <ion-infinite-scroll position="top" threshold="100px"> as the last child (so it paints at the top).
Listen to ionInfinite, call complete() in the handler, and set scrollTop to -5, -20, -60, … on the scroll element returned by getScrollElement().
Observe one ionInfinite per step. Switch to position="bottom" and scroll all the way up: no event.
Activity