Chúng tôi đang đối mặt với một vấn đề tương tự tại nơi làm việc, và tôi tình cờ gặp câu hỏi này với trang demo (xuất sắc) của bạn.
Như bạn đã đề cập, độ lệch luôn là ~ 50% chiều cao của trang, điều này xảy ra bất kể vị trí ban đầu của bạn là offset.
Trong quá khứ, khi tôi quan sát thấy một "nhảy" tương tự với các phiên bản iOS trước đó (mặc dù, ít nhiều ấn tượng nhảy), tôi đã thường làm việc này bằng cách áp dụng position: fixed
(hoặc relative
) đến body
(this allows overflow: hidden
to properly work).
Tuy nhiên, điều này có hậu quả không giám sát của việc nhảy người dùng trở lại đầu trang, nếu họ đã cuộn xuống.
Vì vậy, nếu bạn đang mở để giải quyết vấn đề này với một số JavaScript
, đây là một sửa chữa/hack Tôi đã ném với nhau:
// Tapping into swal events
onOpen: function() {
var offset = document.body.scrollTop;
document.body.style.top = (offset * -1) + 'px';
document.body.classList.add('modal--opened');
},
onClose: function() {
var offset = parseInt(document.body.style.top, 10);
document.body.classList.remove('modal--opened');
document.body.scrollTop = (offset * -1);
}
Và những gì CSS trông giống như:
.modal--opened {
position: fixed;
left: 0;
right: 0;
}
Đây là một nhánh của trang demo của bạn, để minh họa: https://jpattishall.github.io/sweetalert2/ios-bug.html
Và đối với những người đang tìm kiếm bản sửa lỗi chung hơn, bạn có thể làm điều gì đó giống như sau hen mở/đóng một phương thức:
function toggleModal() {
var offset;
if (document.body.classList.contains('modal--opened')) {
offset = parseInt(document.body.style.top, 10);
document.body.classList.remove('modal--opened');
document.body.scrollTop = (offset * -1);
} else {
offset = document.body.scrollTop;
document.body.style.top = (offset * -1) + 'px';
document.body.classList.add('modal--opened');
}
}
Chỉnh sửa: Một điều cần lưu ý là chúng tôi không áp dụng sửa lỗi cho tất cả thiết bị/nền tảng một cách mù quáng, chỉ cần iOS Safari. Tôi nhận thấy trong câu hỏi khác của bạn rằng bạn không phải là một fan hâm mộ của tràn: ẩn do sự dịch chuyển của trang khi thanh cuộn xuất hiện/biến mất (mà tôi hoàn toàn đồng ý với). Tôi sẽ đề nghị chỉ áp dụng các thiết bị JS cho iOS.
Bạn có các hàm setTimeout hoặc setInterval trong javascript của mình không? – poashoas
Có, chức năng tự động lấy nét đầu vào [hoạt động với 'setTimeout()'] (https://github.com/limonte/sweetalert2/blob/bf1ee4299f3d52256ba049aa830dc16844fa220c/src/sweetalert2.js#L375-L382) vì hoạt ảnh –
Điều này chỉ xảy ra một lần trong iOS Safari và nó không bao giờ xảy ra sau đó. Nhưng trong chrome nó đang xảy ra mọi lúc. – Prav