2012-03-18 15 views
17

Últimamente trato de usar jquery con más frecuencia y ahora tengo algún problema que me gustaría resolver con jquery. Espero que puedas ayudarme.jQuery: ¿cómo desplazarse a cierto ancla/div en la carga de la página?

Tengo una página web que incluye alguna etiqueta de anclaje (digamos que el ancla se encuentra en el medio de la página) y en el evento de carga quiero que la página comience en esa ubicación de etiqueta de anclaje determinada que significa que la página "desplazado" automáticamente a un lugar determinado.

Esa fue mi solución anterior (que es bastante feo, ya que añade #i a mi url)

window.onload = window.location.hash = 'i'; 

De todos modos podría u dime cómo puedo hacerlo con jQuery?

aviso: no quiero que el usuario sienta cualquier diapositiva o el efecto, mientras que para llegar a este lugar

+0

por lo que solo desea que el usuario "aparezca" en esa sección, ¿no tiene efectos de diapositiva alguna? – Joseph

+1

si exactamente :) – Popokoko

Respuesta

29

Utilice el siguiente ejemplo sencillo

function scrollToElement(ele) { 
    $(window).scrollTop(ele.offset().top).scrollLeft(ele.offset().left); 
} 

donde ele es su elemento (jQuery) .. por ejemplo: scrollToElement($('#myid'));

+0

¡Funciona perfecto! :) solo por el deporte me gustaría aprender sobre más soluciones de otros aunque estoy satisfecho ahora :) – Popokoko

+0

Funciona perfecto .... ¿Puedes explicar cómo lo haces? –

+0

@Himu es muy simple ... establece el posición de desplazamiento de la parte superior izquierda del elemento que pasa ... – ManseUK

1

Tenga una mirada en this

Agregar el valor # a la dirección es el comportamiento predeterminado que usan los navegadores como IE para identificar las posiciones de ancla nombradas en la página, ya que esto proviene de Netscape.

Puede interceptarlo y eliminarlo, lea el artículo this.

+0

esta es una versión animada ... ¡OP deseaba hacerlo sin animación! – ManseUK

+0

OP podría modificar el código, esto es ejemplos de funcionalidad para ayudarlo en la dirección correcta. – JadedEric

0

sólo tiene que utilizar scrollTo complemento

$("document").ready(function(){ 
    $(window).scrollTo("#div") 
}) 
+0

Agregué el complemento pero todavía dice $ ("ventana"). ScrollTo no es una función – Popokoko

+1

lo siento es $ (ventana) .scrollTo ("# id") o también puede usar $ .scrollTo ("# id ") –

17

no hay necesidad de usar jQuery porque esto es native JavaScript functionality

element.scrollIntoView() 
+0

Esta debería ser la respuesta correcta, el ejemplo de la pregunta no usa jQuery –

+0

@ReshapeMedia Acepto que es la respuesta más simple, pero lea la pregunta -> _De todos modos ¿podría decirme cómo puedo hacerlo con jquery? _ – ManseUK

+0

scrollIntoView no es una función que me haya sucedido. – Abram

12

He intentado algunas horas de hoy y la forma más fácil de detener los navegadores para saltar al ancla en lugar de desplazarse hacia él, está: Usar otro delimitador (una identificación que no usa en el sitio). Entonces, en lugar de vincular a "http: // # YourActualID", se vincula a "http: // # NoIDonYourSite". Poof, los navegadores ya no saltarán.

Luego, simplemente verifique si se ha establecido un anclaje (con la secuencia de comandos proporcionada a continuación, que se extrae del otro hilo). Y configure su identificación real a la que desea desplazarse.

$(document).ready(function(){ 


    $(window).load(function(){ 
    // Remove the # from the hash, as different browsers may or may not include it 
    var hash = location.hash.replace('#',''); 

    if(hash != ''){ 

     // Clear the hash in the URL 
     // location.hash = ''; // delete front "//" if you want to change the address bar 
     $('html, body').animate({ scrollTop: $('#YourIDtoScrollTo').offset().top}, 1000); 

     } 
    }); 
}); 

Ver http://pro.lightningsoul.com/?c=media&sc=article&cat=coding&id=30#content para un ejemplo de trabajo.

+0

Esta solución funcionó como un encanto para mí, pero he: ** a) ** reducido retraso animado de 1000 a 400; ** b) ** Mantuvo el hash intacto en la barra de dirección URL, y ** c) ** cambió '# YourIDtoScrollTo' a' '+ hash +' 'para desplazarse a los hashes dinámicos que mi sitio web ofrece y el usuario navega a ... –

+0

Suena bien. Sugeriría implementar sus cambios para cualquiera que lo necesite. Con la excepción de la demora que es opcional para las necesidades de cada desarrollador. ;) – Lightningsoul

1
/* START --- scroll till anchor */ 
     (function($) { 
      $.fn.goTo = function() { 
        var top_menu_height=$('#div_menu_header').height() + 5 ; 
        //alert ('top_menu_height is:' + top_menu_height); 
        $('html, body').animate({ 
         scrollTop: (-1)*top_menu_height + $(this).offset().top + 'px' 
        }, 500); 
        return this; // for chaining... 
      } 
     })(jQuery); 

     $(document).ready(function(){ 

      var url = document.URL, idx = url.indexOf("#") ; 
      var hash = idx != -1 ? url.substring(idx+1) : ""; 

      $(window).load(function(){ 
      // Remove the # from the hash, as different browsers may or may not include it 
      var anchor_to_scroll_to = location.hash.replace('#',''); 
      if (anchor_to_scroll_to != '') { 
       anchor_to_scroll_to = '#' + anchor_to_scroll_to ; 
       $(anchor_to_scroll_to).goTo(); 
      } 
      }); 
     }); 
    /* STOP --- scroll till anchror */ 
0

Solo añada # [id of div desea desplazarse a] ur ur url. para que esta página url es

http://stackoverflow.com/questions/9757625/jquery-how-to-scroll-to-certain-anchor-div-on-page-load 

así que si quiero para desplazarse a la sección de derechos de autor proceso de carga, entonces la URL debe ser -

http://stackoverflow.com/questions/9757625/jquery-how-to-scroll-to-certain-anchor-div-on-page-load#copyright 
1

lo consigo como esto ..

if(location.pathname == '/registration') 
{ 
$('html, body').animate({ scrollTop: $('#registration').offset().top - 40}, 1000); 
} 
Cuestiones relacionadas