;(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

Oscar 2022: 'No Ritmo do Coração' é o grande vencedor, veja a lista

De Splash, em São Paulo

27/03/2022 00h01Atualizada em 28/03/2022 10h16

A cerimônia do Oscar 2022 aconteceu hoje em Los Angeles, apresentada pelas atrizes e comediantes Regina Hall, Wanda Sykes e Amy Schumer, e a grande vitória foi do filme independente "No Ritmo do Coração", contra as expectativas do grande favorito, "Ataque dos Cães", que teve 12 indicações e apenas uma vitória.

Este ano, "Duna" foi um grande vitorioso nas categorias técnicas. Enquanto isso, nas categorias principais, não houve grandes surpresas. Will Smith, Jessica Chastain, Troy Kotsur e Ariana DeBose foram os consagrados em atuação, como já especulava-se no início da temporada.

Veja aqui a lista completa de vencedores do Oscar 2022:

Melhor filme

No Ritmo do Coração, de Siân Heder

Melhor atriz

Jessica Chastain (Os Olhos de Tammy Faye)

Melhor ator

Will Smith ("King Richard - Criando Campeãs")

Melhor direção

Jane Campion (Ataque dos Cães)

Melhor canção

No Time to Die, de Billie Eilish e Finneas (007 - Sem Tempo para Morrer)

Melhor documentário

Summer of Soul

Melhor roteiro adaptado

No Ritmo do Coração (Siân Heder)

Melhor roteiro original

Belfast (Kenneth Branagh)

Melhor figurino

Cruella (Jenny Beavan)

Melhor filme internacional

Drive My Car (Japão)

Melhor ator coadjuvante

Troy Kotsur ("No Ritmo do Coração)

Melhor animação

Encanto (Jared Bush, Byron Howard, Yvett Merino, Clark Spencer)

Melhores efeitos visuais

Duna (Paul Lambert, Tristan Myles, Brian Connor e Gerd Nefzer)

Melhor fotografia

Duna (Greig Fraser)

Melhor atriz coadjuvante

Ariana DeBose ("Amor, Sublime Amor")

Melhor som

Duna

Melhor trilha original

Duna (Hans Zimmer)

Melhor direção de arte

Duna (Patrice Vermette, Zsuzsanna Sipos)

Melhor curta animado

The Windshield Wiper (Alberto Mielgo e Leo Sanchez)

Melhor curta em live-action

The Long Goodbye (Aneil Karia e Riz Ahmed)

Melhor montagem

Duna (Joe Walker)

Melhor maquiagem e cabelo

Os Olhos de Tammy Faye

Melhor curta documentário

"The Queen of Basketball"