ฉันพบวิธีการที่ใช้ได้ผลโดยไม่จำเป็นต้องเปลี่ยนตำแหน่งเด็ดขาด!
รหัสที่ไม่มีการใส่ความคิดเห็นแบบเต็ม
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);
}
});
ทำลายมันลง
ก่อนอื่นคุณต้องมีช่องป้อนข้อมูลคงที่ที่ด้านบนของหน้าใน HTML (เป็นองค์ประกอบคงที่ดังนั้นจึงควรมีความหมายที่จะให้อยู่ใกล้ด้านบนสุด):
<!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>
จากนั้นคุณต้องบันทึกตำแหน่งเลื่อนปัจจุบันเป็นตัวแปรส่วนกลาง:
var scrollPos = $(document).scrollTop();
$(window).scroll(function(){
scrollPos = $(document).scrollTop();
});
var savedScrollPos = scrollPos;
จากนั้นคุณต้องการวิธีตรวจจับอุปกรณ์ iOS เพื่อไม่ให้ส่งผลกระทบต่อสิ่งที่ไม่ต้องการการแก้ไข (ฟังก์ชั่นนำมาจากhttps://stackoverflow.com/a/9039885/1611058 )
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);
}
});