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

Pandemia e Copa-2022 mexem no calendário e devem reduzir datas de Estaduais

Flamengo e Fluminense se enfrentam na final do Campeonato Carioca-2020. Não se sabe como será o torneio a partir de 2021 - Reprodução / Internet
Flamengo e Fluminense se enfrentam na final do Campeonato Carioca-2020. Não se sabe como será o torneio a partir de 2021 Imagem: Reprodução / Internet

Colunista do UOL

25/07/2020 04h00

Se não houver novas paralisações por causa da pandemia do coronavírus, a temporada 2020 do futebol brasileiro terminará em 24 de fevereiro de 2021 com a última rodada do Campeonato Brasileiro. E poderá iniciar os ajustes nas datas dos Estaduais que a CBF planeja há algum tempo, mesmo antes da covid-19.

Desde 2019 a CBF criou um grupo de trabalho que estuda padronizações e alteração no calendário dos Estaduais. Já houve uma redução datas, de 18 para 16, mas a ideia era algo mais radical principalmente porque em 2022 a CBF terá que terminar a temporada até o início de novembro por causa da Copa do Mundo do Qatar — a Fifa determinou 14 de novembro como data limite para os jogadores se apresentarem às seleções.

Sempre em ano de Mundial se perde cerca de 40 dias em datas para campeonatos nacionais e continentais porque a Fifa não permite nenhum outro torneio simultâneo a sua Copa do Mundo. Mas 2022 será atípico porque devido ao calor no Oriente Médio a competição não ocorrerá nos tradicionais meses de junho e julho, mas entre 21 de novembro e 18 de dezembro. O calendário no Brasil, portanto, terá que terminar até o início de novembro.

A ideia da CBF, apurou o blog, era que a partir de 2022 os Estaduais fossem ainda mais enxutos, para a temporada caber do fim de janeiro até novembro. A pandemia bagunçou tudo um pouco, mas pode ajudar antecipando para 2021 uma ideia que seria realizada somente um ano depois.

Com o Brasileiro-2020 terminando somente em fevereiro de 2021, há algumas possibilidades sobre o que fazer com os Estaduais no ano que vem que estão sobre a mesa e que precisam levar em conta que os atletas dos principais times, provavelmente, terão férias até meados de março:

- Começar os Estaduais na semana seguinte ao Brasileiro, com os times que estavam na Série A usando atleta de equipes de base;

- Iniciar os Estaduais ainda em janeiro, intercalando com datas livres do Brasileiro; aqui provavelmente os principais times também usariam a garotada, já que dificilmente topariam cansar suas estrelas na reta final da Série A;

- Deixar os Estaduais bem reduzidos, de meados de março ao começo de maio, com os times principais em campo.

Mesmo nas duas primeiras opções haveria redução de datas, que se tornaria regra nos anos seguintes. Apesar de ter na cartolagem das federações estaduais sua base de sustentação política, a direção da CBF, com aval da Grupo Globo, que vê nos Estaduais um estorvo para o calendário, resolveu ajustar a data desses torneios, padronizando por regiões: Rio e São Paulo, os mais rentáveis, teriam um modelo, Minas e Rio Grande do Sul outro e Pernambuco, Bahia, Ceará, Goiás, Santa Catarina e Paraná um terceiro.

Todos com menos jogos e datas do que temos atualmente.