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

Assim caminham os estaduais

Qual o futuro dos torneios mais tradicionais do futebol brasileiro e para que eles ainda servem?

Igor Siqueira Do UOL, no Rio de Janeiro Marcello Zambrana/AGIF
Marcelo Cortes / Flamengo

Qual a alternativa para o futuro?

Os contratos de televisão dão um norte a respeito do que será dos estaduais no futuro. O acordo da Globo pelo pay-per-view do Paulista, por exemplo, tem duração de dois anos. Não por acaso, ele vai terminar quando o atual ciclo de contratos de direitos do Brasileirão se encerrar. Ou seja, em 2025, pode-se abrir um leque de transformações profundas no futebol brasileiro. Nisso tudo, é preciso pontuar a iniciativa dos clubes principais de criarem uma liga. O que pode sair daí?

"A própria preservação do que está agora é um tiro no pé. O modelo está mostrando que não vai voltar a ser sustentável. A Copa do Nordeste eu acho que é um modelo a ser replicado. Demorou um pouco a ser sedimentada, mas mostrou que é um produto de sucesso. De público, de marca. Acho que há espaço para produtos regionais", avalia Gustavo Hazan, da EY.

Propostas de reformas de calendário, por consequência dos estaduais, vira e mexe aparecem. Até jogadores, via Bom Senso FC, já deram sugestões lá em 2013. Entre 2015 e 2016, houve até um Comitê de Reformas na CBF que, na real, não conseguiu tantos avanços na questão.

Recentemente, quatro estudiosos ligados ao Futbox, um centro de pesquisa gráfica sobre futebol, montaram uma proposta de calendário brasileiro. Nela, os estaduais podem ter de seis a 12 datas, dependendo do estado que respeitar a data Fifa. A sugestão vem acompanhada da criação da Série E, também regionalizada, para dar calendário anual aos clubes pequenos e manter a base da pirâmide em atividade.

"O fim do estadual é algo simplista e radical. Entendo que o estadual deve ser repaginado, sem ser um transtorno para os grandes clubes, mas mantendo seu charme. A proposta é um estadual mais enxuto, às quartas-feiras. E vai gerar emprego, novos jogadores", conta um dos participantes do estudo, Marcelo Paciello, mestre em gestão do esporte e consultor da Sportheca, um hub de inovação, desenvolvimento de serviços e produtos no esporte, acrescentando uma perspectiva que também desaguará nos regionais:

"O que manda é o dinheiro. Se não tiver uma mudança de cima para baixo, o mercado vai se movimentar. Já ouvi de gente da área que é um possível acontecimento em curto prazo ter o Paulistão, mas com Sul-Minas, Copa Verde, Nordestão".

A boa notícia, se é que podemos chamar assim, é que vamos ter uma margem de manobra maior. A gente espera ter o calendário de 2023 mais espaçado, mais tranquilo.

Ler mais

Manoel Flores, Diretor de competições da CBF

+ Especiais

Ettore Chiereguini/AGIF

Apenas 35% dos times escalaram atletas com número 24 na Copinha. Presidente do TJD diz que "não usaria" número

Ler mais
Editoria de arte

Por que fan tokens e NFTs estão na moda entre clubes: investimento ou engajamento?

Ler mais
JOAO COTTA/TV Globo/Divulgação

Ana Thais Matos enfrentou pobreza e machismo até virar referência na TV

Ler mais
Marco Luzzani/Getty Images

Caso Robinho: a longa luta por justiça de uma mulher anônima condena seu estuprador à prisão

Ler mais
Topo