Skip to content

Commit

Permalink
Fix preventDefault being ignored due to event listeners being passive (
Browse files Browse the repository at this point in the history
…#2)

* Fix `preventDefault` being ignored due to event listeners being passive - https://www.chromestatus.com/features/5093566007214080
* Add property `preventContentJumping` so consumers can opt-out
  • Loading branch information
mistadikay authored and jossmac committed Jul 12, 2017
1 parent 6e2c192 commit 99f54ed
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions src/ScrollLock.js
Expand Up @@ -10,25 +10,33 @@ var createClass = require('create-react-class');
3. Allow scroll on provided target.
*/

var listenerOptions = { capture: false, passive: false };
var ScrollLock = createClass({
propTypes: {
scrollTarget: PropTypes.object,
preventContentJumping: PropTypes.bool
},
defaultProps: {
preventContentJumping: true
},
componentDidMount: function () {
if (!canUseDom()) return;

var scrollTarget = this.props.scrollTarget;
var scrollbarWidth = window.innerWidth - document.body.clientWidth; // 1.
var target = document.body;

target.style.paddingRight = scrollbarWidth + 'px';
if (this.props.preventContentJumping) {
var scrollbarWidth = window.innerWidth - document.body.clientWidth; // 1.

target.style.paddingRight = scrollbarWidth + 'px';
}
target.style.overflowY = 'hidden';

target.addEventListener('touchmove', preventTouchMove, false); // 2.
target.addEventListener('touchmove', preventTouchMove, listenerOptions); // 2.

if (scrollTarget) {
scrollTarget.addEventListener('touchstart', preventInertiaScroll, false); // 3.
scrollTarget.addEventListener('touchmove', allowTouchMove, false); // 3.
scrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions); // 3.
scrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions); // 3.
}
},
componentWillUnmount: function () {
Expand All @@ -37,14 +45,16 @@ var ScrollLock = createClass({
var scrollTarget = this.props.scrollTarget;
var target = document.body;

target.style.paddingRight = '';
if (this.props.preventContentJumping) {
target.style.paddingRight = '';
}
target.style.overflowY = '';

target.removeEventListener('touchmove', preventTouchMove, false);
target.removeEventListener('touchmove', preventTouchMove, listenerOptions);

if (scrollTarget) {
scrollTarget.removeEventListener('touchstart', preventInertiaScroll, false);
scrollTarget.removeEventListener('touchmove', allowTouchMove, false);
scrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions);
scrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions);
}
},
render: function () {
Expand Down

0 comments on commit 99f54ed

Please sign in to comment.