Locks mouse wheel scroll inside container, preventing it from propagating to parent element
npm install jquery-scroll-lock



Scroll Lock
=================
Scroll Lock is a jQuery plugin that fully addresses the issue of locking mouse wheel scroll inside a given container, preventing it from propagating to parent element.
> View demo
Install-Package jquery-scrollLock
`
$3
`
bower install jquery-scrollLock
`
$3
`
npm install jquery-scroll-lock --save
`
Usage
Trigger Scroll Lock via JavaScript:
`js
$('#target').scrollLock();
`
Trigger Scroll Lock via Markup:
`html
data-strict='true'
data-selector='.child'
data-animation='{"top":"top locked","bottom":"bottom locked"}'
data-keyboard='{"tabindex":0}'
data-unblock='.inner'>
...
Options
| Options | Type | Default | Description
|:----------|:----------:|:----------:|:-------------
| animation | object | false | An object defining CSS class(es) to be applied when top or bottom edge is locked. (see remarks1)
| keyboard | object | false | When enabled, keys that causes scrolling will also be locked. (see remarks2)
| selector | string | false | When provided, matching descendants will be locked. Useful when dealing with dynamic HTML.
| strict | boolean | false | When enabled, only elements passing the strictFn check will be locked.
| strictFn | function | remarks3 | This function is responsible for deciding if the element should be locked or not.
| touch | boolean | auto | Indicates if an element's lock is enabled on touch screens.
| unblock | string | false | When provided, matching descendants scrolling will be unblocked. Useful when having a scrollable element inside a locked one.
$3
> This is pure JavaScript plugin, it does not provide any CSS. You need to implement your own!
The animation option has two keys:
`js
{
"top": "top locked",
"bottom": "bottom locked"
}
`
When an edge is locked, the value of both animation.top + animation.bottom will be removed from the locked element's class list.
Then based on the locked edge, the value of animation.top or animation.bottom is added to the class list, and removed once the browser animationend event is fired.
$3
In chrome, The following keys causes a scroll, which may propagate to parent element.
space, pageup, pagedown , end , home, up, down
The keyboard option has one key:
`js
{ "tabindex": 0 }
`
The tabindex is required to be able to listen to keyboard events on none input elements, such as a div. The side effect of adding a tabindex is the browser highlight when the element is focused.
Which can be avoided via CSS outline property.
`css
.scrollable{ outline:0; }
`
$3
The default strictFn implementation checks if the element requires a vertical scrollbar.
`javascript
strictFn = function($element){
return $element.prop('scrollHeight') > $element.prop('clientHeight');
}
`
> In previous versions (≤ v2.1.0), The check was based on scrollbar visibility, In case you require such behavior, include the following in your script:
`javascript
$.fn.scrollLock.defaults.strictFn = function ($element) {
var clientWidth = $element.prop('clientWidth'),
offsetWidth = $element.prop('offsetWidth'),
borderRightWidth = parseInt($element.css('border-right-width'), 10),
borderLeftWidth = parseInt($element.css('border-left-width'), 10)
return clientWidth + borderLeftWidth + borderRightWidth < offsetWidth
}
`
Methods
| Method | Description
|:-----------------------------|:--------------
| .scrollLock('enable') | Enables an element's Scroll Lock.
| .scrollLock('disable') | Disables an element's Scroll Lock.
| .scrollLock('toggleStrict')| Toggles an element's strict option.
| .scrollLock('destroy') | Disables and destroys an element's Scroll Lock.
Events
| Event | Description
|:--------------------|:-------------
| top.scrollLock | This event fires immediately when the top edge scroll is locked.
| bottom.scrollLock | This event fires immediately when the bottom edge scroll is locked.
`
$('#target').on('top.scrollLock', function (evt) {
// do magic :)
})
``