Many posts on this, but not quite for my situation. My page has flexible dimensions set to 100% width and 100% height, so the typical on-load scroll function isn't working. Any thoughts or other solutions?
Thanks!
CSS:
* {
margin:0;
padding:0;
}
html, body {
width:100%;
height:100%;
min-width:960px;
overflow:hidden;
}
Javascript:
/mobile/i.test(navigator.userAgent) && !pageYOffset && !location.hash && setTimeout(function () {
window.scrollTo(0, 1);
}, 1000);
This solution from Nate Smith helped me: How to Hide the Address Bar in a Full Screen Iphone or Android Web App.
Here's the essential bit:
var page = document.getElementById('page'),
ua = navigator.userAgent,
iphone = ~ua.indexOf('iPhone') || ~ua.indexOf('iPod');
var setupScroll = window.onload = function() {
// Start out by adding the height of the location bar to the width, so that
// we can scroll past it
if (ios) {
// iOS reliably returns the innerWindow size for documentElement.clientHeight
// but window.innerHeight is sometimes the wrong value after rotating
// the orientation
var height = document.documentElement.clientHeight;
// Only add extra padding to the height on iphone / ipod, since the ipad
// browser doesn't scroll off the location bar.
if (iphone && !fullscreen) height += 60;
page.style.height = height + 'px';
}
// Scroll after a timeout, since iOS will scroll to the top of the page
// after it fires the onload event
setTimeout(scrollTo, 0, 0, 1);
};
For more details, check out his blog post or the Gist.
I struggled with this too. Initially I tried a CSS class (.stretch) defining 200% height and overflow visible, then toggling this on the HTML via script before and after the scrollTo. This doesn't work because the computed 100% height refers back to the available viewport dimensions minus all browser chrome (snapping the status bar back into place).
Eventually I had to request specific styles to apply dynamically via the DOM API. To add to your additional snippet:
var CSS = document.documentElement.style;
/mobile/i.test(navigator.userAgent) && !pageYOffset && !location.hash && setTimeout(function () {
CSS.height = '200%';
CSS.overflow = 'visible';
window.scrollTo(0, 1);
CSS.height = window.innerHeight + 'px';
CSS.overflow = 'hidden';
}, 1000);
However I'd recommend extending Scott Jehl's method, which addresses minor Android/iOS Safari scrollTo differences:
https://gist.github.com/scottjehl/1183357
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With