Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rikaschmitt

Efeito scroll com problema no Firefox

Recommended Posts

Bom dia galera.

 

Estou utilizando um jquery simples que faz a página correr suavemente quando clicado em uma #âncora.

O problema é que no Firefox, o efeito trava.

 

Código jQuery:

//Efeito scrolldown
SC('a[href^="#"]').on('click',function (e) {
e.preventDefault();


var target = this.hash,
SCtarget = SC(target),
        alturadomenu = SC('.menu').height(),
        alturaefeito = (SCtarget.offset().top - alturadomenu);


SC('html, body').stop().animate({
'scrollTop': alturaefeito
}, 900, 'swing', function () {
window.location.hash = target;
});
});

Eu identifiquei o problema, é na parte "(SCtarget.offset().top - alturadomenu);", pois, se eu tirar essa alturadomenu, o efeito fica de boa. Provavelmente no FireFox, ele faz o efeito até o .top do elemento e trava quando vai fazer o alturadomenu.

 

O que posso fazer para corrigir?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

alturadomenu é um valor fixo ?

 

Então não recalcule ele toda vez.

Faça o mesmo para tudo o que vc puder cachear e otimizar assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alturadomenu é um valor fixo ?

 

Então não recalcule ele toda vez.

Faça o mesmo para tudo o que você puder cachear e otimizar assim.

 

Não, a altura varia de acordo com a resolução e tals..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá.. mas ela muda a cada click da tag <a> ?

 

Entendeu o ponto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um pouco otimizado, ficaria assim:

 

var $htmlBody = SC('html, body'),
    alturadomenu = SC('.menu').height();

SC('a[href^="#"]').on('click',function (e) {
    e.preventDefault();
    var target = this.hash,
        SCtarget = SC(target),
        alturaefeito = (SCtarget.offset().top - alturadomenu);


    $htmlBody.stop().animate({'scrollTop': alturaefeito}, 900, 'swing', function () {
        location.hash = target;
    });
});
E quanto a esse SC ai, dê uma olhada nisso:

http://wbruno.com.br/jquery/noconflict-jquery-usando-2-bibliotecas-javascript-alias/

 

Sério, é muito feio esse SC, tem formas melhores e mais bonitas de resolver.. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, agora tem bastante coisa com SC, então já estou acostumado com isso.

^_^

 

Mas, mesmo assim, ainda continua travado no Firefox.

Ele deslisa a tela normalmente até o ponto que precisa e "trava", ou melhor dizendo, ele dá um pulinha pra posição da âncora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra coisa q dá para tentar fazer, é pre-fazer as contas.

Ai vc atribui num atributo data-*, evitando pegar o offset também a cada click.

 

Não creio que vá melhorar muito infelizmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buenas tchê.

 

Dá uma olhada aqui (http://codepen.io/marlonlp/full/AEmpg/) veja se esse código não te ajuda.

Testei no Firefox e foi de boa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto, achei o erro fuçando hahaha.

 

No Firefox, ele fazia o scroll até o valor determinado, mas como no final do código tinha:

 

, function(){

window.location.hash = target;
}
ele acabava voltando pra posição -inicial-.
Tirei essa parte e deu \o\

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.