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

Dedé se emociona após queda do Cruzeiro: "não podemos sair de cabeça baixa"

Cruzeiro não conseguiu marcar no tempo normal e foi derrotado nos pênaltis por 4 a 2 - REUTERS/Ueslei Marcelino
Cruzeiro não conseguiu marcar no tempo normal e foi derrotado nos pênaltis por 4 a 2 Imagem: REUTERS/Ueslei Marcelino

Enrico Bruno

Do UOL, em Belo Horizonte

30/07/2019 22h01

O zagueiro Dedé se emocionou após a eliminação do Cruzeiro da Copa Libertadores. Após o empate sem gols, o time mineiro perdeu nos pênaltis por 4 a 2 para o River Plate, e está fora da competição continental. Instantes após a eliminação, o zagueiro fez uma oração em campo, se emocionou, mas não abaixou a cabeça e exaltou a luta da equipe.

"Jogamos, tivemos chances, demos o nosso máximo. Estou emocionado de gratidão. Sou grato a Deus por me capacitar a jogar uma competição como essa. Parei para orar um pouquinho, ou muita coisa pela minha cabeça", iniciou, em entrevista à TV Globo.

"Perdemos nos pênaltis, mas fizemos um jogo bem jogado. O River Plate enfrentou nosso time, ainda amos mais, tivemos mais resistência no jogo. Tivemos algumas chances claras, mas não matamos. Infelizmente, na disputa de pênaltis, dessa vez não deu para nós. Méritos aos batedores, ao goleiro do River. Mas não podemos sair de cabeça baixa, temos mais duas competições para disputar. Agora é brigar na Copa do Brasil", acrescentou.

Como citado pelo zagueiro, o goleiro Armani foi o grande nome da partida. Além de parar um chute de Pedro Rocha ainda no primeiro tempo, o camisa 1 do River parou as cobranças de Henrique e de David nos pênaltis.

Agora, o Cruzeiro volta suas atenções para outro torneio mata-mata. Em agosto, a equipe enfrenta o Internacional, pela semifinal da Copa do Brasil. Antes disso, a Raposa ainda pegará o rival Atlético-MG neste domingo, pelo Brasileirão. Apesar de priorizar a Copa, o time ainda precisa se preocupar com o campeonato de pontos corridos, já que está na 16ª colocação, a última antes do rebaixamento.

"Vamos trabalhar sempre para melhorar. Sabemos que não estamos bem no Brasileiro, mas estamos bem na Copa do Brasil. Agora é enfrentar o que a gente tem, temos chances de levantar mais um caneco da Copa do Brasil e de ir longe no Brasileiro", concluiu,

Cruzeiro