From 2d925f8fa09f6f879b7f5e5d451bd0d113e6638d Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Fri, 15 Aug 2014 12:29:17 -0400 Subject: [PATCH] Always use CSS transitions when available This makes a huge difference in perceptual animation quality from ~10-20 FPS on a 1.7Ghz Core i7 to 60FPS in Chrome, Safari, Firefox, IE11. --- source/js/Core/Core/VMM.Browser.js | 34 ++++++++++++++++++++++++++---- source/js/Core/Core/VMM.Library.js | 10 ++++----- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/source/js/Core/Core/VMM.Browser.js b/source/js/Core/Core/VMM.Browser.js index d26940a..a04aaf0 100644 --- a/source/js/Core/Core/VMM.Browser.js +++ b/source/js/Core/Core/VMM.Browser.js @@ -12,12 +12,17 @@ if(typeof VMM != 'undefined' && typeof VMM.Browser == 'undefined') { this.OS = this.searchString(this.dataOS) || "an unknown OS"; this.device = this.searchDevice(navigator.userAgent); this.orientation = this.searchOrientation(window.orientation); + this.features = { + css: { + transitions: this.cssTransitionSupport() + } + }; }, searchOrientation: function(orientation) { var orient = ""; - if ( orientation == 0 || orientation == 180) { + if ( orientation == 0 || orientation == 180) { orient = "portrait"; - } else if ( orientation == 90 || orientation == -90) { + } else if ( orientation == 90 || orientation == -90) { orient = "landscape"; } else { orient = "normal"; @@ -155,8 +160,29 @@ if(typeof VMM != 'undefined' && typeof VMM.Browser == 'undefined') { subString: "Linux", identity: "Linux" } - ] + ], + cssTransitionSupport: function () { + // See https://gist.github.com/jackfuchs/556448 + var b = document.body || document.documentElement, + s = b.style, + p = 'transition'; + + if (typeof s[p] == 'string') { + return true; + } + + // Tests for vendor specific prop + var v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms']; + p = p.charAt(0).toUpperCase() + p.substr(1); + + for (var i=0; i