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

Mundial de Clubes - 2020

Mundial terá final às 15h de uma quinta; veja quem já se classificou

Troféu do Mundial de Clubes da Fifa - Reprodução
Troféu do Mundial de Clubes da Fifa Imagem: Reprodução

Do UOL, em São Paulo (SP)

15/01/2021 04h00Atualizada em 15/01/2021 14h47

O Mundial de Clubes da Fifa de 2020 será disputado entre 1º (segunda-feira) a 11 de fevereiro (quinta-feira) — normalmente, a competição acontece em dezembro, mas por causa da pandemia do coronavírus foi adiada para 2021.

A pandemia resultou em uma mudança de última hora no Mundial de Clubes. Auckland City havia sido nomeado pela Confederação de Futebol da Oceania para representar o continente por ter feito a melhor campanha na primeira fase da Liga dos Campeões da Oceania, que acabou cancelada. Mas por causa das medidas de quarentena exigidas pela Nova Zelândia para controlar o vírus, o clube não poderá viajar para o Qatar e foi retirado do torneio. Assim, o Al-Duhail, adversário na primeira fase, começará diretamente na segunda.

A data da decisão do Mundial coincide com o primeiro duelo da final da Copa do Brasil, envolvendo Grêmio e Palmeiras, e também com a reta derradeira do Campeonato Brasileiro. A mudança para fevereiro foi uma decisão conjunta do órgão que rege o futebol mundial e as entidades responsáveis pela modalidade de cada continente.

A final da Copa Libertadores, entre Palmeiras e Santos, será realizada em 30 de janeiro, em jogo único no Maracanã, ou seja, a data do torneio só poderia ser depois da decisão da principal competição sul-americana.

Datas do Mundial de Clubes 2020

1ª fase: de fevereiro de 2021 (às 14h30, segunda-feira) - cancelada
2ª fase: 4 de fevereiro de 2021 (às 11h e 14h30, quinta-feira)
Semifinais: 7 de fevereiro de 2021 e 8 de fevereiro de 2021 (às 15h, domingo e segunda-feira)
Final: 11 de fevereiro de 2021 (às 15h, quinta-feira)

Equipes classificadas

Bayern de Munique - campeão da Liga dos Campeões
Al-Ahly (Egito) - campeão da Liga dos Campeões da CAF (Confederação Africana de Futebol)
Al-Duhail - Qatar, país sede
Tigres (México) - campeão da Concachampions
Ulsan Hyunda (Coreia do Sul) - campeão da Liga dos Campeões da Ásia
América do Sul, a definir - Palmeiras e Santos fazem a final da Libertadores em 30 de janeiro, em jogo único no Maracanã

Sorteio do Mundial de Clubes 2020

Os times da Conmebol e da Uefa já têm lugar predeterminado na chave, entrando direto na semifinal. No entanto, seus adversários serão definidos em sorteio das chaves na sede da Fifa, em Zurique (SUI), na próxima terça-feira (19), às 10h (de Brasília).

Estádios que serão utilizados

Estádio Internacional Khalifa: partida da 2ª fase e semifinal Conmebol
Estádio Ahmad bin Ali: semifinal Uefa
Estádio Cidade da Educação: partida da 2ª fase, disputa de 5º lugar, disputa de 3º lugar e final