Probado en Safari y Chrome: el mismo resultado, así que creo que es un problema de iOS.
Esto sucede solo si hay una entrada dentro del modal y toco esa entrada. En el mismo momento, esa entrada se enfoca y el teclado nativo de iOS se vuelve visible.
La página debajo del modal en el mismo momento se desplaza automáticamente al 50% de su altura. Este comportamiento es totalmente indeseado y no tengo ni idea de cómo evitar esta "función" predeterminada de iOS.
Manifestación:
ACTUALIZACIÓN : la corrección de confirmación: limonte / sweetalert2 / commit / 4a2d36b
Nos enfrentamos a un problema similar en el trabajo y me topé con esta pregunta con su (excelente) página de demostración.
Como mencionaste, el desplazamiento es siempre ~ 50% de la altura de la página, lo que ocurre independientemente de dónde esté tu desplazamiento inicial.
En el pasado, cuando observé un "salto" similar con versiones anteriores de iOS (aunque, un salto mucho menos dramático), por lo general he solucionado esto aplicando position: fixed
(o relative
) al body
( esto permite overflow: hidden
que funcione correctamente ).
Sin embargo, esto tiene la consecuencia desatendida de hacer que el usuario vuelva a la parte superior de la página, si se ha desplazado hacia abajo.
Entonces, si está abierto a abordar este problema con alguien JavaScript
, aquí hay una solución / truco que he preparado:
// 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);
}
Y cómo se ve el CSS:
.modal--opened {
position: fixed;
left: 0;
right: 0;
}
Aquí hay una bifurcación de su página de demostración, para ilustrar: https://jpattishall.github.io/sweetalert2/ios-bug.html
Y para aquellos que buscan una solución más general, puede hacer algo como lo siguiente al abrir / cerrar un modal:
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');
}
}
Editar: una cosa a tener en cuenta es que no aplicamos la solución a todos los dispositivos / plataformas a ciegas, solo iOS Safari. Noté en su otra pregunta que no era fanático del desbordamiento: oculto debido al cambio de página cuando la barra de desplazamiento aparece / desaparece (con lo que estoy totalmente de acuerdo). Sugeriría simplemente aplicar el JS solo a dispositivos iOS.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras