;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Lembrança de Max. Quem é Billy, citado em novo trailer de Stranger Things

Billy é chamado por Max em novo trailer de "Stranger Things" - Reprodução/ Netflix
Billy é chamado por Max em novo trailer de 'Stranger Things' Imagem: Reprodução/ Netflix

Fernanda Talarico

De Splash, em São Paulo

12/04/2022 13h09

A quarta temporada de "Stranger Things" ganhou o seu primeiro trailer na manhã de hoje e diversos mistérios são apresentados no novo vídeo da série da Netflix. A primeira parte do novo ano chegará em 27 de maio à plataforma.

Como a terceira temporada estreou no streaming em julho de 2019, serão quase três anos de diferença entre os lançamentos, o que pode causar dúvidas no público quanto aos personagens. Foi o caso do vídeo lançado hoje, que ados os 30 segundos iniciais, conta com Max Mayfield (Sadie Sink) na frente da lápide de Billy Hargrove.

"Billy, não sei se consegue ouvir isso. Desde que você se foi, tudo tem sido um desastre", diz Max no trailer.

Mas, quem é mesmo Billy?

Caso você não se lembre — afinal, faz muito tempo —, Billy Hargrove foi um dos personagens principais da segunda e terceira temporada de "Stranger Things". O personagem é o meio-irmão de Max e, ao ser apresentado durante o segundo ano da série, ele é mostrado como o típico valentão que bate nas outras crianças.

Ele chega à Hawkins em 1984, quando sua família se muda da Califórnia para a cidade do estado de Indiana.

Billy morreu durante a terceira temporada de Stranger Things - Reprodução - Reprodução
Billy morreu durante a terceira temporada de Stranger Things
Imagem: Reprodução

Interpretado por Dacre Montgomery, Billy se torna uma espécie de soldado do Devorador de Mentes, o monstro com tentáculos que habita o Mundo Invertido. Ao final da terceira temporada, durante a Batalha de Starcourt, Billy tenta deter o grupo de Eleven e seus amigos de vencerem. Sem conseguir usar seus poderes, a jovem fala das memórias de infância dele para conseguir lutar contra o monstro.

No momento, Billy se lembra de sua mãe, o que o ajuda a superar o poder que o Devorador tem, e se sacrifica para conseguir salvar não apenas Hawkins, mas toda a humanidade.

Segundo o trailer, Max sente saudades do irmão e vai até a lápide dele para conversar sobre as dificuldades que está ando depois dos eventos da terceira temporada.