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

Ancelotti exalta Militão antes de clássico: 'Entre melhores do mundo'

Militão, do Real Madrid, em jogo contra o Barcelona pela Copa do Rei - Diego Souto/Quality Sport Images/Getty Images
Militão, do Real Madrid, em jogo contra o Barcelona pela Copa do Rei Imagem: Diego Souto/Quality Sport Images/Getty Images

[email protected] (Redação)

18/03/2023 10h44

Às vésperas do clássico entre Real Madrid e Barcelona, o técnico Carlo Ancelotti concedeu entrevista coletiva em que comentou sobre algumas peças de sua equipe e seus adversários. Éder Militão, zagueiro do clube merengue e da seleção brasileira, foi muito elogiado pelo treinador

Ancelotti disse recentemente que Militão é o melhor defensor do mundo na sua opinião. Nesta quinta-feira, o treinador foi um pouco mais comedido, mas não deixou de rasgar elogios ao brasileiro. O italiano citou diversas características que fazem do zagueiro um grande jogador e ainda brincou sobre sua aparência.

"Para mim o Militão está entre os melhores do mundo. Ele tem tudo, é muito rápido, muito pesado no 1 contra 1, muito bom com a bola nos pés, um grande cabeceador. Não lhe falta nada. Um defeito talvez seja não estar sempre 100% concentrado. Não se pode dizer que é perfeito", disse. "Também não é tão bonito", completou Ancelotti enquanto ria.

Sobre a partida contra o Barcelona, o treinador relembrou da capacidade que os adversários têm de jogar de diferentes formas. No último confronto entre as equipes, pela ida da semifinal da Copa do Rei, o time comandado por Xavi saiu na frente no primeiro tempo e se defendeu no resto do jogo. De qualquer forma, Ancelotti garantiu que o Real Madrid partirá para o ataque.

"É muito difícil saber como será o jogo porque cada um tem a sua história. Na Taça defenderam porque se adiantaram no marcador. Dependendo do que aconteça no jogo podem jogar de uma forma ou de outra. Amanhã vamos jogar ao ataque, mas sem correr riscos", iniciou. "É uma equipa muito sólida defensivamente e que sofre poucos golos. Assim ganhou os jogos quando sofreu um pouco mais do normal", completou o treinador.

Real Madrid e Barcelona se enfrentam no domingo, a partir das 17h (de Brasília), no Camp Nou. Os visitantes ocupam a segunda colocação do Campeonato Espanhol, com 56 pontos, nove a menos que os líderes, que serão seus rivais nesta rodada. Uma vitória dos merengues os aproxima da ponta da tabela e pode significar o início da recuperação em busca do título.