Created
August 1, 2012 22:49
-
-
Save dtao/3231384 to your computer and use it in GitHub Desktop.
Function to automatically zoom in any website to fill available screen width
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
function expand($) { | |
function text($element) { | |
return $.trim($element.clone().children().remove().end().text()); | |
} | |
function isFixedOrFloating($element) { | |
try { | |
if ($element.css("position") === "fixed") { | |
return true; | |
} | |
var float = $element.css("float"); | |
if (float === "left" || float === "right") { | |
return true; | |
} | |
var $parent = $element.parent(); | |
if ($parent.length) { | |
return isFixedOrFloating($parent); | |
} | |
} catch (e) { | |
return false; | |
} | |
return false; | |
} | |
function hasContent($element) { | |
// Ignore elements that are deliberately positioned off-screen. | |
var offset = $element.offset(); | |
if (offset.left < 0 || offset.left > $(document).width()) { | |
return false; | |
} | |
// Ignore elements that float or are fixed to a set position on the screen | |
// as these will remain in view after zooming. | |
if (isFixedOrFloating($element)) { | |
return false; | |
} | |
return $element.is(":visible") && text($element).length > 0; | |
} | |
function getExtremeEdges($elements) { | |
var extremeLeft = null; | |
var extremeRight = null; | |
$.each($elements, function(i, el) { | |
var $element = $(el); | |
var offset = $element.offset(); | |
var left = offset.left; | |
var right = offset.left + $element.width(); | |
if (!extremeLeft || left < extremeLeft) { | |
extremeLeft = left; | |
} | |
if (!extremeRight || right > extremeRight) { | |
extremeRight = right; | |
} | |
}); | |
return [extremeLeft, extremeRight]; | |
} | |
var $elementsWithContent = $("*").filter(function(i) { | |
return hasContent($(this)); | |
}); | |
var extremeEdges = getExtremeEdges($elementsWithContent); | |
var width = extremeEdges[1] - extremeEdges[0]; | |
var desiredWidth = $(document).width() * 0.95; | |
if (width < desiredWidth) { | |
$("body").css("zoom", desiredWidth / width); | |
} | |
} | |
function waitToExpand() { | |
setTimeout(function() { | |
if (typeof window.jQuery === "undefined") { | |
waitToExpand(); | |
} else { | |
expand(window.jQuery); | |
} | |
}, 100); | |
} | |
// Dynamically inject jQuery into the page if it's not already present. | |
if (typeof window.jQuery === "undefined") { | |
var script = document.createElement("script"); | |
script.type = "text/javascript"; | |
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"; | |
document.body.appendChild(script); | |
waitToExpand(); | |
} else { | |
expand(window.jQuery); | |
} | |
}()); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(){function a(a){function b(b){return a.trim(b.clone().children().remove().end().text())}function c(a){try{if(a.css("position")==="fixed"){return true}var b=a.css("float");if(b==="left"||b==="right"){return true}var d=a.parent();if(d.length){return c(d)}}catch(e){return false}return false}function d(d){var e=d.offset();if(e.left<0||e.left>a(document).width()){return false}if(c(d)){return false}return d.is(":visible")&&b(d).length>0}function e(b){var c=null;var d=null;a.each(b,function(b,e){var f=a(e);var g=f.offset();var h=g.left;var i=g.left+f.width();if(!c||h<c){c=h}if(!d||i>d){d=i}});return[c,d]}var f=a("*").filter(function(b){return d(a(this))});var g=e(f);var h=g[1]-g[0];var i=a(document).width()*.95;if(h<i){a("body").css("zoom",i/h)}}function b(){setTimeout(function(){if(typeof window.jQuery==="undefined"){b()}else{a(window.jQuery)}},100)}if(typeof window.jQuery==="undefined"){var c=document.createElement("script");c.type="text/javascript";c.src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";document.body.appendChild(c);b()}else{a(window.jQuery)}})() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment