scrollTop do jQuery se o URL tiver hash

Eu escrevi este plugin simples, que rola suavemente a janela do navegador e adiciona o link de hash ao URL.

$.fn.extend({ scrollWindow: function(options) { var defaults = { duration: "slow", easing : "swing" } var options = $.extend(defaults, options); return this.each(function() { $(this).click(function(e) { var target = $(this).attr('href'); $('html,body').animate({scrollTop: $(target).offset().top}, options.duration, options.easing, function() { location.hash = target; }); e.preventDefault(); }); }); } }); 

Como faço para estender esse plug-in para que ele role automaticamente até a seção da página se ele tiver um hash na URL existente no DOM?

Eu meio que entendo como isso funcionará usando o window.location.hash , embora eu não esteja claro onde é o melhor para adicionar isso dentro do plugin.

Armazene a function em uma variável separada e chame a function se o hash for existente. Eu implementei o seu pedido de tal forma que o location.hash atual seja usado a cada vez $().scrollWindow é invocado. Outras implementações seguem o mesmo princípio.

 $.fn.extend({ scrollWindow: function(options) { var defaults = { duration: "slow", easing : "swing" } var options = $.extend(defaults, options); var goToHash = function(target){ $('html,body').animate({scrollTop: $(target).offset().top}, options.duration, options.easing, function() { location.hash = target; }); }; if(location.hash.length > 1) goToHash(location.hash); return this.each(function() { $(this).click(function(e) { //Remove junk before the hash if the hash exists: var target = $(this).attr('href').replace('^([^#]+)#','#'); goToHash(target); e.preventDefault(); }); }); } });