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

ANÁLISE

Texto baseado no relato de acontecimentos, mas contextualizado a partir do conhecimento do jornalista sobre o tema; pode incluir interpretações do jornalista sobre os fatos.

Flamengo é a única barbada; Libertadores tem três duelos muito abertos

Gabigol comemora gol do Flamengo contra o Olimpia, pela Libertadores - Staff Images/Conmebol
Gabigol comemora gol do Flamengo contra o Olimpia, pela Libertadores Imagem: Staff Images/Conmebol

13/08/2021 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Finalizados os jogos de ida das quartas de final da Copa Libertadores, só há um time virtualmente classificado para a fase seguinte: o Flamengo. Depois dos 4 a 1 sobre o Olimpia, no Paraguai, não há como o time de Renato Gaúcho ficar sem a vaga nas semifinais. Futebol é futebol, etc, etc, etc, mas milagre tem limite.

Os outros três duelos estão completamente abertos. Existe uma ligeira vantagem para os três times que disputarão as partidas de volta em casa, semana que vem. Mas não consigo chamar Barcelona, Palmeiras ou Atlético de favoritos.

O Galo é, desses, o que leva uma vitória para a partida de volta contra o River Plate (1 a 0). Não terá o "cérebro" Nacho Fernández, mas o argentino será substituído pela presença de 16 mil atleticanos no Mineirão. É o reencontro do Galo com a torcida após um ano e meio, o clima estará quente e é claro que o público pode fazer a diferença.

Mas o River é o time mais consistente na Libertadores nos últimos seis anos. É o grande sul-americano que tem o mesmo técnico há mais tempo, Gallardo sabe exatamente o que seu time pode entregar. A "era Gallardo" não teve uma vitória sequer do River em casa contra brasileiros, mas, por outro lado, teve várias vitórias do River fora de casa, em alguns casos revertendo as eliminatórias.

Ou seja, é preciso ter cuidado, muito cuidado. A vantagem do Atlético existe, o time de Cuca joga por dois dos três resultados possíveis. Mas não é uma vantagem definitiva.

Barcelona e Palmeiras não levam uma vitória para casa, mas enfrentam adversários menos fortes do que o River, adversário do Atlético.

Ao time do Equador, empates sem gols ou por 1 a 1 bastariam contra o Fluminense, por causa dos dois gols marcados ontem (12), no Maracanã. O Flu não vive seu melhor momento na temporada e, do jeito que é o futebol brasileiro, não sabemos nem se Roger chega ao jogo da semana que vem. O Barcelona tem uma chance razoável de ser o adversário do Flamengo na semifinal.

Ao Palmeiras, o empate sem gols serve contra o São Paulo, que terá de vencer no Allianz ou empatar por dois ou mais gols para se classificar. Há muito equilíbrio neste confronto, possivelmente o mais aberto de todos. O Palmeiras buscou o empate no Morumbi e mostrou ter mais opções de banco de reservas, mas é uma vantagem muito sutil que leva para a partida de volta. Importante lembrar que há um tabu aqui: o Palmeiras nunca venceu o São Paulo na Libertadores (nove partidas).