Mutlak konuma geçmeye gerek kalmadan çalışan bir yöntem buldum !
Tam yorumlanmamış kod
var scrollPos = $(document).scrollTop();
$(window).scroll(function(){
scrollPos = $(document).scrollTop();
});
var savedScrollPos = scrollPos;
function is_iOS() {
var iDevices = [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
];
while (iDevices.length) {
if (navigator.platform === iDevices.pop()){ return true; }
}
return false;
}
$('input[type=text]').on('touchstart', function(){
if (is_iOS()){
savedScrollPos = scrollPos;
$('body').css({
position: 'relative',
top: -scrollPos
});
$('html').css('overflow','hidden');
}
})
.blur(function(){
if (is_iOS()){
$('body, html').removeAttr('style');
$(document).scrollTop(savedScrollPos);
}
});
Parçalıyorum
Öncelikle HTML'de sayfanın üst kısmına doğru sabit giriş alanına sahip olmanız gerekir (bu sabit bir öğedir, bu nedenle yine de üst tarafa yakın olması anlamsal olarak mantıklı olmalıdır):
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<form class="fixed-element">
<input class="thing-causing-the-issue" type="text" />
</form>
<div class="everything-else">(content)</div>
</body>
</html>
Ardından, mevcut kaydırma konumunu global değişkenlere kaydetmeniz gerekir:
var scrollPos = $(document).scrollTop();
$(window).scroll(function(){
scrollPos = $(document).scrollTop();
});
var savedScrollPos = scrollPos;
Ardından, düzeltmeye ihtiyaç duymayan şeyleri etkilememesi için iOS cihazlarını algılamanın bir yoluna ihtiyacınız var (işlev https://stackoverflow.com/a/9039885/1611058 adresinden alınmıştır )
function is_iOS() {
var iDevices = [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
];
while (iDevices.length) {
if (navigator.platform === iDevices.pop()){ return true; }
}
return false;
}
Artık ihtiyacımız olan her şeye sahip olduğumuza göre, işte düzeltme :)
$('input[type=text]').on('touchstart', function(){
if (is_iOS()){
savedScrollPos = scrollPos;
$('body').css({
position: 'relative',
top: -scrollPos
});
$('html').css('overflow','hidden');
}
})
.blur(function(){
if (is_iOS()){
$('body, html').removeAttr('style');
$(document).scrollTop(savedScrollPos);
}
});