He creado una pequeña aplicación web HTML5 para mi empresa.
Esta aplicación muestra una lista de elementos y todo funciona bien.
La aplicación se utiliza principalmente en teléfonos Android y Chrome como navegador. Además, el sitio se guarda en la pantalla de inicio para que Android administre todo como una aplicación ( supongo que usando un WebView ).
Chrome Beta (y creo que también el WebView del sistema Android) ha introducido una función "desplegable para actualizar" ( consulte este enlace, por ejemplo ).
Esta es una característica útil, pero me preguntaba si se puede desactivar con alguna metaetiqueta (o cosas de JavaScript) porque el usuario puede activar fácilmente la actualización mientras navega por la lista y se vuelve a cargar toda la aplicación.
Además, esta es una característica que la aplicación no necesita.
Sé que esta función todavía está disponible solo en Chrome beta, pero tengo la sensación de que también está aterrizando en la aplicación estable.
¡Gracias!
Editar: he desinstalado Chrome Beta y el enlace anclado a la pantalla de inicio ahora se abre con el Chrome estable. Entonces, los enlaces anclados comienzan con Chrome y no con una vista web.
Editar: hoy (19/03/2015) el menú desplegable para actualizar ha llegado al cromo estable.
Editar: desde la respuesta de @Evyn, sigo este enlace y obtuve este código javascript / jquery que funciona.
Como señaló @bcintegrity, espero una solución de manifiesto del sitio (y / o una metaetiqueta) en el futuro.
Además, las sugerencias para el código anterior son bienvenidas.
fuente
Respuestas:
La acción predeterminada del efecto pull-to-refresh se puede prevenir de manera efectiva haciendo lo siguiente:
preventDefault
'parte de la secuencia táctil, incluyendo cualquiera de los siguientes (en orden de más disruptivo a menos disruptivo):touch-action: none
" a elementos táctiles, donde sea apropiado, deshabilitando las acciones predeterminadas (incluyendo pull-to-refresh) de la secuencia táctil.overflow-y: hidden
" al elemento del cuerpo, usando un div para contenido desplazable si es necesario.chrome://flags/#disable-pull-to-refresh-effect
).Ver más
fuente
Solución simple para 2019+
Chrome 63 ha agregado una propiedad css para ayudar exactamente con esto. Lea esta guía de Google para tener una buena idea de cómo puede manejarla.
Aquí está su TL: DR
Para que funcione, todo lo que tiene que agregar es esto en su CSS:
Por ahora, solo es compatible con Chrome, Edge y Firefox, pero estoy seguro de que Safari lo agregará pronto, ya que parecen estar totalmente integrados con los trabajadores de servicios y el futuro de las PWA.
fuente
Por el momento, solo puede deshabilitar esta función a través de chrome: // flags / # disable-pull-to-refresh-effect - abrir directamente desde su dispositivo.
Podría intentar atrapar
touchmove
eventos, pero las posibilidades son muy escasas para lograr un resultado aceptable.fuente
Uso MooTools y he creado una Clase para deshabilitar la actualización en un elemento objetivo, pero el quid de la cuestión es (JS nativo):
Todo lo que hacemos aquí es encontrar la dirección y del movimiento táctil, y si nos estamos moviendo hacia abajo en la pantalla y el desplazamiento de destino es 0, detenemos el evento. Por lo tanto, no hay actualización.
Esto significa que estamos disparando en cada 'movimiento', que puede ser costoso, pero es la mejor solución que he encontrado hasta ahora ...
fuente
scrolltop > 0
, el evento no se activará. En mi implementación, enlazo eltouchmove
eventotouchstart
, solo siscrollTop <= 0
. Lo desvinculamos tan pronto como el usuario se desplaza hacia abajo (initialY >= e.touches[0].clientY
). Si el usuario se desplaza hacia arriba (previousY < e.touches[0].clientY
), entonces llamopreventDefault
.Después de muchas horas de intentarlo, esta solución me funciona.
fuente
html{touch-action:pan-down}
AngularJS
Lo he desactivado con éxito con esta directiva AngularJS:
Es seguro dejar de verlo tan pronto como el usuario se desplace hacia abajo, ya que la acción de actualizar no tiene posibilidades de activarse.
Del mismo modo, si
scrolltop > 0
, el evento no se activará. En mi implementación, asocio el evento touchmove en touchstart, solo siscrollTop <= 0
. Lo desvinculamos tan pronto como el usuario se desplaza hacia abajo (initialY >= e.touches[0].clientY
). Si el usuario se desplaza hacia arriba (previousY < e.touches[0].clientY
), entonces llamopreventDefault()
.Esto nos salva de ver eventos de desplazamiento innecesariamente, pero bloquea el desplazamiento excesivo.
jQuery
Si está utilizando jQuery, este es el equivalente no probado .
element
es un elemento jQuery:Naturalmente, lo mismo también se puede lograr con JS puro.
fuente
e.originalEvent.touches[0].clientY
para hacer que esto funcione. Todavía luchando con la lógica cuando para evitar la recarga. En este momento parece evitar aleatoriamente el desplazamiento hacia arriba ... ¡Da las gracias por la pista en la dirección correcta!Javascript simple
Lo implementé usando javascript estándar. Simple y fácil de implementar. Solo pegue y funciona bien.
fuente
body: {overflow-y:hidden}
truco de Evyn arriba .La mejor solución en CSS puro:
Vea esta demostración: https://jsbin.com/pokusideha/quiet
fuente
Puedes probar esto
ejemplo:
https://ebidel.github.io/demos/chatbox.html
documento completo https://developers.google.com/web/updates/2017/11/overscroll-behavior
fuente
Encuentro configurar tu cuerpo CSS overflow-y: hidden es la forma más simple. Si desea tener una página de aplicación de desplazamiento, puede usar un contenedor div con funciones de desplazamiento.
fuente
Tenga en cuenta que overflow-y no se hereda, por lo que debe configurarlo en TODOS los elementos de bloque.
Puede hacer esto con jQuery simplemente por:
fuente
Desde hace un par de semanas descubrí que la función de JavaScript que usé para deshabilitar la acción de actualización de Chrome ya no funcionará. He hecho esto para resolverlo:
fuente
Solución js pura.
fuente
Lo que hice fue poner a los siguientes
touchstart
ytouchend
/touchcancel
eventos:Dado que Chrome no se desplaza si no está en la posición scrollY,
0
esto evitará que Chrome haga pull para actualizar.Si todavía no funciona, intente hacerlo también cuando se cargue la página.
fuente
Resolví el problema del menú desplegable para actualizar con esto:
fuente