Component that adds Pull to refresh functionality to an <ons-page> element. It can be used to perform a task when the user pulls down at the top of the page. A common usage is to refresh the data displayed in a page.


Pull to refresh

The <ons-pull-hook> is used to perform an action when the user pulls down the page. It’s a common design pattern in mobile apps.

It is normally put as a direct descendant to the <ons-page> element.



Setting the callback

To set the callback that should be executed when the user pulls the page you can modify the onAction property.

The callback will take a function as an argument that needs to be called when the action is performed. Calling the function will cause the page to snap back into position.

var pullHook = document.getElementById('pull-hook');
pullHook.onAction = function(done) {


The <ons-pull-hook> has three different states:

  • initial - Initial state.
  • preaction - Will run the callback when released.
  • action - Currently running the callback.

The element will throw the DOM event changestate when it transitions between any of these states.

pullHook.addEventListener('changestate', function(event) {
  console.log('Changed to state: ' + event.state);

Listening to these state changes can be used to change the content of the element to give the user information about what is happening.

Styling with CSS

Another way to change the content or the appearance of the <ons-pull-hook> element is to use CSS and attribute selectors.

The element has the attribute style which will have the value of the current state:

ons-pull-hook[style="initial"] {
  // Write some style for initial state here.


Customizing the behavior

There are a number of attributes that can be used to configure how the <ons-pull-hook> will behave.

The height attribute defines how long the component must be pulled before transitioning to the preaction state. With the threshold-height attribute the component can be configured to transition directly to the action state without releasing.

There is also an attribute called fixed-content that prevents the page from moving while scrolling.

Additionally, the onPull DOM prop provides a way to gradually modify the appearance of the pull-hook when the user pulls it. This could be useful, for example, to place a <ons-progress-circular> element as the visual part of <ons-pull-hook> and change its progress value as the user pulls.

Attributes are added directly to the element. You can do this in HTML or JS.

HTML: <ons-pull-hook someAttribute="true" anotherAttribute><ons-pull-hook>
JS: document.querySelector('ons-pull-hook').setAttribute('someAttribute', 'true')

Name Type Description
disabled If this attribute is set the “pull-to-refresh” functionality is disabled. Optional.
height String Specify the height of the component. When pulled down further than this value it will switch to the “preaction” state. The default value is “64px”. Optional.
threshold-height String Specify the threshold height. The component automatically switches to the “action” state when pulled further than this value. The default value is “96px”. A negative value will disable this property. If this value is lower than the height, it will skip “preaction” state. Optional.
fixed-content If this attribute is set the content of the page will not move when pulling. Optional.

Properties are accessed on the element through JS, and should be get and set directly. For example: document.querySelector('ons-pull-hook').fixedContent.

Name Description
fixedContent If this property is set the content of the page will not move when pulling.
onAction This will be called in the action state if it exists. The function will be given a done callback as its first argument.
onPull Hook called whenever the user pulls the element. It gets the pulled distance ratio (scroll / height) and an animationOptions object as arguments.
height The height of the pull hook in pixels. The default value is 64px.
thresholdHeight The thresholdHeight of the pull hook in pixels. The default value is 96px.
state Current state of the element.
pullDistance The current number of pixels the pull hook has moved.
disabled Whether the element is disabled or not.

To use these events, add event listeners to the elements as you would for native events, like click. For example: document.querySelector('ons-pull-hook').addEventListener('changestate', function() { ... }).

Some Onsen UI components have overlapping event names. For example, ons-carousel and ons-navigator both emit postchange events. Stop overlapping events from propagating to avoid conflicts: document.querySelector('ons-carousel').on('postchange', e => e.stopPropagation()).

Name Description
changestate Fired when the state is changed. The state can be either “initial”, “preaction” or “action”.
pull Fired when the pull hook is pulled.

Fired when the state is changed. The state can be either “initial”, “preaction” or “action”.

Name Type Description
event Object Event object.
event.pullHook Object Component object.
event.state String Current state.

Fired when the pull hook is pulled.

Name Type Description
event Object Event object.
event.ratio Object The pulled distance ratio (scroll / height).
event.animationOptions String The animation options object.

Need Help?

If you have any questions, use our Community Forum or talk to us on Discord chat. The Onsen UI team and your peers in the community will work together to help solve your issues.

For bug reports and feature requests use our GitHub Issues page.