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

Cruzeiro

Nova zaga do Cruzeiro sai com moral do clássico após anular ataque do Galo

Do UOL, em Belo Horizonte

12/04/2021 04h00

O Cruzeiro já possuía a melhor zaga do Campeonato Mineiro, mas a vitória de 1 a 0 sobre o rival Atlético-MG serviu para destacar ainda mais o bom momento defensivo da Raposa. No primeiro clássico de 2021, ano que o maior jogo do estado completa 100 anos, além de não levar gols, o time de Felipe Conceição se comportou bem para anular o forte ataque alvinegro, formado por Nacho, Keno, Savarino e Vargas, além de outros nomes que entraram no segundo tempo. Sem contar com Manoel, o garoto Weverton voltou a fazer um bom jogo e colheu novos elogios.

Na véspera do jogo, o zagueiro Manoel comunicou seu desejo de deixar o Cruzeiro e, por isso, não foi relacionado para a partida. Manoel era cotado para ser titular, e sua ausência permitiu que Weverton, de 18 anos, formasse a dupla de zaga ao lado de Ramon. Durante a partida, pouco se falou do jogador, mas não porque Weverton ficou sumido. Ele não só deu conta do recado como também não comprometeu com alguma falha ou decisão errada, algo que poderia acontecer com um jogador de baixa idade diante do maior rival.

"Me dá prazer ver o crescimento dos jovens porque sei da importância para o clube pelo retorno financeiro. Fico muito feliz, estão todos crescendo e isso demonstra o processo diário. Iremos precisar de todo mundo nessa difícil temporada", elogiou o técnico Felipe Conceição.

Além de Weverton, o sistema defensivo do Cruzeiro funcionou muito bem. Apesar de alguns erros e das escapadas do Atlético, a equipe celeste conseguiu tirar a velocidade e o espaço do rival na maior parte do tempo. Um bom exemplo para explicar essa eficiência ocorreu na primeira etapa do jogo, quando Nacho Fernández, referência na criação do Atlético, pouco participou. Sem conseguir encontrar o meia, zagueiros e volantes do Galo foram obrigados a forçar as bolas longas que, na maioria das vezes, foram inofensivas ao gol de Fábio. Na frente, o time também mostrou obediência tática, marcando alto e tirando o rival da zona de conforto. Quando isso não foi possível e o Atlético chegou com perigo, Fábio fez sua parte e evitou o gol do rival, como na finalização cara a cara com o chileno Vargas.

"Mostramos aos atletas por onde ir, onde a gente ia fechar o adversário. A mensagem para os atletas foi que não fugíssemos do trabalho que estamos iniciando, que mantivéssemos esse padrão que está sendo construído. Jogamos melhor e tivemos uma entrega e disciplina tática fundamentais para sairmos com a vitória", concluiu o treinador.

Agora, o Cruzeiro tem 17 pontos e assumiu a vice-liderança do Mineiro. Antes de voltar a campo pelo estadual, a Raposa vai ao Rio Grande do Norte, nesta quarta-feira (14), encarar o América-RN pela segunda fase da Copa do Brasil.

Cruzeiro