Skip to content

feat(refresher): add ionPullStart and ionPullEnd events#30946

Open
ShaneK wants to merge 2 commits intofeature-8.8from
FW-6591
Open

feat(refresher): add ionPullStart and ionPullEnd events#30946
ShaneK wants to merge 2 commits intofeature-8.8from
FW-6591

Conversation

@ShaneK
Copy link
Member

@ShaneK ShaneK commented Feb 5, 2026

Issue number: resolves #24524


What is the current behavior?

There is no way to know when the refresher has fully returned to its inactive state after a pull gesture. The existing ionStart event fires when pulling begins, but there is no corresponding end event. Watching the progress property is insufficient because hitting zero doesn’t necessarily mean the user has completed the pull gesture.

What is the new behavior?

Two new events are added to the refresher component:

  • ionPullStart: Emitted when the user begins pulling down (same as ionStart, which is now deprecated)
  • ionPullEnd: Emitted when the refresher returns to inactive state, with a reason property of 'complete' or 'cancel' indicating whether the refresh operation completed successfully or was cancelled

This allows you to know both when the user is no longer touching the screen AND when the refresher is ready to be pulled again.

Does this introduce a breaking change?

  • Yes
  • No

Other information

Test page:
https://ionic-framework-git-fw-6591-ionic1.vercel.app/src/components/refresher/test/basic/index.html

Current dev build:

8.7.17-dev.11770319814.172b4f50

@ShaneK ShaneK requested a review from a team as a code owner February 5, 2026 18:31
@ShaneK ShaneK requested a review from gnbm February 5, 2026 18:31
@vercel
Copy link

vercel bot commented Feb 5, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ionic-framework Ready Ready Preview, Comment Feb 5, 2026 7:43pm

Request Review

@github-actions github-actions bot added package: core @ionic/core package package: angular @ionic/angular package package: vue @ionic/vue package labels Feb 5, 2026
@ShaneK ShaneK changed the base branch from main to feature-8.8 February 5, 2026 19:11
@github-actions github-actions bot added the package: react @ionic/react package label Feb 5, 2026
@ShaneK ShaneK mentioned this pull request Feb 5, 2026
13 tasks
Add two new events to the refresher component:
- ionPullStart: emitted when the user begins pulling down
- ionPullEnd: emitted when the refresher returns to inactive state,
  with a reason property indicating 'complete' or 'cancel'

The existing ionStart event is deprecated in favor of ionPullStart
for clearer naming that describes what the event represents.

Closes #24524

Co-authored-by: Patrick McDonald <764290+WhatsThatItsPat@users.noreply.github.com>
@WhatsThatItsPat
Copy link

Thanks for the update. I look forward to playing with it.

I have something related on my mind.

On a page without a refresher, you can obviously still pull down and rubber band past the top (scrollY is less than 0). If you keep your figure on the screen and hold the content still in that rubber-banded state, isScrolling will change to false and ionScrollEnd will fire (I think), even though you're still in the middle of a scroll. When you continue the gesture or let go, it will go back to true until it animates to its normal resting place.

I think you should be still be considered scrolling when you're rubber banding / elastic scrolling, even if you manually pause the scroll. Only when ion-content comes to a rest AND your gesture is over should the ionScrollEnd fire.

Anyway, I haven't thought of that in a year+, but I'm pretty sure that's the issue. This one reminded me of it because of the start and end stuff.

Maybe I'll look at that again in my free time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: angular @ionic/angular package package: core @ionic/core package package: vue @ionic/vue package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add ionEnd event to refresher

2 participants