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

Barcelona repete fracasso de 45 anos atrás e volta a ver fantasmas

O zagueiro Sergio Ramos, do Real Madrid, e Messi, do Barcelona, em lance pelo clássico do Campeonato Espanhol - OSCAR DEL POZO / AFP
O zagueiro Sergio Ramos, do Real Madrid, e Messi, do Barcelona, em lance pelo clássico do Campeonato Espanhol Imagem: OSCAR DEL POZO / AFP

02/03/2020 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

A derrota para o Real Madrid, ontem, no Santiago Bernabéu, deixou o "barcelonismo" assustado. Assustado como há muito não se via. As assombrações estão de volta. O medo de voltar a ser inferior ao Real Madrid, como indiscutivelmente era antes da aparição de um certo Lionel Messi.

Pode parecer difícil imaginar, mas durante 30 temporadas, entre 1960 e 1990, o Barça ganhou somente duas Ligas espanholas. Não era nem claramente o segundo time do país - disputava o posto com os Atléticos de Madri e de Bilbao. A história é a história. E, na história, quem ganha é o Real Madrid.

Como disse um colunista catalão, "o velho Real Madrid vai sempre ganhar do velho Barcelona". E, conforme os anos am, a aposentadoria (ou saída) de Messi vai ficando mais próxima. Cresce o medo de o Barça voltar a ser o que era - e era muito, mas não tanto quanto o Madrid.

Com o empate de 0 a 0 no Camp Nou, em dezembro, e a derrota por 2 a 0 no Bernabéu, o Barcelona a o campeonato inteiro sem fazer um gol sequer em seu maior rival. Desde quando isso não acontecia? Desde a temporada 74/75, lá se vão 45 primaveras sem que o time fracassasse na tentativa de fazer um mísero gol. Não ficava sem marcar um gol no Bernabéu desde a temporada 2006/2007.

Na era Messi, o Barça ganhou 15 de 30 jogos que fez contra o Madrid pelo campeonato. Messi fez parecer normal o que nunca foi normal. É o primeiro recorte da história em que o Barça é melhor, mais temido e mais respeitado que o Madrid. Mas, ontem, Messi não empatou o jogo porque perdeu um sprint para... Marcelo! Não que Marcelo seja lento, mas o simbolismo do lance foi muito forte.

A idade está chegando para Messi? Já não dá mais para confiar nele para resolver (mascarar?) todos os problemas? Será que o fim de uma era representará necessariamente uma volta ao ado?

O catastrofismo é quase inevitável quando falamos de futebol. Detalhes, pequenos acertos, pequenos erros, pequenos acasos, pequenos espaços, pequenas distâncias, determinam um resultado de vitória ou de derrota. Mas os traumas do ado fazem a análise fria parecer um monte de letrinhas minúsculas em um teste de visão.

Os fantasmas do barcelonismo estavam meio sumidos. O clássico do Bernabéu acordou alguns.