Detecta si el browser ya tiene una function de desplazamiento suave

He agregado un desplazamiento suave a un sitio mío utilizando este fragment de JavaScript onclick en enlaces hash.

$('a[href*=#]') .click(onAnchorClick); function onAnchorClick(event) { return ! scrollTo(this.hash); } function scrollTo(target) { var e = $(target); var y = e.exists() ? e.offset().top : 0; if(y == 0 && target != '#top') return false; if(Math.max($('html').scrollTop(), $('body').scrollTop()) != y) $('html,body') .animate({scrollTop: y}, 500, function() { location.hash = target; } ); else location.hash = target; return true; } $.fn.exists = function() { return this.length > 0 ? this : false; } 

Funciona de maravilla en los browseres de escritorio y parece funcionar bien también en dispositivos iOS. Sin embargo, en mi dispositivo WinPhone 8 era basura. El desplazamiento fue un desastre y ni siquiera terminó donde debería. Así que decidí no habilitarlo allí a través de un if( ! /Windows Phone 8\.0/.test(navigator.userAgent)) .

Ahora funciona bien, y parece que el browser en el WinPhone en realidad tiene un desplazamiento suave por defecto, lo cual es genial.

Pero, por supuesto, es un poco tonto tener activada una secuencia de commands de desplazamiento suave si el browser ya lo hace de forma pnetworkingeterminada. ¿Hay alguna manera de detectar si un browser ya tiene habilitada una característica de desplazamiento suave?

Si y no. Desafortunadamente no hay estándares para este tipo de cosas. Sin embargo, hay alternativas, una de las cuales ya está haciendo: olfateo del browser.

Básicamente, eso es casi tan avanzado como este tipo de detección porque algunos browseres aún no admiten el desplazamiento uniforme oficialmente o sin desarrollos experimentales (como Chromium). Y los estándares no se establecerán a less que la mayoría esté en la misma página. No solo eso, sino que también se networkinguce a las capacidades de hardware de la GPU, ya que algunos dispositivos y computadoras tienen dificultades con el desplazamiento suave y las animaciones. Así que, técnicamente hablando, incluso si un browser admite el desplazamiento suave, quién sabe si el dispositivo o el escritorio que se ejecuta puede procesarse lo suficientemente rápido como para mostrar el efecto. Ese es otro cuello de botella.

Creo que algún día en el futuro habrá más necesidad de especificaciones de características del browser como esta para mejorar las interacciones del usuario, pero hasta ese día lo estás haciendo bien.