diff --git a/src/perfect-scrollbar.js b/src/perfect-scrollbar.js
index 84ff01b..c6e9f35 100644
--- a/src/perfect-scrollbar.js
+++ b/src/perfect-scrollbar.js
@@ -39,14 +39,18 @@
includePadding: false
};
- var getEventClassName = (function () {
- var incrementingId = 0;
- return function () {
- var id = incrementingId;
- incrementingId += 1;
- return '.perfect-scrollbar-' + id;
+ var incrementingId = 0;
+ var eventClassFactory = function () {
+ var id = incrementingId++;
+ return function (eventName) {
+ var className = '.perfect-scrollbar-' + id;
+ if (typeof eventName === 'undefined') {
+ return className;
+ } else {
+ return eventName + className;
+ }
};
- })();
+ };
$.fn.perfectScrollbar = function (suppliedSettings, option) {
@@ -92,7 +96,7 @@
var contentHeight;
var isRtl = $this.css('direction') === "rtl";
- var eventClassName = getEventClassName();
+ var eventClass = eventClassFactory();
var ownerDocument = this.ownerDocument || document;
var $scrollbarXRail = $("
").appendTo($this);
@@ -258,7 +262,7 @@
var currentLeft;
var currentPageX;
- $scrollbarX.bind('mousedown' + eventClassName, function (e) {
+ $scrollbarX.bind(eventClass('mousedown'), function (e) {
currentPageX = e.pageX;
currentLeft = $scrollbarX.position().left;
$scrollbarXRail.addClass('in-scrolling');
@@ -266,7 +270,7 @@
e.preventDefault();
});
- $(ownerDocument).bind('mousemove' + eventClassName, function (e) {
+ $(ownerDocument).bind(eventClass('mousemove'), function (e) {
if ($scrollbarXRail.hasClass('in-scrolling')) {
updateScrollLeft(currentLeft, e.pageX - currentPageX);
updateGeometry();
@@ -275,7 +279,7 @@
}
});
- $(ownerDocument).bind('mouseup' + eventClassName, function (e) {
+ $(ownerDocument).bind(eventClass('mouseup'), function (e) {
if ($scrollbarXRail.hasClass('in-scrolling')) {
$scrollbarXRail.removeClass('in-scrolling');
}
@@ -289,7 +293,7 @@
var currentTop;
var currentPageY;
- $scrollbarY.bind('mousedown' + eventClassName, function (e) {
+ $scrollbarY.bind(eventClass('mousedown'), function (e) {
currentPageY = e.pageY;
currentTop = $scrollbarY.position().top;
$scrollbarYRail.addClass('in-scrolling');
@@ -297,7 +301,7 @@
e.preventDefault();
});
- $(ownerDocument).bind('mousemove' + eventClassName, function (e) {
+ $(ownerDocument).bind(eventClass('mousemove'), function (e) {
if ($scrollbarYRail.hasClass('in-scrolling')) {
updateScrollTop(currentTop, e.pageY - currentPageY);
updateGeometry();
@@ -306,7 +310,7 @@
}
});
- $(ownerDocument).bind('mouseup' + eventClassName, function (e) {
+ $(ownerDocument).bind(eventClass('mouseup'), function (e) {
if ($scrollbarYRail.hasClass('in-scrolling')) {
$scrollbarYRail.removeClass('in-scrolling');
}
@@ -410,23 +414,23 @@
}
if (typeof window.onwheel !== "undefined") {
- $this.bind('wheel' + eventClassName, mousewheelHandler);
+ $this.bind(eventClass('wheel'), mousewheelHandler);
} else if (typeof window.onmousewheel !== "undefined") {
- $this.bind('mousewheel' + eventClassName, mousewheelHandler);
+ $this.bind(eventClass('mousewheel'), mousewheelHandler);
}
}
function bindKeyboardHandler() {
var hovered = false;
- $this.bind('mouseenter' + eventClassName, function (e) {
+ $this.bind(eventClass('mouseenter'), function (e) {
hovered = true;
});
- $this.bind('mouseleave' + eventClassName, function (e) {
+ $this.bind(eventClass('mouseleave'), function (e) {
hovered = false;
});
var shouldPrevent = false;
- $(ownerDocument).bind('keydown' + eventClassName, function (e) {
+ $(ownerDocument).bind(eventClass('keydown'), function (e) {
if (e.isDefaultPrevented && e.isDefaultPrevented()) {
return;
}
@@ -498,8 +502,8 @@
function bindRailClickHandler() {
function stopPropagation(e) { e.stopPropagation(); }
- $scrollbarY.bind('click' + eventClassName, stopPropagation);
- $scrollbarYRail.bind('click' + eventClassName, function (e) {
+ $scrollbarY.bind(eventClass('click'), stopPropagation);
+ $scrollbarYRail.bind(eventClass('click'), function (e) {
var halfOfScrollbarLength = int(scrollbarYHeight / 2);
var positionTop = e.pageY - $scrollbarYRail.offset().top - halfOfScrollbarLength;
var maxPositionTop = containerHeight - scrollbarYHeight;
@@ -514,8 +518,8 @@
$this.scrollTop((contentHeight - containerHeight) * positionRatio);
});
- $scrollbarX.bind('click' + eventClassName, stopPropagation);
- $scrollbarXRail.bind('click' + eventClassName, function (e) {
+ $scrollbarX.bind(eventClass('click'), stopPropagation);
+ $scrollbarXRail.bind(eventClass('click'), function (e) {
var halfOfScrollbarLength = int(scrollbarXWidth / 2);
var positionLeft = e.pageX - $scrollbarXRail.offset().left - halfOfScrollbarLength;
var maxPositionLeft = containerWidth - scrollbarXWidth;
@@ -634,40 +638,40 @@
}
if (supportsTouch) {
- $(window).bind("touchstart" + eventClassName, globalTouchStart);
- $(window).bind("touchend" + eventClassName, globalTouchEnd);
- $this.bind("touchstart" + eventClassName, touchStart);
- $this.bind("touchmove" + eventClassName, touchMove);
- $this.bind("touchend" + eventClassName, touchEnd);
+ $(window).bind(eventClass("touchstart"), globalTouchStart);
+ $(window).bind(eventClass("touchend"), globalTouchEnd);
+ $this.bind(eventClass("touchstart"), touchStart);
+ $this.bind(eventClass("touchmove"), touchMove);
+ $this.bind(eventClass("touchend"), touchEnd);
}
if (supportsIePointer) {
if (window.PointerEvent) {
- $(window).bind("pointerdown" + eventClassName, globalTouchStart);
- $(window).bind("pointerup" + eventClassName, globalTouchEnd);
- $this.bind("pointerdown" + eventClassName, touchStart);
- $this.bind("pointermove" + eventClassName, touchMove);
- $this.bind("pointerup" + eventClassName, touchEnd);
+ $(window).bind(eventClass("pointerdown"), globalTouchStart);
+ $(window).bind(eventClass("pointerup"), globalTouchEnd);
+ $this.bind(eventClass("pointerdown"), touchStart);
+ $this.bind(eventClass("pointermove"), touchMove);
+ $this.bind(eventClass("pointerup"), touchEnd);
} else if (window.MSPointerEvent) {
- $(window).bind("MSPointerDown" + eventClassName, globalTouchStart);
- $(window).bind("MSPointerUp" + eventClassName, globalTouchEnd);
- $this.bind("MSPointerDown" + eventClassName, touchStart);
- $this.bind("MSPointerMove" + eventClassName, touchMove);
- $this.bind("MSPointerUp" + eventClassName, touchEnd);
+ $(window).bind(eventClass("MSPointerDown"), globalTouchStart);
+ $(window).bind(eventClass("MSPointerUp"), globalTouchEnd);
+ $this.bind(eventClass("MSPointerDown"), touchStart);
+ $this.bind(eventClass("MSPointerMove"), touchMove);
+ $this.bind(eventClass("MSPointerUp"), touchEnd);
}
}
}
function bindScrollHandler() {
- $this.bind('scroll' + eventClassName, function (e) {
+ $this.bind(eventClass('scroll'), function (e) {
updateGeometry();
});
}
function destroy() {
- $this.unbind(eventClassName);
- $(window).unbind(eventClassName);
- $(ownerDocument).unbind(eventClassName);
+ $this.unbind(eventClass());
+ $(window).unbind(eventClass());
+ $(ownerDocument).unbind(eventClass());
$this.data('perfect-scrollbar', null);
$this.data('perfect-scrollbar-update', null);
$this.data('perfect-scrollbar-destroy', null);
@@ -698,7 +702,7 @@
isScrollbarYUsingRight =
scrollbarYLeft =
isRtl =
- eventClassName = null;
+ eventClass = null;
}
var supportsTouch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);