• Stars
    star
    420
  • Rank 103,194 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 13 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Add kinetic scrolling functionality to a container using mouse or touch devices

jQuery.kinetic

Dave Taylor http://davetayls.me The MIT License (MIT)

This code has been pretty stable for a while (with it's few restrictions) and so am not actively making changes. If you want to improve it in any way feel free to submit a pull request (with tests) and we will merge in any that make sense and don't add bloat to what is a simple plugin.

Master: Build Status

All branches: Build Status

jQuery.kinetic is a simple plugin which adds smooth drag scrolling with gradual deceleration to containers.

NB. @dzek69 has created a version of this plugin without the dependency on jQuery: https://github.com/dzek69/vanilla.kinetic

<iframe src="https://davetayls.me/jquery.kinetic/demo.html" width="100%" height="600" scrolling="no" frameborder="0"></iframe>

Installation

Bower

$ bower install jquery.kinetic --save

npm

$ npm install jquery.kinetic

CDN

<script src="https://cdn.jsdelivr.net/npm/jquery.kinetic/jquery.kinetic.js"></script>

Script tag

You can add the script to the page.

<script src="jquery.kinetic.js"></script>

Major new release 2.0 has BREAKING CHANGES

See release history below for details.

Compatibility

This plugin works with jQuery and Zepto

Browsers

  • ie: 7,8,9
  • firefox: 3.6,4,5
  • chrome: 13
  • safari: 5
  • iOS Safari: 4

Demos

Take a look at a demo on http://davetayls.me/jquery.kinetic.

Filtering Clickable elements

If you need to allow events to be passed through the wrapper. For example to allow clicking on a link or an input then you can use filterTarget like so.

$('#wrapper').kinetic({
    filterTarget: function(target, e){
        if (!/down|start/.test(e.type)){
            return !(/area|a|input/i.test(target.tagName));
        }
    }
});

Options

cursor          {string}    default: move   Specify the cursor to use on the wrapper
slowdown        {number}    default: 0.9    This option affects the speed at which the scroll slows
threshold       {number|function(target, e)}    default: 0   This is the number of pixels the mouse needs to move before the element starts scrolling
x               {string}    default: true   Toggles movement along the x axis
y               {string}    default: true   Toggles movement along the y axis
maxvelocity     {number}    default: 40     This option puts a cap on speed at which the container
                                            can scroll
throttleFPS     {number}    default: 60     This adds throttling to the mouse move events to boost
                                            performance when scrolling
triggerHardware {boolean} false             This adds css to the wrapper which
                                            will trigger iOS to use hardware acceleration
invert          {boolean}   default: false  Invert movement direction

filterTarget    {function(target)}          Return false from this function to
                                            prevent capturing the scroll

movingClass     {object}
    up:         {string}    default: 'kinetic-moving-up'
    down:       {string}    default: 'kinetic-moving-down'
    left:       {string}    default: 'kinetic-moving-left'
    right:      {string}    default: 'kinetic-moving-right'

deceleratingClass {object}
    up:         {string}    default: 'kinetic-decelerating-up'
    down:       {string}    default: 'kinetic-decelerating-down'
    left:       {string}    default: 'kinetic-decelerating-left'
    right:      {string}    default: 'kinetic-decelerating-right'

Listeners:  All listeners are called with:
            - this = the instance of the Kinetic class

moved       {function()}           A function which is called on every move
stopped     {function()}           A function which is called once all
                                           movement has stopped
selectStart {function()}           A function which is called on user try to drag (select text),
                                           return false to prevent selection when dragging

Methods:    You can call methods by running the kinetic plugin
            on an element which has already been activated.

            eg  $('#wrapper').kinetic(); // activate
                $('#wrapper').kinetic('methodname', options);

start       Start movement in the scroll container at a particular velocity.
            This velocity will not slow until the end method is called.

            The following line scrolls the container left.
            $('#wrapper#).kinetic('start', { velocity: -30 });

            The following line scrolls the container right.
            $('#wrapper#).kinetic('start', { velocity: 30 });

            The following line scrolls the container diagonally.
            $('#wrapper#).kinetic('start', { velocity: -30, velocityY: -10 });

end         Begin slowdown of any scrolling velocity in the container.
            $('#wrapper#).kinetic('end');

stop        Stop the scrolling immediately

detach      Detach listeners and functionality from the wrapper

attach      Re-attach listeners and functionality previously detached using
            the detach method

Add your own methods

There are some example methods in the extra-methods folder. You can also add your own.

$.Kinetic.prototype.do = function(options){
  // this -> instance of Kinetic
  // this.settings -> get current settings
  // options -> options passed in from call
};

// use the method
$('#elem').kinetic('do', { options });

Hack the core

You can now hook in to the core functionality to make changes.

var _start = $.Kinetic.prototype.start;
$.Kinetic.prototype.start = function(options){
  // -> do something
  _start.apply(this, arguments);
};

Running the tests

The test suite uses grunt's server and qunit functionality. The tests are being built up but currently cover the core functionality. This runs all qUnit Html specs in the /test/specs folder.

  • grunt npm install -g grunt
  • install devDependencies npm install from the root of the source

Then run from the root of the source

$ grunt

Manual tests

There are manual tests as html files within the /test folder.

Releasing a new version

Releasing a small fix or change. The following will update the patch version number.

$ grunt release

Releasing a potentially breaking feature. The following will update the minor version number.

$ grunt release:minor

Changes

2.2.2

  • Added main property to package.json (@michaelsouellette) #105

2.2.1

  • Added selectStart option and allow selection when _useTarget returns false (@tsaikd) #84
  • Added invert option (@tsaikd) #84

2.1.0

  • Added threshold option (@UziTech) #84

2.0.6

  • Fix touch and mouse bindings so that an external pointing device can be used with a touchscreen device.

2.0.5

  • Fix detach scroll event for touch devices (@Jaemu)

2.0.4

  • Fix the useTarget call to include the event as per the example in the readme for ignoring scroll events. (@mooreOn)

2.0.3

  • only prevent drag and drop if element is usable target (@andrew-pause)

2.0.1

  • changes to allow attaching to <body> with $('body').kinetic() #61

2.0

After several years, this plugin has had a major refactor. Big thanks to (@skovhus) for helping with this rewrite. Here's what has happened.

  • rewrite of plugin to an OO plugin
  • BREAKING CHANGES
    • call methods are now attached to the $.Kinetic.prototype and have slightly different arguments (see docs above)
    • no more $.kinetic namespace
    • Kinetic constructor is attached to $.Kinetic
    • $('#wrapper').data('kinetic-settings') has been removed in favour of instance = $('#wrapper').data('kinetic'); settings = instance.settings
    • All events this context is now the instance of Kinetic. To access the $scroller which was previously the context you can use this.$el

1.8.2

  • fix #34, #28, now will discard any subsequent attempts to bind .kinetic()

1.8.1

  • tweak to hardware trigger css (@edmelly)
  • upgrade to Grunt 0.4

1.8

  • add scroll listener to trigger move events (@dennipahmah)

1.7

  • add cursor option to change the default move cursor

1.6.1

  • bug fix release for unbinding touch events

1.6

  • use bind for touch events to fix issues on android

1.5

  • added ability to prevent capturing scroll depending on the target
  • fix for using alongside jQuery UI draggable #14 - thanks @sidoh, @NilsHolmstrom

1.4

  • added ability to nest containers thanks @cc-lam
  • added detach/attach methods
  • added triggerHardware option

1.3

  • IE bug fixes when dragging images

  • Adding extensibility for methods by attaching functions to jQuery.

      // add the method
      $.kinetic.callMethods.do = function(settings, options){
          // method functionality
      };
    
      // use the method
      $('#elem').kinetic('do', { ... });
    
  • Added stop method

  • Fix bug with ignored axis triggering animation frames

More Repositories

1

exploring-fp-ts-series

Supporting code for the Exploring fp-ts series
TypeScript
31
star
2

jquery.lazyLoader

Semantic, organic responsive images
JavaScript
28
star
3

html5racer

Giving a simple canvas racer a go
JavaScript
23
star
4

jquery.liScroll

jQuery Ticker with Next/Previous/Play/Pause
JavaScript
12
star
5

jquery.maps

Google maps from markup
JavaScript
5
star
6

teststation

JavaScript
4
star
7

juxtapo

front-end developer tools
JavaScript
4
star
8

vim-settings

my vim settings
Vim Script
4
star
9

rivet

Advanced JavaScript Combiner
C#
3
star
10

jquery.unparam

The reverse of the jquery.param function
JavaScript
3
star
11

bomber

simple plane bomber game
3
star
12

jquery.serializeObject

advanced serializeObject which also converts form name.spaced[0].names
JavaScript
3
star
13

brando

A brand test suite
JavaScript
2
star
14

backbone.scenemanager

Lightweight management of transitioning between views within a scene with history
JavaScript
2
star
15

sjs

A server side JavaScript framework
JavaScript
2
star
16

jquery.childmap

Creates a simple box map of all the element's children
2
star
17

mother

infinitely scroll children within a window graciously handling births and deaths :o/
JavaScript
2
star
18

front-end-testing

useful testing scripts
JavaScript
2
star
19

velocitr

a simple way of managing something's velocity and drag
JavaScript
2
star
20

power-of-typescript-react

A small project exploring the Power of TypeScript with React Series http://davetayls.me/blog/2017/06/12/the-power-of-typescript-for-react
TypeScript
1
star
21

front-end-standards

Front-End templates and standards
JavaScript
1
star
22

templating

common templates using various templating languages
1
star
23

karma-amdwrap-preprocessor

Karma preprocessor running amdwrap on code
JavaScript
1
star
24

jquery.stagger

stagger jobs at a set time interval
1
star
25

sunka

sunka game
JavaScript
1
star
26

jquery.checkbox

updates and fixes from http://widowmaker.kiev.ua/checkbox/
JavaScript
1
star
27

js-vector-classes

A collection of JavaScript Euclidean Vector classes
JavaScript
1
star
28

scaffo

Project scaffolding and Front-End prototyping
CSS
1
star
29

jquery.promo

very basic carouselish plugin which lets you control the transitions
JavaScript
1
star
30

markdown-writer

Markdown preview with localstorage saving
JavaScript
1
star
31

polyfill

common polyfills for browser javascript
JavaScript
1
star
32

visual-studio-stylus

Use CSS editor for styl files in Visual Studio 2010
C#
1
star
33

boa-vantage-point

React Native app showing beautiful vantage points around my beautiful home town
JavaScript
1
star
34

jquery.scrollRatio

alter the ratio at which an element scrolls
JavaScript
1
star
35

assets

personal library assets used with @visionmedia/asset
Shell
1
star
36

siteblueprint

A template for a new site using jquery, requirejs, lesscss, screw unit and paul irish's html5 boilerplate
JavaScript
1
star
37

uniform-codegen

Code generator utilities including TypeScript types for components for Uniform Projects
TypeScript
1
star
38

space-invaders

a space invaders game
JavaScript
1
star
39

devicebrowser

simple viewer of url from different device widths
1
star
40

stepper

simple script to trigger on integer steps
JavaScript
1
star
41

amd-dialog

amd dialog module used with jquery ui
JavaScript
1
star
42

jquery.concertina

lightweight concertina
JavaScript
1
star
43

jquery.pager

jQuery Paging plugin. major rework of quickPager by dan and emanuel @geckonm.com
JavaScript
1
star
44

facebook

facebook development playground
1
star