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

Danilo Lavieri

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Agora não tem o que discutir: eliminação do Palmeiras para o CRB é vexame

Ewandro comemora gol do CRB contra o Palmeiras pela Copa do Brasil - Marcello Zambrana/AGIF
Ewandro comemora gol do CRB contra o Palmeiras pela Copa do Brasil Imagem: Marcello Zambrana/AGIF

Colunista do UOL

09/06/2021 21h14

Receba os novos posts desta coluna no seu e-mail

Email inválido

Cair para o CRB hoje (9) na Copa do Brasil é o maior baque da Era Abel Ferreira no Palmeiras. Se o técnico português chegou a enfrentar algumas turbulências, por derrotas em clássico ou pelas quedas nos pênaltis na Recopa ou Supercopa, agora, o barulho que virá da torcida e dos rivais nos próximos dias é finalmente justificável e sem nenhuma defesa.

Por mais absurdo que seja o time jogar desfalcado de atletas importantes por causa da data Fifa, só isso não justifica o revés de um time que está entre os mais estruturados do país para uma equipe que tenta apenas se confirmar na Série B. Depois de tanto debater a palavra certa caso a eliminação no Paulista acontecesse na primeira fase, o Alviverde agora tem um vexame para chamar de seu.

Perder três cobranças e desperdiçar a chance de eliminar o rival da forma que foi na cobrança de pênaltis transforma o resultado em ainda mais vergonhoso, com direito a mais um erro fatal de Lucas Lima, jogador mais bem pago do elenco e que não consegue devolver o que ganha há meses.

O Palmeiras teve a bola em seu pé praticamente durante o jogo todo. Diante de um CRB que conseguiu o 1 a 0 e optou por se fechar, a equipe de Abel Ferreira enfrentou o desafio de ar pelo caminhão de Alagoas estacionado em frente a área, com duas linhas de cinco em quase todas as ocasiões.

Sob esse contexto, os palmeirenses finalizaram 34 vezes nos 90 minutos e acertaram só 10 no gol, de acordo com dados do Sofascore. Isso significa menos de 30% de eficiência. No primeiro tempo, ainda houve troca de es, triangulação e algo que não parecia tentativas de desespero. O desempenho foi, inclusive, melhor do que boa parte das últimas partidas, mesmo que desta vez tenha perdido. No segundo tempo, no entanto, o cenário mudou radicalmente.

Em qualquer ocasião, a bola era alçada na área para que Luiz Adriano, Wesley ou Rony tentassem o desvio. Não deu certo. A melhor chance do Palmeiras foi em cruzamento errado do Alviverde que contou com a ajuda da zaga do CRB. Na ocasião, Luiz Adriano conseguiu se ajeitar a tempo de desviar e viu o goleiro adversário fazer excelente defesa. Chamou a atenção o sumiço de Raphael Veiga e o excesso de erros dele na hora de tentar cruzar.

No terço final, o roteiro do jogo reservou tentativas isoladas de Gustavo Scarpa. Depois de tanto tentar cruzar e não achar seus companheiros, começou a chutar de todas as formas. Todas as tentativas aram perto, mas poucas deram trabalho de fato ao goleiro Diogo Silva, que fez sua melhor intervenção para parar o meio-campista em batida de falta.

O roteiro nos pênaltis já estava praticamente escrito. Tão logo o juiz apitou o término dos 90 minutos, os palmeirenses já sabiam que o filme poderia se repetir pela terceira vez neste curto espaço de tempo.