From f2342f2678d77e09f6f47e614eb8a4c581bcdf16 Mon Sep 17 00:00:00 2001 From: Hyunje Alex Jun Date: Tue, 28 Oct 2014 16:41:36 +0000 Subject: [PATCH] Change the way to handle event class name. Use factory pattern to handle it, instead of using + operator of string. --- src/perfect-scrollbar.js | 90 +++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 43 deletions(-) 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);