Skip to content

Commit 7a2d934

Browse files
authored
Core: Drop support for older jQuery & browsers, drop shorthands
Changes: 1. Drop support for IE <11. 2. Drop support for older jQuery; only support newest versions from the 1.x & 2.x lines and 3.6.4 or newer. 3. Drop support for non-wheel backing native events. 4. Drop the `mousewheel` and `unmousewheel` shorthands. 5. Move `jquery` from `dependencies` to `peerDependencies` & `devDependencies`. Closes gh-252
1 parent 5c0edde commit 7a2d934

File tree

8 files changed

+48
-207
lines changed

8 files changed

+48
-207
lines changed

.github/workflows/browserstack.yml

-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ jobs:
2121
fail-fast: false
2222
matrix:
2323
BROWSER:
24-
- 'IE_9'
25-
- 'IE_10'
2624
- 'IE_11'
2725
- 'Safari_latest'
2826
- 'Safari_latest-1'

README.md

-9
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ A [jQuery](https://jquery.com/) plugin that adds cross-browser mouse wheel suppo
44

55
In order to use the plugin, simply bind the `mousewheel` event to an element.
66

7-
It also provides two deprecated helper methods called `mousewheel` and `unmousewheel`
8-
that act just like other event helper methods in jQuery.
9-
107
The event object is updated with the normalized `deltaX` and `deltaY` properties.
118
In addition, there is a new property on the event object called `deltaFactor`. Multiply
129
the `deltaFactor` by `deltaX` or `deltaY` to get the scroll distance that the browser
@@ -15,15 +12,9 @@ has reported.
1512
Here is an example of using both the bind and helper method syntax:
1613

1714
```js
18-
// using on
1915
$( "#my_elem" ).on( "mousewheel", function( event ) {
2016
console.log( event.deltaX, event.deltaY, event.deltaFactor );
2117
} );
22-
23-
// using the event helper - not recommended!
24-
$( "#my_elem" ).mousewheel( function( event ) {
25-
console.log( event.deltaX, event.deltaY, event.deltaFactor );
26-
} );
2718
```
2819

2920
The old behavior of adding three arguments (`delta`, `deltaX`, and `deltaY`) to the

jtr.yml

-48
Original file line numberDiff line numberDiff line change
@@ -20,55 +20,7 @@ runs:
2020
- 3.6.4.min
2121
- 3.6.4.slim
2222
- 3.6.4.slim.min
23-
- 3.5.1
24-
- 3.5.1.min
25-
- 3.5.1.slim
26-
- 3.5.1.slim.min
27-
- 3.4.1
28-
- 3.4.1.min
29-
- 3.4.1.slim
30-
- 3.4.1.slim.min
31-
- 3.3.1
32-
- 3.3.1.min
33-
- 3.3.1.slim
34-
- 3.3.1.slim.min
35-
- 3.2.1
36-
- 3.2.1.min
37-
- 3.2.1.slim
38-
- 3.2.1.slim.min
39-
- 3.1.1
40-
- 3.1.1.min
41-
- 3.1.1.slim
42-
- 3.1.1.slim.min
43-
- 3.0.0
44-
- 3.0.0.min
45-
- 3.0.0.slim
46-
- 3.0.0.slim.min
4723
- 2.2.4
4824
- 2.2.4.min
49-
- 2.1.4
50-
- 2.1.4.min
51-
- 2.0.3
52-
- 2.0.3.min
5325
- 1.12.4
5426
- 1.12.4.min
55-
- 1.11.3
56-
- 1.11.3.min
57-
- 1.10.2
58-
- 1.10.2.min
59-
- 1.9.1
60-
- 1.9.1.min
61-
- 1.8.3
62-
- 1.8.3.min
63-
- 1.7.2
64-
- 1.7.2.min
65-
- 1.6.4
66-
- 1.6.4.min
67-
- 1.5.2
68-
- 1.5.2.min
69-
- 1.4.4
70-
- 1.4.4.min
71-
- 1.3.2
72-
- 1.3.2.min
73-
- 1.2.6
74-
- 1.2.6.min

package-lock.json

+9-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,15 @@
4949
"test:unit": "jtr",
5050
"test": "npm run build && npm run lint && npm run test:browser"
5151
},
52-
"dependencies": {
53-
"jquery": ">=1.2.6"
52+
"peerDependencies": {
53+
"jquery": ">=1.12.4 <2 || >=2.2.4 <3 || >=3.6.4"
5454
},
5555
"devDependencies": {
5656
"@swc/core": "1.11.8",
5757
"eslint": "9.22.0",
5858
"eslint-config-jquery": "3.0.2",
5959
"globals": "16.0.0",
60+
"jquery": "3.7.1",
6061
"jquery-test-runner": "0.2.6",
6162
"qunit": "2.24.1",
6263
"requirejs": "2.3.7",

src/jquery.mousewheel.js

+20-104
Original file line numberDiff line numberDiff line change
@@ -26,43 +26,25 @@
2626
"use strict";
2727

2828
var nullLowestDeltaTimeout, lowestDelta,
29-
modernEvents = !!$.fn.on,
30-
toFix = [ "wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll" ],
31-
toBind = ( "onwheel" in window.document || window.document.documentMode >= 9 ) ?
32-
[ "wheel" ] : [ "mousewheel", "DomMouseScroll", "MozMousePixelScroll" ],
3329
slice = Array.prototype.slice;
3430

3531
if ( $.event.fixHooks ) {
36-
for ( var i = toFix.length; i; ) {
37-
$.event.fixHooks[ toFix[ --i ] ] = $.event.mouseHooks;
38-
}
32+
$.event.fixHooks.wheel = $.event.mouseHooks;
3933
}
4034

4135
var special = $.event.special.mousewheel = {
4236
version: "@VERSION",
4337

4438
setup: function() {
45-
if ( this.addEventListener ) {
46-
for ( var i = toBind.length; i; ) {
47-
this.addEventListener( toBind[ --i ], handler, false );
48-
}
49-
} else {
50-
this.onmousewheel = handler;
51-
}
39+
this.addEventListener( "wheel", handler, false );
5240

5341
// Store the line height and page height for this particular element
5442
$.data( this, "mousewheel-line-height", special.getLineHeight( this ) );
5543
$.data( this, "mousewheel-page-height", special.getPageHeight( this ) );
5644
},
5745

5846
teardown: function() {
59-
if ( this.removeEventListener ) {
60-
for ( var i = toBind.length; i; ) {
61-
this.removeEventListener( toBind[ --i ], handler, false );
62-
}
63-
} else {
64-
this.onmousewheel = null;
65-
}
47+
this.removeEventListener( "wheel", handler, false );
6648

6749
// Clean up the data we added to the element
6850
$.removeData( this, "mousewheel-line-height" );
@@ -71,77 +53,40 @@
7153

7254
getLineHeight: function( elem ) {
7355
var $elem = $( elem ),
74-
$parent = $elem[ "offsetParent" in $.fn ? "offsetParent" : "parent" ]();
56+
$parent = $elem.offsetParent();
7557
if ( !$parent.length ) {
7658
$parent = $( "body" );
7759
}
7860
return parseInt( $parent.css( "fontSize" ), 10 ) ||
79-
parseInt( $elem.css( "fontSize" ), 10 ) || 16;
61+
parseInt( $elem.css( "fontSize" ), 10 ) || 16;
8062
},
8163

8264
getPageHeight: function( elem ) {
8365
return $( elem ).height();
8466
},
8567

8668
settings: {
87-
adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
8869
normalizeOffset: true // calls getBoundingClientRect for each event
8970
}
9071
};
9172

92-
$.fn.extend( {
93-
mousewheel: function( fn ) {
94-
return fn ?
95-
this[ modernEvents ? "on" : "bind" ]( "mousewheel", fn ) :
96-
this.trigger( "mousewheel" );
97-
},
98-
99-
unmousewheel: function( fn ) {
100-
return this[ modernEvents ? "off" : "unbind" ]( "mousewheel", fn );
101-
}
102-
} );
103-
73+
function handler( origEvent ) {
74+
var args = slice.call( arguments, 1 ),
75+
delta = 0,
76+
deltaX = 0,
77+
deltaY = 0,
78+
absDelta = 0,
79+
event = $.event.fix( origEvent );
10480

105-
function handler( event ) {
106-
var orgEvent = event || window.event,
107-
args = slice.call( arguments, 1 ),
108-
delta = 0,
109-
deltaX = 0,
110-
deltaY = 0,
111-
absDelta = 0;
112-
event = $.event.fix( orgEvent );
11381
event.type = "mousewheel";
11482

115-
// Old school scrollwheel delta
116-
if ( "detail" in orgEvent ) {
117-
deltaY = orgEvent.detail * -1;
118-
}
119-
if ( "wheelDelta" in orgEvent ) {
120-
deltaY = orgEvent.wheelDelta;
121-
}
122-
if ( "wheelDeltaY" in orgEvent ) {
123-
deltaY = orgEvent.wheelDeltaY;
124-
}
125-
if ( "wheelDeltaX" in orgEvent ) {
126-
deltaX = orgEvent.wheelDeltaX * -1;
127-
}
128-
129-
// Firefox < 17 horizontal scrolling related to DOMMouseScroll event
130-
if ( "axis" in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
131-
deltaX = deltaY * -1;
132-
deltaY = 0;
133-
}
134-
135-
// Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatability
136-
delta = deltaY === 0 ? deltaX : deltaY;
137-
13883
// New school wheel delta (wheel event)
139-
if ( "deltaY" in orgEvent ) {
140-
deltaY = orgEvent.deltaY * -1;
84+
if ( "deltaY" in origEvent ) {
85+
deltaY = origEvent.deltaY * -1;
14186
delta = deltaY;
14287
}
143-
if ( "deltaX" in orgEvent ) {
144-
deltaX = orgEvent.deltaX;
88+
if ( "deltaX" in origEvent ) {
89+
deltaX = origEvent.deltaX;
14590
if ( deltaY === 0 ) {
14691
delta = deltaX * -1;
14792
}
@@ -157,12 +102,12 @@
157102
// * deltaMode 0 is by pixels, nothing to do
158103
// * deltaMode 1 is by lines
159104
// * deltaMode 2 is by pages
160-
if ( orgEvent.deltaMode === 1 ) {
105+
if ( origEvent.deltaMode === 1 ) {
161106
var lineHeight = $.data( this, "mousewheel-line-height" );
162107
delta *= lineHeight;
163108
deltaY *= lineHeight;
164109
deltaX *= lineHeight;
165-
} else if ( orgEvent.deltaMode === 2 ) {
110+
} else if ( origEvent.deltaMode === 2 ) {
166111
var pageHeight = $.data( this, "mousewheel-page-height" );
167112
delta *= pageHeight;
168113
deltaY *= pageHeight;
@@ -174,20 +119,6 @@
174119

175120
if ( !lowestDelta || absDelta < lowestDelta ) {
176121
lowestDelta = absDelta;
177-
178-
// Adjust older deltas if necessary
179-
if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {
180-
lowestDelta /= 40;
181-
}
182-
}
183-
184-
// Adjust older deltas if necessary
185-
if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {
186-
187-
// Divide all the things by 40!
188-
delta /= 40;
189-
deltaX /= 40;
190-
deltaY /= 40;
191122
}
192123

193124
// Get a whole, normalized value for the deltas
@@ -219,27 +150,12 @@
219150
// handle multiple device types that give different
220151
// a different lowestDelta
221152
// Ex: trackpad = 3 and mouse wheel = 120
222-
if ( nullLowestDeltaTimeout ) {
223-
window.clearTimeout( nullLowestDeltaTimeout );
224-
}
153+
window.clearTimeout( nullLowestDeltaTimeout );
225154
nullLowestDeltaTimeout = window.setTimeout( function() {
226155
lowestDelta = null;
227156
}, 200 );
228157

229-
return ( $.event.dispatch || $.event.handle ).apply( this, args );
230-
}
231-
232-
function shouldAdjustOldDeltas( orgEvent, absDelta ) {
233-
234-
// If this is an older event and the delta is divisible by 120,
235-
// then we are assuming that the browser is treating this as an
236-
// older mouse wheel event and that we should divide the deltas
237-
// by 40 to try and get a more usable deltaFactor.
238-
// Side note, this actually impacts the reported scroll distance
239-
// in older browsers and can cause scrolling to be slower than native.
240-
// Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
241-
return special.settings.adjustOldDeltas && orgEvent.type === "mousewheel" &&
242-
absDelta % 120 === 0;
158+
return $.event.dispatch.apply( this, args );
243159
}
244160

245161
} );

0 commit comments

Comments
 (0)