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

Julio Gomes

Palmeiras na final! Idealizamos uma consistência que não existe por aqui

Abel Ferreira acompanha Palmeiras x River Plate, jogo da semifinal da Copa Libertadores - AMANDA PEROBELLI / POOL / AFP
Abel Ferreira acompanha Palmeiras x River Plate, jogo da semifinal da Copa Libertadores Imagem: AMANDA PEROBELLI / POOL / AFP

12/01/2021 23h42

Receba os novos posts desta coluna no seu e-mail

Email inválido

O Palmeiras conseguiu sobreviver ao desastre. Depois de fazer 3 a 0 no River Plate na ida, na Argentina, levou 2 a 0 no Allianz, na volta, e acabou a partida encurralado na área por um time com um jogador a menos. Ninguém esperava o placar da ida. Ninguém esperava o drama da volta.

Assim como ninguém esperava que um time dominasse o futebol brasileiro, como fez o Flamengo em 2019. E ninguém esperava pela queda enorme do mesmo Flamengo logo em 2020.

Parece que "dinastias" são proibidas no Brasil. Sempre que alguém dá indícios de que vá criar um domínio, o ato seguido é desastroso. Idealizamos uma consistência que simplesmente não existe, e duvido que existirá.

Porque as bases do futebol brasileiro, seja dos grandes clubes ou dos médios e pequenos, é tão sólida quanto uma gelatina quente. O calendário é uma porcaria, os dirigentes atuam como amadores, há o desequilíbrio financeiro do país e dos próprios clubes, a maior parte dos técnicos ficou presa a um futebol que mudou, há uma empáfia generalizada por causa das cinco estrelas no peito.

Há quanto tempo jogam juntos esses jogadores do Palmeiras? Por quanto tempo jogarão os do Flamengo? (ainda mais depois dos protestos lamentáveis desta terça). Como foi formado o time do Santos, que também pode chegar à final sul-americana? Aliás, qual é mesmo o time do Santos?

Mesmo o River Plate, que caiu bravamente da Libertadores, vive problemas similares. Sim, Gallardo está lá há seis anos, o River tem chegado longe em todas as Libertadores. Mas sabem quantas vezes Gallardo foi campeão argentino com o River? Zero. Entra ano, sai ano, o time muda, perde jogadores, vai buscar outros. Não há consistência nem no Brasil nem na América do Sul.

O torcedor adoraria ver seu time dominando tudo. A imprensa clama por consistência e estabilidade, às vezes porque acredita na importância disso conceitualmente, às vezes apenas porque o lado torcedor está falando mais alto. Talvez o grande segredo do futebol brasileiro despertar interesse seja justamente a falta de um clube dominante, o excesso de equilíbrio e imprevisibilidade.

Nesta noite de Libertadores, tivemos mais um capítulo dessa inconsistência. O Palmeiras é forte, mas está longe de ser um time pronto e que já tenha ado por todas as situações possíveis. Na partida de ida, o primeiro tempo já tinha sido do River. Mas os argentinos derreteram emocionalmente no segundo, o que permitiu ao Palmeiras, em uma noite inspirada, fazer o resultado que fez.

Um grande resultado não pode servir para cravarmos que um time é fortíssimo. Assim como um péssimo resultado ou atuação não podem servir para detonarmos uma equipe. O Palmeiras está longe, repito, de ser confiável. Mas está perto do que o torcedor realmente quer, a única coisa que quer: o título.