Fetching data with paging functionality supported:
- keep pagination state (
limit
&offset
) - auto fetching on scrolling or event
- stop fetching on end of data ( returned length < limit )
install dependencies (proxise
and @loadingio/debounce.js
) and @loadingio/paginate
via npm:
npm install @loadingio/paginate proxise @loadingio/debounce.js
and include them in HTML:
<script src="path-to/debounce.js/index.min.js"></script>
<script src="path-to/proxise/index.min.js"></script>
<script src="path-to/paginate/index.min.js"></script>
create a paginate object:
mypal = new paginate({
fetch: -> ld$.fetch '...' , {}, {type: \json}
})
you can process fetched data directly in the fetch function:
mypal = new paginate do
fetch: ->
ld$.fetch '...' , {}, {type: \json}
.then ->
render(it)
return it /* should return the fetched list */
see also sample/index.ls
.
limit
: default 20. maximal count return per fetchoffset
: default 0. offset for fetch to starthost
: container that scrolls. defaultdocument.scrollingElement
.pivot
: element for determining if we should scroll. omitted if not provided.- when provided,
intersectionObserver
is used
- when provided,
scrollDelay
: default 100. debounce time (ms) before fetching after scrolled.fetchDelay
: default 200. debounce time (ms) before fetching when fetch is called.fetchOnScroll
: default false. when true, fetch when scrolling to the bottom ofhost
.- only applicable if
host
is provided
- only applicable if
fetchOnInit
: default false. should a fetch be called after init. possible values:always
: fetch after bothinit
andreset
once
: fetch only afterinit
lazy
: fetch when visibility ofhost
is changed to visible, andoffset
= 0- false: never fetch on init
boundary
: threshold of the distance tohost
bottom to trigger fetch.- default 5. rounding may lead to extra px uncounted so a small default value 5 is used here.
- omitted if
fetchOnScroll
is false. - larger
boundary
makes fetch triggered earlier.
fetch
: required custom function to fetch data according to@loadingio/paginate
's status.- when called, - use
this.limit
andthis.offset
for current position of fetch progress. - should return an Array.
@loadingio/paginate
use it to updatethis.offset
and count progress.
- when called, - use
enabled
: default true. when false, fetch won't start until re-enabled bytoggle(v)
.
reset()
: reset page.fetch()
: fetch data again.isEnd()
: is there anything to fetch.host(node)
: set scrolling host. use document.scrollingElement for the webpage itself.host(pivot)
: set pivot element ( for detecting refreshing )toggle(v)
: flip enabled/disabled statue. force set to v if v(true or false) is provided.
empty
: fired when@loadingio/paginate
confirms that the list is empty.finish
: fired when@loadingio/paginate
confirms that all items are fetched.fetch
: fired when@loadingio/paginate
fetch a new list of datascroll.fetch
: fired when@loadingio/paginate
fetch a new list of data triggered by scrolling.- can happen along with
fetch
event.
- can happen along with
fetching
: fired before fetch is called.
You can decide when to fetch data by yourself but @loadingio/pagination
still provides some handy mechanism to watch for scrolling or intersection events for you with following 2 options:
fetchOnScroll
: when set to true, this triggers fetch whenpivot
becomes visible ( if pivot is provided )- user scrolls to the bottom of
host
element ( if pivot is not provided )- this relies on
scroll
event and related attribues such asscrollTop
thus is less efficient.
- this relies on
fetchOnInit
: this defines how fetch should be done initially.always
: fetch called after paginate object constructed and reset everytime.once
: fetch called only after paginate object constructed.lazy
: fetch called only if offset = 0 andhost
becomes visible.- false: no fetch for initialization.
These are handy however may introduce inconsistency and confusion. Set both of them to false
if you'd like to control how fetching is done manually.
MIT