Estoy tratando de detectar la posición de la barra de desplazamiento del navegador con JavaScript para decidir en qué parte de la página está la vista actual. Supongo que tengo que detectar dónde está el pulgar en la pista y luego la altura del pulgar como un porcentaje de la altura total de la pista. ¿Lo estoy complicando demasiado o JavaScript ofrece una solución más fácil que esa? ¿Alguna idea en cuanto al código?¿Cómo obtener la posición de la barra de desplazamiento con Javascript?
Respuesta
Puede usar element.scrollTop
y element.scrollLeft
para obtener el desplazamiento vertical y horizontal, respectivamente, que se ha desplazado. element
puede ser document.body
si te importa la página completa. Puede compararlo a element.offsetHeight
y element.offsetWidth
(de nuevo, element
puede ser el cuerpo) si necesita porcentajes.
document.getScroll= function(){
if(window.pageYOffset!= undefined){
return [pageXOffset, pageYOffset];
}
else{
var sx, sy, d= document, r= d.documentElement, b= d.body;
sx= r.scrollLeft || b.scrollLeft || 0;
sy= r.scrollTop || b.scrollTop || 0;
return [sx, sy];
}
}
devuelve una matriz con dos integers- [scrollLeft, scrollTop]
mostrando Como usar esta función con un ejemplo hubiera sido genial. – user18490
Supongo que puede usar este lastscroll = getScroll(); window.scrollTo (lastscroll [0], lastscroll [1]); –
Funciona muy bien, pero cambié el retorno a un objeto con las teclas x e y, ya que eso tiene un poco más de sentido para mí. –
Hice esto por un <div>
en Chrome.
elemento.scrollTop - es los píxeles ocultos en la parte superior debido al desplazamiento. Sin desplazamiento de su valor es 0.
elemento.scrollHeight - es los píxeles de todo el div.
elemento de .clientHeight - es los píxeles que se ven en su navegador.
var a = element.scrollTop;
será la posición.
var b = element.scrollHeight - element.clientHeight;
será el valor máximo a scrollTop.
var c = a/b;
será el porcentaje de desplazamiento [de 0 a 1].
Si está utilizando jQuery no es una función perfecta para ti: .scrollTop()
doc aquí ->http://api.jquery.com/scrollTop/
Nota: se puede utilizar esta función para recuperar o establecer la posición.
ver también: http://api.jquery.com/?s=scroll
La pregunta de OP es sobre JS. No jQuery. – user18490
Jquery es también una biblioteca js y está escrita en js –
@RavinderPayal ¿Pero por qué responder una pregunta sobre JS con una biblioteca para JS, cuando es completamente posible e incluso conveniente hacerlo en JS sin formato? Simplemente le pides que agregue tiempo de carga adicional y que use algo de almacenamiento para algo completamente innecesario. Además, ¿desde cuándo javascript start significa JQuery? – DaemonOfTheWest
respuesta para el 2018:
La mejor manera de hacer las cosas de esa manera es utilizar el Intersection Observer API.
API El Intersección Observador proporciona una manera de observar de forma asíncrona cambios en la intersección de un elemento de objetivo con un elemento antepasado o con ventana del documento de nivel superior.
Históricamente, la detección de la visibilidad de un elemento, o la relativa visibilidad de dos elementos en relación el uno al otro, ha sido una tarea difícil para que soluciones han sido poco fiables y propensos a haciendo que el navegador y los sitios que el usuario está accediendo para convertirse en lento. Desafortunadamente, a medida que la web ha madurado, la necesidad de este tipo de información ha crecido. Se necesita información intersección de muchas razones, tales como:
- Lazy-carga de imágenes o de otros contenidos como una página se desplaza.
- La implementación de "desplazamiento" infinita sitios web, donde se carga y se hace mientras se desplaza de manera que el usuario no hace más y más contenido tienen que pasar de página.
- Notificación de la visibilidad de los anuncios con el fin de calcular los ingresos por publicidad.
- decidir si o no para llevar a cabo tareas o procesos de animación en función de si o no el usuario verá el resultado.
implementar la detección de intersección en el caso de los involucrados pasado manipuladores y bucles que llaman métodos como Element.getBoundingClientRect() para acumular la información necesaria para todos los elementos afectados. Como todo este código se ejecuta en el hilo principal, incluso uno de estos puede causar problemas de rendimiento. Cuando un sitio es cargado con estas pruebas, las cosas pueden ponerse muy feas.
Véase el ejemplo de código siguiente:
var options = { root: document.querySelector('#scrollArea'), rootMargin: '0px', threshold: 1.0 } var observer = new IntersectionObserver(callback, options); var target = document.querySelector('#listItem'); observer.observe(target);
A medida que el browser support no es muy grande, se debe utilizar IntersectionObserver polyfill.
- 1. Configurar una posición de la barra de desplazamiento
- 2. ¿Cambiar la posición de la barra de desplazamiento en TextBox?
- 3. Cambio de la posición de la barra de desplazamiento
- 4. PrimeFaces barra de desplazamiento de datos en la posición deseada
- 5. posición extraña de la barra de desplazamiento de iScroll
- 6. Obtener la posición del ratón en desplazamiento
- 7. Cómo obtener la última posición de vista de desplazamiento, scrollview
- 8. js/css: desactivar la barra de desplazamiento, pero mantener la posición de desplazamiento
- 9. cómo mantener la posición de la barra de desplazamiento en la vista de lista de Android?
- 10. CListCtrl: ¿Cómo mantener la posición de desplazamiento?
- 11. ¿Cómo obtener la posición de desplazamiento desde GridView?
- 12. ¿Cómo puedo obtener la posición de desplazamiento actual en UIWebView
- 13. Div con barra de desplazamiento dentro de div con la posición: fijo
- 14. Obtener la posición de desplazamiento de la etiqueta div usando JavaScript
- 15. Cómo hacer un marcador de posición de barra de desplazamiento
- 16. Obtener desplazamiento Posición Porcentaje
- 17. Cómo obtener de forma confiable el ancho de la pantalla CON la barra de desplazamiento
- 18. CSS establecer la posición de desplazamiento predeterminada
- 19. Establecer la posición de desplazamiento
- 20. Cómo recuperar la posición de la barra de desplazamiento del control webbrowser en .NET
- 21. Posición fija - Desplazamiento horizontal
- 22. ¿Cómo sincronizo la posición de desplazamiento de dos divisiones?
- 23. Usar ancho completo excluyendo la barra de desplazamiento de desbordamiento con "posición: absoluta"
- 24. Cómo mostrar siempre la barra de desplazamiento
- 25. Cómo hacer la posición: desplazamiento fijo desplazarse horizontalmente
- 26. Desplazamiento vertical suave de la página con la rueda del mouse y la barra de desplazamiento
- 27. Obtener la posición div (arriba) en javascript?
- 28. Configuración de la posición de la barra de desplazamiento de un ListBox
- 29. Javascript detectar barra de desplazamiento en textarea
- 30. ¿Cómo hacer un menú emergente con la barra de desplazamiento?
¿Qué navegador está usando? Obtener el cuerpo se hace de manera diferente en diferentes navegadores ('element' y' document.body' eran solo ejemplos). Ver http://www.howtocreate.co.uk/tutorials/javascript/browserwindow para más detalles. –
Lo recibí para darme el valor correcto en Firefox 3.6 con 'window.pageYOffset', pero no puedo obtener nada que funcione en IE7. 'Intentado window.pageYOffset',' document.body.scrollTop', 'document.documentElement.scrollTop',' element.scrollTop' – Paul
document.body.scrollLeft es lo que necesitaba :) –