En el teléfono móvil, detecte cuándo el usuario se desplaza "pasado" en la parte superior de la pantalla

Imagine una página web para móviles con una barra de navegación en la parte superior de la página.

Uso de javascript / jQuery Me gustaría ser capaz de detectar cuando un usuario se desplaza "pasado" en la parte superior de la pantalla.

Déjame intentar explicar: Imagina que la página web acaba de cargar y ves la barra de navegación en la parte superior de la pantalla. Ahora, usted pone su dedo en la pantalla y arrastrar hacia abajo . En un iPhone, se verá algo como:

Introduzca aquí la descripción de la imagen

Estoy buscando algo similar a lo siguiente:

$(document).ready(function () { $(window).scroll(function (event) { var y = $(this).scrollTop(); if(y < -20)) { //do something } 

Desafortunadamente, esto no funcionará en los teléfonos Android porque no tienen el mismo comportamiento elástico que los iPhones:

Las malas noticias

Por lo tanto, vamos a empezar con las malas noticias: no hay manera de obtener la información que desea para nativa. ¿Por qué? Porque una vez que entras en la zona 'elástica' estás arrastrando todo el componente webview hacia abajo en lugar de sólo el contenido del documento como en tu pseudo código.

¿Qué significa esto prácticamente? Emulación o embalaje nativo

Emulación, las opciones

Así que tendrá que ejecutar su propia solución y tendrá que hacer un par de opciones. En primer lugar, si desea utilizar desplazamiento elástico debe tener en cuenta que esto está patentado por Apple Inc. en la patente US7469381 B2 . Por favor, revise cuidadosamente esta patente para asegurarse de que no infringirá (incluso si está creando una aplicación para iOS solo, esto no cambia nada).

En segundo lugar, la pregunta es si realmente quieres emular una experiencia nativa. Hay un gran vestíbulo contra la emulación de la experiencia nativa debido a 1) a creer que nunca puede ser lo suficientemente perfecto y 2) como los sistemas operativos y el navegador cambiar su código se mantendrá fuera de fecha y, por tanto, aspecto terrible / Causan un comportamiento / combinaciones totalmente inesperado.

En segundo lugar usted tendrá que decidir si desea para el mismo comportamiento elástico en android o si desea dar una más nativa como experice en android. Personalmente, creo que hace que para algunos UX excelente, por lo que no explicitamente desventajas de utilizar un efecto elástico, sin embargo, es algo que debe considerar con cuidado.

Emulación, los scripts

La mayoría de los scripts que proporcionan una emulación similar a lo que se desea son "pull to refresh" scripts. Dependiendo de tus deseos específicos, debes simplemente usar uno de esos scripts y modificarlos o usar algunos CSS para ocultar el mensaje dentro de ellos.

  • Hook.jsEmulación no perfecta de la experiencia nativa y utiliza el antiguo fondo de iOS, pero una opción bastante buena, sin embargo, para ocultar el spinner sólo uso

     .hook-spinner{ display:none; } 
  • IScroll.jsCódigo muy desarrollado y se comporta de manera excelente. La desventaja es que proporciona mucho más de lo que usted está buscando que puede ser una buena cosa o una mala cosa. Puede encontrar una implementación de ejemplo de pull para actualizar el comportamiento aquí , pero tenga en cuenta que es para una versión anterior de iScroll, en la última versión el ejemplo parece no haber sido implementado, pero debe ser bastante similar. Basta con mirar el código para ver cómo quitar el tirón para actualizar el mensaje.

  • JQuery scrollz – Sólo una opción más. Parece ser comparable a hook.js , pero tiene algunos iScroll como características también. Puede "eliminar" el mensaje especificando el pullHeaderHTML con cadenas HTML vacías.

Envoltura nativa

La alternativa, que estoy convencido de que no quieres hacer, pero sí quiero añadir para completar, es distribuir tu aplicación como una aplicación nativa, por ejemplo, en un teléfono. Sin embargo para conseguir este funcionamiento requeriría un número justo de cambios al código del phonegap sí mismo y no sería un acercamiento aconsejable (he desarrollado una vez una aplicación del phonegap usando los componentes nativos y las interacciones alrededor de él que acciona varios acontecimientos del javascript, aunque doable y que presenta Ciertas ventajas no es algo que yo aconsejaría).

Así que .. No estoy seguro de lo que usted necesita esto.

Si es para un ListView – puede anular onOverScrolled

Si necesitas esto para ScrollView, hay una forma de extenderlo también. No lo recuerdo ahora, pero si lo necesitas, lo puedo encontrar.

Si es para un WebView dentro de su aplicación – Estoy bastante seguro de que no es posible. La cantidad de control que tiene en la forma en que se procesan y manipulan las páginas web es limitada.

Si desea que el navegador Chrome / stock actúe de la misma manera que en iOS, no creo que sea posible a menos que obtenga el código del navegador y lo cambie usted mismo.

  • Cómo guardar credenciales en Android / jQuery Mobile App
  • ¿Podemos invocar la funcionalidad de compartir nativo del teléfono inteligente con jquery?
  • PhoneGap: Cómo hacer que los enlaces de iframes se abran en InAppBrowser
  • Cordova plugin de diagnóstico switchToLocationSettings ()
  • Agregar css personalizado al código html con jsoup
  • Phonegap: ¿Es posible reproducir varios videos simultáneamente en la misma página usando etiqueta de vídeo html5?
  • Mover el archivo de video capturado por la cámara usando cordova (phonegap) no es refrescante galería thumbnail
  • JQuery en iPhone / Android / BlackBerry
  • jquery mobile events en android contra iphone
  • Cordova / Phonegap Todas las Solicitudes de Ajax Externas Devuelve 404
  • Draggable jQuery en phonegap android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.