Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Scroll up a div en lugar de a body

Estas en el tema de Scroll up a div en lugar de a body en el foro de Javascript en Foros del Web. Hola. Tengo este script para un scroll up que funciona perfectamente. Código: <script type="text/javascript"> document.getElementById('scroll-to-top').onclick = function () { scrollTo(document.body, 0, 100); } function scrollTo(element, ...
  #1 (permalink)  
Antiguo 28/01/2016, 04:03
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Scroll up a div en lugar de a body

Hola.

Tengo este script para un scroll up que funciona perfectamente.

Código:
 <script type="text/javascript">
document.getElementById('scroll-to-top').onclick = function () {
    scrollTo(document.body, 0, 100);
}

    function scrollTo(element, to, duration) {
        if (duration < 0) return;
        var difference = to - element.scrollTop;
        var perTick = difference / duration * 2;

    setTimeout(function() {
        element.scrollTop = element.scrollTop + perTick;
        scrollTo(element, to, duration - 2);
    }, 10);
}
</script>
No quiero utilizar Jquery.

El problema es que quiero sustituir la dirección al body de la página por una localización dentro de la misma, ya sea un div o un ancla.

Es decir, cambiar

Código:
    scrollTo(document.body, 0, 100);
¿Me podéis orientar?

Gracias.
  #2 (permalink)  
Antiguo 28/01/2016, 13:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Scroll up a div en lugar de a body

Si entendí bien, quieres que la barra se desplace hasta la posición de un determinado elemento. Si es así, solo necesitas utilizar la propiedad offsetTop.

Código Javascript:
Ver original
  1. var scroll = function(elemento){
  2.     window.scrollTo(0, elemento.offsetTop);
  3. };
  4.  
  5. scroll(document.querySelector("#foo")); //Se desplazará hasta el elemento de id "foo"
  6. scroll(document.querySelector("#bar")); //Se desplazará hasta el elemento de id "bar"

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/01/2016, 16:23
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Scroll up a div en lugar de a body

Hola Alexis88.

Y gracias por responder.

Te diré que no conozco esa propiedad, y por supuesto, así no me funciona:

Código:
 <script type="text/javascript">
var scroll = function(elemento){
    window.scrollTo(0, elemento.offsetTop);
};
 
scroll(document.querySelector("#foo")); //Se desplazará hasta el elemento de id "foo"
scroll(document.querySelector("#bar")); //Se desplazará hasta el elemento de id "bar"

    setTimeout(function() {
        elemento.offsetTop = elemento.offsetTop + perTick;
        scrollTo(elemento, to, duration - 2);
    }, 10);
}
</script>

Última edición por JUMASOL; 28/01/2016 a las 16:28
  #4 (permalink)  
Antiguo 28/01/2016, 19:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Scroll up a div en lugar de a body

Obviamente no funciona porque solo te limitaste a copiar y pegar el código y no lo adaptaste a lo que necesitas.

La idea es que el desplazamiento se realice hasta la ubicación del elemento, que, utilizando la propiedad en mención, será el borde superior del mismo.

Un ejemplo:
Código HTML:
Ver original
  1. <button class="scroll" data-id="#foo">Ir a Foo</button>
  2. <button class="scroll" data-id="#bar">Ir a Bar</button>
  3. <button class="scroll" data-id="#bin">Ir a Bin</button>
  4. <button class="scroll" data-id="#baz">Ir a Baz</button>
  5.    
  6. <p id="foo">Contenido</p>
  7. <p id="bar">Contenido</p>
  8. <p id="bin">Contenido</p>
  9. <p id="baz">Contenido</p>

Código Javascript:
Ver original
  1. document.addEventListener("click", function(event){
  2.     if (event.target.className == "scroll"){
  3.         window.scrollTo(0, document.querySelector(event.target.dataset.id).offsetTop);
  4.     }
  5. }, false);

Hay cuatro botones con la misma clase y pseudoatributos cuyos valores son los identificadores de los cuatro párrafos que se encuentran debajo de ellos. Cuando se produzca el evento click en el documento, tomamos al elemento directamente afectado por el evento y comprobamos que su clase sea la misma que asignamos a los botones; de ser así, desplazamos la barra vertical hasta la posición del elemento en cuestión.

DEMO

Es básicamente el mismo resultado que conseguirías utilizando enlaces y anclas.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 29/01/2016, 01:43
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Scroll up a div en lugar de a body

Sí, funciona, pero no tiene transición.
  #6 (permalink)  
Antiguo 29/01/2016, 08:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Scroll up a div en lugar de a body

Para que tenga un efecto de desplazamiento suave, puedes ejecutar el mismo en intervalos en los que el desplazamiento se realice en espacios cortos y, al final de cada uno, verificarías que la cantidad desplazada sea mayor o igual al límite que es la ubicación del elemento; de ser así, terminarías el intervalo de repeticiones, para lo cual te bastaría con utilizar un temporizador cíclico.

Un ejemplo:
Código Javascript:
Ver original
  1. var intervalo = setInterval(function(){
  2.     window.scrollTo(0, window.scrollY + 5);
  3.     if (window.scrollY >= elemento.offsetTop) clearInterval(intervalo);
  4. }, 10);

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: body, funcion, lugar, scroll
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.