From 9220f7804f3db12bc5c225436d169cc5a3da418f Mon Sep 17 00:00:00 2001 From: x000000 Date: Tue, 7 Apr 2015 02:05:09 +0300 Subject: [PATCH] Added "handleSize" option for fixed size handle --- jquery.trackpad-scroll-emulator.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/jquery.trackpad-scroll-emulator.js b/jquery.trackpad-scroll-emulator.js index a68c21c..dae6ef3 100644 --- a/jquery.trackpad-scroll-emulator.js +++ b/jquery.trackpad-scroll-emulator.js @@ -95,11 +95,19 @@ if (scrollDirection === 'horiz') { eventOffset = e.pageX; } + + var contentSize = sizeAttr === 'height' ? $contentEl.outerHeight() : $contentEl.outerWidth(); + var scrollbarSize = $scrollbarEl[sizeAttr](); + var handleSize = $dragHandleEl[sizeAttr](); var dragPos = eventOffset - $scrollbarEl.offset()[offsetAttr] - dragOffset; + dragPos += dragPos / (scrollbarSize - handleSize) * handleSize; + // Convert the mouse position into a percentage of the scrollbar height/width. - var dragPerc = dragPos / $scrollbarEl[sizeAttr](); + var dragPerc = dragPos / scrollbarSize; + dragPerc = (contentSize * dragPerc - (scrollbarSize * dragPerc)) / contentSize; + // Scroll the content by the same percentage. - var scrollPos = dragPerc * $contentEl[sizeAttr](); + var scrollPos = dragPerc * contentSize; $scrollContentEl[scrollOffsetAttr](scrollPos); } @@ -157,6 +165,11 @@ var handleOffset = Math.round(scrollbarRatio * scrollOffset) + 2; var handleSize = Math.floor(scrollbarRatio * (scrollbarSize - 2)) - 2; + if (options.handleSize) { + handleOffset += handleOffset / (scrollbarSize - handleSize) * (handleSize - options.handleSize); + handleSize = options.handleSize; + } + if (scrollbarSize < contentSize) { if (scrollDirection === 'vert'){ $dragHandleEl.css({'top': handleOffset, 'height': handleSize}); @@ -323,7 +336,8 @@ onInit: function() {}, onDestroy: function() {}, wrapContent: true, - autoHide: true + autoHide: true, + handleSize: undefined }; })(jQuery); \ No newline at end of file