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

ANÁLISE

Rafael Oliveira: Chelsea é time em formação, mas um elenco para ser cobrado

Do UOL, em São Paulo

18/03/2021 04h00

Em um dos confrontos mais equilibrados das oitavas de final da Liga dos Campeões, o Chelsea eliminou o Atlético de Madri. Agora à frente dos Blues, o técnico alemão Thomas Tuchel, vice-campeão na última temporada com o Paris Saint-Germain, levou a melhor mais uma vez diante do argentino Diego Simeone.

No Fim de Papo, live pós-rodada do UOL Esporte, com os jornalistas Julio Gomes, Mauro Cezar Oliveira e Rafael Oliveira, a classificação do clube inglês, campeão da Liga dos Campeões de 2012, é analisada, com Rafael chamando a atenção para o bom trabalho de Tuchel, que foi demitido do clube de Neymar no fim do ano ado e as chances do Chelsea.

"O trabalho do Tuchel até agora é muito bom, e ele já deu cara e uma competitividade a um elenco que investiu para isso. O Chelsea contratou jogadores desejados pelo mais alto nível da Europa. Não é que o Chelsea seja um patinho feio, como conjunto, ainda é uma novidade, é um time em formação, mas, como elenco, é um time para ser cobrado", afirma Rafael Oliveira.

"Talvez não fosse o momento, ainda nessa temporada, tem toda a questão do [Frank] Lampard [ex-treinador], é um início de trabalho, mudou radicalmente, no primeiro momento foi o time dos garotos e agora é o das contratações. Mas o Tuchel conseguiu dar uma cara rapidamente e em termos de peças, o Chelsea tem qualidade, não para colocar como favorito à Champions, até porque não atingiu esse status ainda como time, mas é um time forte. Acho que foi muito superior em relação ao Atlético [de Madri]", completa.

O jornalista avalia, pelo lado do clube espanhol, que Diego Simeone não pode ser acusado de ter sido defensivo demais na segunda partida, realizada em Londres, embora tenha dado motivos no duelo em casa, quando perdeu por 1 a 0. Desta forma, a eliminação é encarada como mais fruto de incompetência em relação à estratégia escolhida para atacar.

"O Simeone a gente podia questionar a falta de ambição, era um Atlético de Madri muito mais defensivo, preocupado em bloquear todas as saídas ofensivas do Tuchel e o time até fez isso de certa forma. Aquele confronto teve cara de 0 a 0, foi 1 a 0 para o Chelsea, mas aquele detalhe de um time que aceita correr esse risco se defendendo na maior parte do tempo. Hoje, a ideia do Simeone já foi totalmente diferente, foi tentar ir ao ataque desde o primeiro momento. Para mim, não cabe a questão de o Simeone ser retranqueiro", analisa o jornalista.

"Faltou foi competência, foi execução, o Atlético tentou atacar desde o primeiro momento. Foi completamente superado, o Chelsea fez uma grande partida e isso começou com o Atlético tentando pressionar a saída de bola, o Chelsea encaixando es. Aí, Kanté, Kovacic e os três zagueiros foram fundamentais, a partir dali o Chelsea tomou conta para completar a história de que o Simeone não foi retranqueiro, não jogou com uma formação defensiva. O Chelsea massacra de certa forma, o Chelsea é muito superior ao Atlético contra-atacando, castigando, os gols saíram assim", conclui.

O sorteio das quartas de final da Liga dos Campeões acontece amanhã (19), às 8h (de Brasília), com os confrontos marcados para os dias 6 e 7 de abril nos jogos de ida, com a definição em 13 e 14 do próximo mês.