Scan the QRCode below to preview the example (which source code is provided in gh-pages branch).
- Pull down then let go to see pull-to-refresh effect;
- Tap the button in bottom right corner to manually trigger a pull-to action;
- After manually trigger, there is Promise returned so you can make use of it by simply chain a .then().
- No third-party library required.
- Build with Webpack@3.
- Support preventing mobile Chrome's default pull to refresh features (reference doc, emample, and related StackOverflow question).
Gif recorded on my Mac
Clone or open the ./dist
, grab ptr.js
and ptr.css
, place them wherever you want.
<link rel="stylesheet" href="path/to/ptr.css">
<script src="/path/to/ptr.js"></script>
npm install web-pull-to-refresh --save
CSS file should always be required
<link rel="stylesheet" href="dist/ptr.css">
<srcipt src="/path/to/ptr.js"></script>
<script>
const options = {/*...*/}
new PTR(options)
</script>
For example the entry you set is main.js
, in the html file should be like this:
<script data-main="main" src="lib/require.js"></script>
then in the main.js
, require the ptr
:
define(['./dist/ptr'], (PTR) => {
const options = {/*...*/}
new PTR(options)
}
// or
define(require => {
const PTR = require('./dist/ptr')
const options = {/*...*/}
new PTR(options)
})
import PTR from 'web-pull-to-refresh'
const options = {/*...*/}
new PTR(options)
When use Webpack it could be serval different way to import CSS depends on different situation:
- Import the file in an entry CSS file,
- Load CSS directly in html using
<link>
tag, - Or import CSS in JavaScript file then let Webpack take care of the rest.
But the path will stay the same: ./node_modules/web-pull-to-refresh/dist/ptr.css
.
Firstly there is certain HTML structure and CSS needed.
<!-- html -->
<div class="ptr-wrapper">
<div class="ptr">
<span class="status-arrow"></span>
<span class="status-loader"></span>
<span class="status-text">pull more</span>
</div>
<div class="content">
<ul></ul>
</div>
</div>
❗️Note the refresher
callback passed in require a Promise returned.
const refresher = (statusText) => {
return new Promise((resolve) => {
setTimeout(() => {
alert('new refresher')
resolve()
}, 2000)
})
}
const options = {
contain: $('.ptr-wrapper'),
header: $('.ptr-wrapper .ptr'),
content: $('.ptr-wrapper .content'),
distanceToRefresh: 50,
pullDownText: 'Pull down',
releaseText: 'Release to refresh',
refreshText: 'Updating',
finishText: 'Done Refresh',
refresher: refresher
}
const ptr = new PTR(options)
statusText
refers to the top-bar shown when pull-to action take place.
See the options
passed in the PTR
constructor, there are four different String value for four different status. The final one finishText
will show when entire pull-to-refresh action finish.
But in real world, most situation here is make an AJAX call to load some more data, and then the text could result in 'Update successfully', 'Error loading, try again later', or 'Nothing new'.
So the refresher
callback take a statusText
parameter in, with which you can easily change statusText shown depends on certain conditions.
❗️Note using statusText
will overwrite the option's finishText
.
const refresher = (statuText) => {
if (condition) {
statuText = 'success'
}
else {
statuText = 'error'
}
}
new PTR(options)
will return an object with a method called .trigger()
, you can use it to manually trigger a pull-to-refresh action, which will also fire the refresher()
callback
Then, .trigger()
itself returns a Promise, you can chain a .then()
directly to fire certain action immediately after action take place.
For example there is a button in html with a class .button-to-trigger
, the code would be:
const ptr = PTR(options)
$('.button-to-trigger').on('click'. () => {
ptr.trigger().then(() => {
alert('fire after trigger()')
})
})
There's a full trigger()
example in gh-pages
branch.
params | type | comment |
---|---|---|
contain |
DOM |
The warpper. |
header |
DOM |
The wrapper for the status text, spinner |
content |
DOM |
In most cases, this the wrapper for a <ul> . |
distanceToRefresh |
Number |
Threshold value. Control how long the distance finger can pull down to trigger release-to-refresh. recommend 50 ~ 90, and a number provided bigger than 120, it willl stay at 120. |
pullDownText |
String |
The text show in pull-down state. In the example it refers to 'Keep Dragging' |
releaseText |
String |
The text show in release-to-update state. In the example it refers to 'Now can release' |
refreshText |
String |
The text show in the refresh action is actually taking place. In the example it refers to 'Updating' |
finishText |
String |
The text show in the refresh action is done. In the example it refers to 'Done'. There is a trigger() you can use to manually trigger a pull-down-refresh, and the trigger function actually have a paramter call statusText , for detail see the Usage part below. basically it let you change the text shown. |
refresher |
function |
The function will be fired. Promise Excepted, see example blow. |
const options = {
contain: $('.ptr-wrapper'),
header: $('.ptr-wrapper .ptr'),
content: $('.ptr-wrapper .content'),
distanceToRefresh: 50,
pullDownText: 'Pull down',
releaseText: 'Release to refresh',
refreshText: 'Updating',
finishText: 'Done Refresh',
refresher: refresher
}
Pull request welcome
npm run serve
npm run build:dev
npm run build:prod
MIT License Copyright (c) 2018 Lien