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

Marcel Rizzo

Fifa: Mundial de Clubes começa dois dias após a Libertadores

Taça do Mundial de Clubes da Fifa que será disputado em fevereiro de 2021 - GettyImages
Taça do Mundial de Clubes da Fifa que será disputado em fevereiro de 2021 Imagem: GettyImages

Colunista do UOL

17/11/2020 13h12

A Fifa definiu as novas datas do Mundial de Clubes do Qatar que foi adiado de dezembro de 2020 por causa da pandemia: será de 1º a 11 de fevereiro de 2021. Com isso, o campeão da Libertadores vai ser decidido em 30 de janeiro, na final única do Maracanã, e já viajará a Doha para disputar a competição da Fifa — a estreia do campeão sul-americano será dia 7 de fevereiro, contra time a ser definido.

Caso seja um brasileiro, a CBF deverá ter problemas porque esse time perderá ao menos duas rodadas da reta final da Série A, a 33ª e a 34ª e, se chegar à final do Mundial em 11 de fevereiro, provavelmente também a 35ª que será disputada no dia 13. Seis times brasileiros estão nas oitavas de final da Libertadores com chance de ir ao Qatar: Flamengo, Palmeiras, Inter, Grêmio, Santos e Athletico.

Mas não é só isso: a final da Copa do Brasil está programada para os dias 3 e 10 de fevereiro, ou seja, bem no meio do Mundial. Caso o campeão da Libertadores seja brasileiro e também esteja na decisão do torneio mata-mata da CBF, a confederação brasileira terá que modificar as datas de sua competição. Flamengo, Palmeiras Inter e Grêmio ainda estão nos dois campeonatos.

As datas, como mostrou o blog, foram acertadas depois que a Fifa consultou as confederações sobre quando cada torneio continental acabará. O último será a Libertadores. Por enquanto somente dois dos sete times participantes já estão classificados para o torneio, que tem o mesmo regulamento desde 2005: o Bayern de Munique, campeão europeu, e o Al-Duhail, vencedor do Campeonato Qatariano e que vai representar o país-sede.

A Concacaf (Confederação das Américas do Norte, Central e Caribe) avisou que terminará seu torneio, que foi paralisado em março nas quartas de final, em uma "bolha", como fizeram a Uefa na Liga dos Campeões e a NBA — uma sede fixa. O vencedor sairá em dezembro, igual a Ásia (que também definirá sua competição em locais fixos).

A África conhecerá seu campeão continental em 27 de novembro, com a final entre Zamalek (Egito) e Al-Ahly (também do Egito). Há dúvida sobre qual será o representante da Oceania, já que a confederação local cancelou definitivamente sua Liga dos Campeões, que ainda estava na fase de quartas de final. Haverá, portanto, uma indicação com critério a ser definido.

A federação internacional precisou adiar o Mundial, marcado inicialmente para dezembro, por causa dos atrasos dos torneios continentais devido à Covid-19. A entidade nunca cogitou cancelar a competição porque tem acordo de patrocínio, que prevê a realização do Mundial com sete clubes por pelo menos mais uma temporada — há um contrato de exclusividade com a empresa de comércio online chinesa Alibaba.

A edição 2020 seria a última no formato atual, com sete participantes, dando espaço para o super Mundial projetado pela Fifa, com 24 clubes, que seria em 2021 na China, mas já adiado por causa da pandemia do coronavírus. Este torneio não tem qualquer previsão de data, avisou recentemente o presidente da Fifa, Gianni Infantino.