0.0.11 • Published 9 years ago

infinite-scroller v0.0.11

Weekly downloads
11
License
MIT
Repository
github
Last release
9 years ago

infinite-scroller

Simple infinite scroll

Note: Code is functional, but I need to write some documentation and demos. To follow shortly...

Install as follows if you are using Browserify:

npm install infinite-scroller --save

or if not, simply include the JS file (It will expose a window.InfiniteScroller global if Browserify is not detected)

Demos available at http://andymantell.github.io/infinite-scroller/

There are no dependencies apart from that it expects a Promise implementation to be available either natively or via a polyfill. If you don't have this already, es6-promise is great. If you don't want a Promise implementation in your application, then this plugin is not for you!

TODO:

  • Handle the last page properly - i.e. resolve the request promise with false and then disable infinite scrolling.
  • Catch promise rejections from the request handler and do something useful with them
  • Add in history management with history.replaceState so that when clicking away and returning to the list page, you are returned to the same place you are left off.
  • Make sure the plugin works in situations where the page already contains the first set of results in the DOM - i.e. a no-JS fallback.
  • Test suite
  • Make it fail gracefully in IE8. Or support IE8, depending on my mood.

Basic usage

var targetElement = document.querySelector('.my-target-element');

var infiniteScrollerInstance = new InfiniteScroller(targetElement, {
  request: function(page) {
    return new Promise(function(resolve, reject) {
      var httpRequest = new XMLHttpRequest();

      httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState === 4) {
          if (httpRequest.status === 200) {

            // Resolve the promise with an HTML string representing the items to be added
            // Either directly from the AJAX request, or if your request returns JSON just render
            // it here and then return the HTML.
            resolve(httpRequest.responseText);
          } else {
            reject('There was a problem with the request.');
          }
        }
      };

      httpRequest.open('GET', '/whatever/example-api/results?page=' + page);
      httpRequest.send();
    });
  }
});

infiniteScrollerInstance.init()
0.0.11

9 years ago

0.0.10

9 years ago

0.0.8

9 years ago

0.0.7

9 years ago

0.0.6

9 years ago

0.0.5

9 years ago

0.0.4

9 years ago

0.0.3

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago

0.0.0

9 years ago