Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Como funciona o menu lateral do Alura?

Estou tentando fazer um menu com o mesmo comportamento do menu lateral da Alura que funciona que nem o do Worpress. A rolagem do menu é travado ao chegar no final, não bloqueando a rolagem do conteúdo principal da direita.

Como faz isso?

Achei esse script no js do Alura que parece ser responsável por isso:

var sticky = function() {
  function a() {
     f = d.getBoundingClientRect().height, g = window.innerHeight, h = e.getBoundingClientRect().height
  }
   function b() {
      var a = window.scrollY || window.pageYOffset;
      if (!(i == a || a < 0)) {
          if (!(a > document.documentElement.offsetHeight - g)) {
             var b = Math.max(Math.min(j + a - i, f - g), 0);
             isNaN(b) || (b != j && (d.style.transform = "translateY(" + -b + "px)", j = b), i = a)
          }
      }
    }
   function c() {
       f > h || window.innerWidth <= 691 ? d.style.position = "absolute" : (d.style.position = "fixed", b()), requestAnimationFrame(c)
   }
   var d = document.querySelector(".task-menu"),
      e = document.querySelector(".task-body");
   if (!(("scrollY" in window || "pageYOffset" in window) && "requestAnimationFrame" in window)) return void(d.style.position = "absolute");
   var f, g, h;
   window.addEventListener("resize", a), setTimeout(a, 0), setTimeout(a, 200);
   var i = window.scrollY || window.pageYOffset, j = 0;
   return requestAnimationFrame(c), {
      recalc: a
   }
 }();

Mas não consegui entender.

6 respostas

Oi Kelvym, td bem?

Puts, o problema do código que vc pegou é que ele está minificado, repara nos nomes das variáveis, fica difícil entender.

A ideia é que o scroll tanto da página quanto do menu lateral são o mesmo, então quando a gente scrolla os dois se movem, mas como o menu é menor que a pagina toda ele chega em um ponto em que ele para, só isso (:

Abraço!

Eae Yuri, blz? Então, o menu do Alura/Wordpress utilizam o transform-translate do css pra movimentar independente do scroll da página. Vai adicionando translate na div até que chegue no final e ele para. Isso fica mais visível quando o conteúdo da aula(da direta) é maior que o menu. Mas não consegui fazer isso e nem achei algo do tipo na internet =.

Oi Kelvym, tudo bem?

Esse código que vc postou é bastante específico pra estrutura que a gente tem na tela de aula da Alura.

Mas existem alternativas mais genéricas, tipo o plugin stickyjs :)

abraços!

Oi Jana, eu estava vendo esse plugin mas parece que ele só server pra menu na horizontal, não consegui implementar em uma menu na vertical que nem o de vcs e do Wordpress faz

solução!

Oi Kelvym! Tem também o plugin sticky-kit

com esse dá pra fazer o sticky menu vertical e tem vários exemplos na página :)

Caracas, não tinha visto esse plugin, vlw Jana! Galera, obrigado pela ajuda! ;)