From 12bc949bc1d43427be9b53f92f9307ab6767f45b Mon Sep 17 00:00:00 2001 From: Adrien Grsmto Date: Thu, 22 Aug 2013 19:09:46 +0200 Subject: [PATCH] Trigger native scrolling support for mobile devices --- css/trackpad-scroll-emulator.css | 1 + jquery.trackpad-scroll-emulator.js | 47 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/css/trackpad-scroll-emulator.css b/css/trackpad-scroll-emulator.css index 7fdc16f..47521d2 100644 --- a/css/trackpad-scroll-emulator.css +++ b/css/trackpad-scroll-emulator.css @@ -10,6 +10,7 @@ width: 200px; /* Default value. Overwite this if you want. */ height: 300px; /* Default value. Overwite this if you want. */ overflow: hidden; + -webkit-overflow-scrolling: touch; /* Trigger native scrolling for mobile, if not supported, plugin is used. */ } .tse-scrollable .tse-scroll-content { overflow: hidden; diff --git a/jquery.trackpad-scroll-emulator.js b/jquery.trackpad-scroll-emulator.js index 8a5503c..80ee4c3 100644 --- a/jquery.trackpad-scroll-emulator.js +++ b/jquery.trackpad-scroll-emulator.js @@ -49,6 +49,12 @@ * Initialize plugin */ function init() { + if(hasOverflowScrolling()) { + $el.css('overflow', 'auto'); + + return; + } + if ($el.hasClass('horizontal')){ scrollDirection = 'horiz'; scrollOffsetAttr = 'scrollLeft'; @@ -270,6 +276,47 @@ } } + /** + * Check for mobile Overflow scrolling support + * Source: https://gist.github.com/hay/4032527 + */ + function hasOverflowScrolling() { + var prefixes = ['webkit', 'moz', 'o', 'ms']; + var div = document.createElement('div'); + var body = document.getElementsByTagName('body')[0]; + var hasIt = false; + + body.appendChild(div); + + for (var i = 0; i < prefixes.length; i++) { + var prefix = prefixes[i]; + div.style[prefix + 'OverflowScrolling'] = 'touch'; + } + + // And the non-prefixed property + div.style.overflowScrolling = 'touch'; + + // Now check the properties + var computedStyle = window.getComputedStyle(div); + + // First non-prefixed + hasIt = !!computedStyle.overflowScrolling; + + // Now prefixed... + for (var i = 0; i < prefixes.length; i++) { + var prefix = prefixes[i]; + if (!!computedStyle[prefix + 'OverflowScrolling']) { + hasIt = true; + break; + } + } + + // Cleanup old div elements + div.parentNode.removeChild(div); + + return hasIt; + } + init(); return {