¿Una navigation pegajosa less pésima en iOS?

Mi objective es bastante sencillo y no demasiado sofisticado: quiero que una barra de navigation secundaria se establezca en una position fija en la parte superior de la pantalla cuando el usuario se desplaza hacia abajo en la página.

Mi script es simple también:

var stickySubnavTop = $('#subnav').offset().top; var stickySubnav = function(){ var scrollTop = $(window).scrollTop(); if (scrollTop > stickySubnavTop-28) { $('#subnav').addClass('sticky'); } else { $('#subnav').removeClass('sticky'); } }; stickySubnav(); $(window).scroll(function() { stickySubnav(); }); 

Funciona como un encanto en todos los browseres de escritorio, no tanto en iOS. Ahora, aquí está la cosa: estoy completamente consciente de que iOS congela el DOM al desplazarse . Sin embargo, me gustaría saber si hay alguna forma de hacer que el efecto sea less abrupto.

Al search una respuesta, me encontré con unos pocos events táctiles con los que no estaba familiarizado. El evento de escucha de touchmove en particular me llamó la atención, y pensé que podía tratar de que mi script funcionara con él:

 $(document).on('touchmove', function() { stickySubnav; }); 

Lo que esto hace es ejecutar el script cuando el usuario se desplaza mientras mantiene el dedo en la pantalla . No funciona cuando inician el desplazamiento con inercia, pero aún así es suficiente para hacer que el efecto sea más suave, ya que el contenido de la página hace que el usuario tenga less probabilidades de desplazarse rápidamente.

El problema es: ejecutar ese script de esta manera hace que el desplazamiento sea un poco entrecortado en los teléfonos más antiguos. Descubrí que los procesadores de class A5 pueden manejarlo bien, pero cualquier cosa less potente no sería capaz de manejarlo, a la vez que mantiene una experiencia de desplazamiento perfectamente fluida.

Mi pregunta es: ¿hay alguna manera de que pueda decir que ese script solo se ejecute una vez cada X milisegundos, o cualquier otra forma de hacer que la experiencia sea less frustrante?

Gracias

En iOS 6+, testing la position de pegado de CSS3:

 /* * same as position:relative as long as the element is more than 28px * from the top of the viewport. Then, it is the same as position: fixed */ #subnav { position: -webkit-sticky; position: sticky /* future compatibility */ top: 28px; /* viewport top threshold */ } 

No debería esta línea:

position: sticky /* future compatibility */

¿Tiene un punto y coma?

position: sticky; /* future compatibility */