diff --git a/ChangeLog.md b/ChangeLog.md
index 77cceacdd..5c9b003c6 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,16 @@
# Mouse Wheel ChangeLog
+## 4.0.0-pre
+
+* BREAKING: Now requires jQuery 1.7+
+* BREAKING: Match delta signs (+-) to that of the newer wheel event standard.
+* BREAKING: Removed delta, deltaX, and deltaY from the event handler args. Use deltaX and deltaY properties from the event object instead.
+* BREAKING: Remove mousewheel/unmousehweel helper functions in preference of just using $().on and $().trigger
+* Added support for throttling/debouncing via data argument, example: $(...).on('mousewheel', { mousewheel: { behavior: 'throttle', delay: 100 } }, function(event) {...})
+* Added trigger hook so that triggering a mousewheel event works properly, example: $().trigger( $.Event('mousewheel', { deltaX: 0, deltaY: 120 }) );
+* Add examples directory
+* Add proper unit tests in addition to tried and true physical test
+
## 3.1.12
* Fix possible 0 value for line height when in delta mode 1
diff --git a/Gruntfile.js b/Gruntfile.js
index ccae0d03f..2ffe1d6f4 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -33,6 +33,14 @@ module.exports = function(grunt) {
}
}
}
+ },
+ bump: {
+ options: {
+ files: ['package.json', 'mousewheel.jquery.json', 'bower.json', 'jquery.mousewheel.js'],
+ commit: false,
+ createTag: false,
+ push: false
+ }
}
});
@@ -40,6 +48,7 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-connect');
+ grunt.loadNpmTasks('grunt-bump');
// Default task(s).
grunt.registerTask('default', ['jshint', 'uglify']);
diff --git a/README.md b/README.md
index e64cd5f65..21cc48605 100644
--- a/README.md
+++ b/README.md
@@ -29,15 +29,39 @@ $('#my_elem').mousewheel(function(event) {
The old behavior of adding three arguments (`delta`, `deltaX`, and `deltaY`) to the
event handler is now deprecated and will be removed in later releases.
-
## The Deltas...
-The combination of Browsers, Operating Systems, and Devices offer a huge range of possible delta values. In fact if the user
-uses a trackpad and then a physical mouse wheel the delta values can differ wildly. This plugin normalizes those
-values so you get a whole number starting at +-1 and going up in increments of +-1 according to the force or
-acceleration that is used. This number has the potential to be in the thousands depending on the device.
+The combination of browsers, operating systems, devices, and user settings offer a huge range of possible delta values.
+In fact if the user uses a trackpad and then a physical mouse wheel the delta values can differ wildly. This plugin
+normalizes those values so you get a whole number starting at +-1 and going up in increments of +-1 according to the
+force or acceleration that is used. This number has the potential to be in the thousands depending on the device.
Check out some of the data collected from users [here](http://mousewheeldatacollector.herokuapp.com/).
+### Which direction
+
+One way of understanding the direction is to understand which direction the user it trying to move the content.
+This happens to also align with the natural scroll setting in the latest version of OS X.
+A positive `deltaX` or `deltaY` means the user wants to move the content to west (to the left) or north (upwards) respectively.
+A negative `deltaX` or `deltaY` means the user wants to move the content to east (to the right) or south (downwards) respectively.
+
+```js
+var directions = {
+ isNorth: function(deltaY) { return deltaY > 0; },
+ isEast: function(deltaX) { return deltaX < 0; },
+ isSouth: function(deltaY) { return deltaY < 0; },
+ isWest: function(deltaX) { return deltaX > 0; },
+ isNorthEast: function(deltaX, deltaY) { return deltaX < 0 && deltaY > 0; },
+ isNorthWest: function(deltaX, deltaY) { return deltaX > 0 && deltaY > 0; },
+ isSouthEast: function(deltaX, deltaY) { return deltaX < 0 && deltaY < 0; },
+ isSouthWest: function(deltaX, deltaY) { return deltaX > 0 && deltaY < 0; }
+};
+```
+
+#### Older Versions
+
+In older versions of this plugin the delta value signs are the opposite. The deltaY value in this version align with
+the newer wheel event standard which flipped the delta signs from the old wheelDelta properties.
+
### Getting the scroll distance
In some use-cases we prefer to have the normalized delta but in others we want to know how far the browser should
@@ -47,6 +71,21 @@ event property to find the scroll distance the browser reported.
The `deltaFactor` property was added to the event object in 3.1.5 so that the actual reported delta value can be
extracted. This is a non-standard property.
+Here is an example of updating the scroll amount of an element based on the mouse wheel event.
+
+```js
+var $elem = $('#my_elem');
+$elem.on('mousewheel', function(event) {
+ event.preventDefault();
+
+ var top = $elem.scrollTop(),
+ left = $elem.scrollLeft(),
+
+ $elem
+ .scrollTop( event.deltaY * event.deltaFactor )
+ .scrollLeft( event.deltaX * event.deltaFactor );
+});
+```
## See it in action
[See the tests on Github](http://brandonaaron.github.io/jquery-mousewheel/test).
diff --git a/bower.json b/bower.json
index 4ce5741e7..7cb91c79f 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery-mousewheel",
- "version": "3.1.12",
+ "version": "4.0.0-pre",
"main": "./jquery.mousewheel.js",
"ignore": [
"*.json",
@@ -12,6 +12,6 @@
"test"
],
"dependencies": {
- "jquery": ">=1.2.2"
+ "jquery": ">=1.7"
}
}
diff --git a/test/browserify/README.md b/examples/browserify/README.md
similarity index 100%
rename from test/browserify/README.md
rename to examples/browserify/README.md
diff --git a/test/browserify/bundle.js b/examples/browserify/bundle.js
similarity index 100%
rename from test/browserify/bundle.js
rename to examples/browserify/bundle.js
diff --git a/test/browserify/index.html b/examples/browserify/index.html
similarity index 100%
rename from test/browserify/index.html
rename to examples/browserify/index.html
diff --git a/test/browserify/main.js b/examples/browserify/main.js
similarity index 100%
rename from test/browserify/main.js
rename to examples/browserify/main.js
diff --git a/jquery.mousewheel.js b/jquery.mousewheel.js
index 6756fa610..8fc1bfbd3 100755
--- a/jquery.mousewheel.js
+++ b/jquery.mousewheel.js
@@ -1,9 +1,7 @@
/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)
* Licensed under the MIT License (LICENSE.txt).
*
- * Version: 3.1.12
- *
- * Requires: jQuery 1.2.2+
+ * Requires: jQuery 1.7+
*/
(function (factory) {
@@ -19,21 +17,28 @@
}
}(function ($) {
+ // Events that need to be added to fixHooks
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
+ // Events that will be listened for
+ // The wheel event is most modern
+ // The DomMouseScroll and MozMousePixelScroll are for older Firefoxs
toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
slice = Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
- if ( $.event.fixHooks ) {
- for ( var i = toFix.length; i; ) {
- $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
- }
+ // Make sure we register the toFix events as mouse related
+ // events so jQuery will apply standard mouse fixes
+ for ( var i = toFix.length; i; ) {
+ $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
}
+ // The mousewheel special event
var special = $.event.special.mousewheel = {
- version: '3.1.12',
+ version: '4.0.0-pre',
+ // Runs once per an element
+ // Tell jQuery we'll handle how the event is added
setup: function() {
if ( this.addEventListener ) {
for ( var i = toBind.length; i; ) {
@@ -43,10 +48,46 @@
this.onmousewheel = handler;
}
// Store the line height and page height for this particular element
- $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
- $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
+ $.data(this, 'mousewheel-line-height', special._getLineHeight(this));
+ $.data(this, 'mousewheel-page-height', special._getPageHeight(this));
+ },
+
+ // Runs once per an event handler
+ // Use this to modify the handler function
+ // based on any "settings" that are passed
+ add: function(handleObj) {
+ // Settings are stored in mousewheel namespace on the data object
+ var data = handleObj.data,
+ settings = data && data.mousewheel;
+ if ( settings ) {
+ // throttle and debounce get applied first
+ if ( 'throttle' in settings || 'debounce' in settings ) {
+ special._delayHandler.call(this, handleObj);
+ }
+ // intent gets applied last so that it will be called
+ // first since it deals with the initial interaction
+ if ( 'intent' in settings ) {
+ special._intentHandler.call(this, handleObj);
+ }
+ }
},
+ // Runs when $().trigger() is called
+ // Used to make sure the handler gets appropriately called
+ trigger: function(data, event) {
+ if (!event) {
+ event = data;
+ data = null;
+ }
+
+ handler.call(this, event);
+
+ // Let jQuery know we fully handled the trigger call
+ return false;
+ },
+
+ // Runs once per an element
+ // Tell jQuery we'll handle how the event is removed
teardown: function() {
if ( this.removeEventListener ) {
for ( var i = toBind.length; i; ) {
@@ -60,7 +101,18 @@
$.removeData(this, 'mousewheel-page-height');
},
- getLineHeight: function(elem) {
+ settings: {
+ adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
+ normalizeOffset: true // calls getBoundingClientRect for each event
+ },
+
+ // Used to get the page height multiplier when deltaMode is 2
+ _getPageHeight: function(elem) {
+ return $(elem).height();
+ },
+
+ // Used to get the line height multiplier when deltaMode is 1
+ _getLineHeight: function(elem) {
var $elem = $(elem),
$parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
if (!$parent.length) {
@@ -69,129 +121,217 @@
return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
},
- getPageHeight: function(elem) {
- return $(elem).height();
- },
+ // All the related delta fixing logic
+ _fix: function(orgEvent) {
+ var deltaX = 0,
+ deltaY = 0,
+ absDelta = 0,
+ offsetX = 0,
+ offsetY = 0;
+ event = $.event.fix(orgEvent);
+
+ // Old school scrollwheel delta
+ if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail; }
+ if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta * -1; }
+ if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY * -1; }
+ if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
+
+ // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
+ if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+ deltaX = deltaY;
+ deltaY = 0;
+ }
- settings: {
- adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
- normalizeOffset: true // calls getBoundingClientRect for each event
- }
- };
+ // New school wheel delta (wheel event)
+ if ( 'deltaY' in orgEvent ) { deltaY = orgEvent.deltaY; }
+ if ( 'deltaX' in orgEvent ) { deltaX = orgEvent.deltaX; }
+
+ // No change actually happened, no reason to go any further
+ if ( deltaY === 0 && deltaX === 0 ) { return; }
+
+ // Need to convert lines and pages to pixels if we aren't already in pixels
+ // There are three delta modes:
+ // * deltaMode 0 is by pixels, nothing to do
+ // * deltaMode 1 is by lines
+ // * deltaMode 2 is by pages
+ if ( orgEvent.deltaMode === 1 ) {
+ var lineHeight = $.data(this, 'mousewheel-line-height');
+ deltaY *= lineHeight;
+ deltaX *= lineHeight;
+ } else if ( orgEvent.deltaMode === 2 ) {
+ var pageHeight = $.data(this, 'mousewheel-page-height');
+ deltaY *= pageHeight;
+ deltaX *= pageHeight;
+ }
- $.fn.extend({
- mousewheel: function(fn) {
- return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
- },
+ // Store lowest absolute delta to normalize the delta values
+ absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
- unmousewheel: function(fn) {
- return this.unbind('mousewheel', fn);
- }
- });
+ if ( !lowestDelta || absDelta < lowestDelta ) {
+ lowestDelta = absDelta;
+ // Adjust older deltas if necessary
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+ lowestDelta /= 40;
+ }
+ }
- function handler(event) {
- var orgEvent = event || window.event,
- args = slice.call(arguments, 1),
- delta = 0,
- deltaX = 0,
- deltaY = 0,
- absDelta = 0,
- offsetX = 0,
- offsetY = 0;
- event = $.event.fix(orgEvent);
- event.type = 'mousewheel';
-
- // Old school scrollwheel delta
- if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
- if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
- if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
- if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
-
- // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
- if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
- deltaX = deltaY * -1;
- deltaY = 0;
- }
+ // Adjust older deltas if necessary
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+ // Divide all the things by 40!
+ deltaX /= 40;
+ deltaY /= 40;
+ }
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
- delta = deltaY === 0 ? deltaX : deltaY;
+ // Get a whole, normalized value for the deltas
+ deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
+ deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
- // New school wheel delta (wheel event)
- if ( 'deltaY' in orgEvent ) {
- deltaY = orgEvent.deltaY * -1;
- delta = deltaY;
- }
- if ( 'deltaX' in orgEvent ) {
- deltaX = orgEvent.deltaX;
- if ( deltaY === 0 ) { delta = deltaX * -1; }
- }
+ // Normalise offsetX and offsetY properties
+ if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
+ var boundingRect = this.getBoundingClientRect();
+ offsetX = event.clientX - boundingRect.left;
+ offsetY = event.clientY - boundingRect.top;
+ }
- // No change actually happened, no reason to go any further
- if ( deltaY === 0 && deltaX === 0 ) { return; }
-
- // Need to convert lines and pages to pixels if we aren't already in pixels
- // There are three delta modes:
- // * deltaMode 0 is by pixels, nothing to do
- // * deltaMode 1 is by lines
- // * deltaMode 2 is by pages
- if ( orgEvent.deltaMode === 1 ) {
- var lineHeight = $.data(this, 'mousewheel-line-height');
- delta *= lineHeight;
- deltaY *= lineHeight;
- deltaX *= lineHeight;
- } else if ( orgEvent.deltaMode === 2 ) {
- var pageHeight = $.data(this, 'mousewheel-page-height');
- delta *= pageHeight;
- deltaY *= pageHeight;
- deltaX *= pageHeight;
- }
+ // Add information to the event object
+ event.deltaX = deltaX;
+ event.deltaY = deltaY;
+ event.deltaFactor = lowestDelta;
+ event.offsetX = offsetX;
+ event.offsetY = offsetY;
+ // Go ahead and set deltaMode to 0 since we converted to pixels
+ // Although this is a little odd since we overwrite the deltaX/Y
+ // properties with normalized deltas.
+ event.deltaMode = 0;
- // Store lowest absolute delta to normalize the delta values
- absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
+ event.type = 'mousewheel';
- if ( !lowestDelta || absDelta < lowestDelta ) {
- lowestDelta = absDelta;
+ return event;
+ },
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- lowestDelta /= 40;
- }
- }
+ // Returns a new handler that checks for users intent
+ // by monitoring the mouse movement
+ // Can use as:
+ // { mousewheel: { intent: true } }
+ // Or customize the default settings:
+ // { mousewheel: { intent { interval: 300, sensitivity: 2 } }
+ // Can also pass preventDefault and stopPropagation which will
+ // be called for all events that aren't passed to the original
+ // event handler.
+ _intentHandler: function(handleObj) {
+ var timeout, pX, pY, cX, cY,
+ hasIntent = false,
+ elem = this,
+ settings = handleObj.data.mousewheel.intent,
+ interval = settings.interval || 100,
+ sensitivity = settings.sensitivity || 7,
+ oldHandler = handleObj.handler,
+ track = function(event) {
+ cX = event.pageX;
+ cY = event.pageY;
+ },
+ compare = function() {
+ if ( (Math.abs(pX-cX) + Math.abs(pY-cY)) < sensitivity ) {
+ $(elem).off('mousemove', track);
+ hasIntent = true;
+ } else {
+ pX = cX;
+ pY = cY;
+ timeout = setTimeout(compare, interval);
+ }
+ },
+ newHandler = function(event) {
+ if (hasIntent) { return oldHandler.apply(elem, arguments); }
+ else { preventAndStopIfSet(settings, event); }
+ };
+
+ $(elem).on('mouseenter', function() {
+ pX = event.pageX;
+ pY = event.pageY;
+ $(elem).on('mousemove', track);
+ timeout = setTimeout(compare, interval);
+ }).on('mouseleave', function() {
+ if (timeout) { clearTimeout(timeout); }
+ $(elem).off('mousemove', track);
+ hasIntent = false;
+ });
+
+ handleObj.handler = newHandler;
+ },
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- // Divide all the things by 40!
- delta /= 40;
- deltaX /= 40;
- deltaY /= 40;
+ // Returns a new handler that uses either throttling or debouncing
+ // Can be used as:
+ // { mousewheel: { debounce: true } }
+ // { mousewheel: { throttle: true } }
+ // Or customize the default settings
+ // { mousewheel: { debounce: { delay: 500, maxDelay: 2000 } }
+ // Can also pass preventDefault and stopPropagation which will
+ // be called for all events.
+ _delayHandler: function(handleObj) {
+ var delayTimeout, maxTimeout, lastRun,
+ elem = this,
+ method = 'throttle' in handleObj.data.mousewheel ? 'throttle' : 'debounce',
+ settings = handleObj.data.mousewheel[method],
+ leading = 'leading' in settings ? settings.leading : method === 'debounce' ? false : true,
+ trailing = 'trailing' in settings ? settings.trailing : true,
+ delay = settings.delay || 100,
+ maxDelay = method === 'throttle' ? delay : settings.maxDelay,
+ oldHandler = handleObj.handler,
+ newHandler = function(event) {
+ var args = arguments,
+ clear = function() {
+ if ( maxTimeout ) { clearTimeout(maxTimeout); }
+ delayTimeout = null;
+ maxTimeout = null;
+ lastRun = null;
+ },
+ run = function() {
+ lastRun = +new Date();
+ return oldHandler.apply(elem, args);
+ },
+ maxDelayed = function() {
+ maxTimeout = null;
+ return run();
+ },
+ delayed = function() {
+ clear();
+ if ( trailing ) { return run(); }
+ },
+ result;
+
+ if ( delayTimeout ) {
+ clearTimeout(delayTimeout);
+ } else {
+ if ( leading ) { result = run(); }
+ }
+
+ delayTimeout = setTimeout(delayed, delay);
+
+ if ( method === 'throttle' ) {
+ if ( maxDelay && (+new Date() - lastRun) >= maxDelay ) { result = maxDelayed(); }
+ } else if ( maxDelay && !maxTimeout ) {
+ maxTimeout = setTimeout(maxDelayed, maxDelay);
+ }
+
+ preventAndStopIfSet(settings, event);
+
+ return result;
+ };
+ handleObj.handler = newHandler;
}
+ };
- // Get a whole, normalized value for the deltas
- delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
- deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
- deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
-
- // Normalise offsetX and offsetY properties
- if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
- var boundingRect = this.getBoundingClientRect();
- offsetX = event.clientX - boundingRect.left;
- offsetY = event.clientY - boundingRect.top;
- }
+ // What is actually bound to the element
+ function handler(event) {
+ // Might be trigged event, so check for the originalEvent first
+ var orgEvent = event ? event.originalEvent || event : window.event,
+ args = slice.call(arguments, 1);
- // Add information to the event object
- event.deltaX = deltaX;
- event.deltaY = deltaY;
- event.deltaFactor = lowestDelta;
- event.offsetX = offsetX;
- event.offsetY = offsetY;
- // Go ahead and set deltaMode to 0 since we converted to pixels
- // Although this is a little odd since we overwrite the deltaX/Y
- // properties with normalized deltas.
- event.deltaMode = 0;
+ event = special._fix(orgEvent);
- // Add event and delta to the front of the arguments
- args.unshift(event, delta, deltaX, deltaY);
+ // Add event to the front of the arguments
+ args.unshift(event);
// Clearout lowestDelta after sometime to better
// handle multiple device types that give different
@@ -200,9 +340,10 @@
if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
- return ($.event.dispatch || $.event.handle).apply(this, args);
+ return $.event.dispatch.apply(this, args);
}
+ // Used to clear out the last lowest delta value in a delayed fashion
function nullLowestDelta() {
lowestDelta = null;
}
@@ -218,4 +359,10 @@
return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
}
+ // Used by intent and delay handlers
+ function preventAndStopIfSet(settings, event) {
+ if (settings.preventDefault === true) { event.preventDefault(); }
+ if (settings.stopPropagation === true) { event.stopPropagation(); }
+ }
+
}));
diff --git a/mousewheel.jquery.json b/mousewheel.jquery.json
index 4d8eadb2d..7b69a2eb9 100644
--- a/mousewheel.jquery.json
+++ b/mousewheel.jquery.json
@@ -7,7 +7,7 @@
"mouse",
"event"
],
- "version": "3.1.12",
+ "version": "4.0.0-pre",
"author": {
"name": "Brandon Aaron",
"url": "http://brandon.aaron.sh"
@@ -22,6 +22,6 @@
"homepage": "https://github.com/brandonaaron/jquery-mousewheel",
"download": "https://github.com/brandonaaron/jquery-mousewheel/tags",
"dependencies": {
- "jquery": ">=1.2.2"
+ "jquery": ">=1.7"
}
}
diff --git a/package.json b/package.json
index 8fadb4b6b..6d2dadfc0 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery-mousewheel",
- "version": "3.1.12",
+ "version": "4.0.0-pre",
"author": "Brandon Aaron (http://brandon.aaron.sh)",
"description": "A jQuery plugin that adds cross-browser mouse wheel support.",
"license": "MIT",
@@ -38,7 +38,7 @@
},
"jam": {
"dependencies": {
- "jquery": ">=1.2.2"
+ "jquery": ">=1.7"
}
}
}
diff --git a/test/index.html b/test/physical/index.html
similarity index 83%
rename from test/index.html
rename to test/physical/index.html
index 0c683cf4e..e4a87d412 100644
--- a/test/index.html
+++ b/test/physical/index.html
@@ -3,7 +3,6 @@
Testing mousewheel plugin
-
html {
font: 13px Arial, sans-serif;
@@ -117,20 +116,15 @@
o = '#' + id + ':';
- if (delta > 0)
- o += ' up (' + delta + ')';
- else if (delta < 0)
- o += ' down (' + delta + ')';
-
if (event.deltaY > 0)
o += ' north (' + event.deltaY + ')';
else if (event.deltaY < 0)
o += ' south (' + event.deltaY + ')';
if (event.deltaX > 0)
- o += ' east (' + event.deltaX + ')';
- else if (event.deltaX < 0)
o += ' west (' + event.deltaX + ')';
+ else if (event.deltaX < 0)
+ o += ' east (' + event.deltaX + ')';
o += ' deltaFactor (' + event.deltaFactor + ')';
@@ -138,71 +132,71 @@
};
$(document)
- .mousewheel(function(event, delta) {
+ .on('mousewheel', function(event, delta) {
loghandle(event, delta);
});
$('#test1')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
+ loghandle(event);
log('pageX: ' + event.pageX + ' pageY: ' + event.pageY );
});
$('#test2')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
+ loghandle(event);
return false; // prevent default
});
$('#test3')
.hover(function() { log('#test3: mouseover'); }, function() { log('#test3: mouseout'); })
- .mousewheel(function() {
+ .on('mousewheel', function(event, delta, deltaX, deltaY) {
log('#test3: I should not have been logged');
})
- .unmousewheel();
+ .off('mousewheel');
var testRemoval = function() {
log('#test4: I should not have been logged');
};
$('#test4')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
+ loghandle(event);
return false;
})
- .mousewheel(testRemoval)
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', testRemoval)
+ .on('mousewheel', function(event) {
+ loghandle(event);
return false;
})
- .unmousewheel(testRemoval);
+ .off('mousewheel', testRemoval);
$('#test5')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
+ loghandle(event);
event.stopPropagation();
event.preventDefault();
});
$('#test6')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
event.stopPropagation();
event.preventDefault();
+ loghandle(event);
});
$('#test7')
- .mousewheel(function(event, delta) {
- loghandle(event, delta);
+ .on('mousewheel', function(event) {
+ loghandle(event);
event.preventDefault();
});
function log(msg) {
- $('#logger').append('