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

Palmeiras negocia volta de Angulo ao Cruzeiro, 40 dias após pedir retorno

Iván Angulo durante treino do Palmeiras na Academia de Futebol - Cesar Greco
Iván Angulo durante treino do Palmeiras na Academia de Futebol Imagem: Cesar Greco

Thiago Fernandes e Thiago Ferri

Do UOL, em Belo Horizonte e São Paulo

31/08/2020 14h21

A volta de Angulo ao Palmeiras deve durar apenas 40 dias. Após usá-lo apenas em uma partida, o clube está negociando emprestar o atacante colombiano mais uma vez ao Cruzeiro, até o fim da disputa da Série B, em janeiro de 2021.

A negociação foi revelada pela rádio Itatiaia. Angulo ficou entre março e julho na Raposa, mas só foi jogar na semana de despedida, por conta da pausa das competições pela pandemia do coronavírus.

O Palmeiras usou uma cláusula no primeiro contrato de empréstimo para pedir o retorno imediato, diante da saída de Dudu, a lesão de Gabriel Veron e a suspensão de Rony, revertida depois na Fifa. Após estrear pelo Cruzeiro no dia 26 de julho contra o URT, pelo Campeonato Mineiro, o atleta se reapresentou na Academia de Futebol no dia 27.

Dez dias após isso, estreou pelo Palmeiras, na primeira final do Campeonato Paulista, contra o Corinthians, na Arena em Itaquera. Ele não jogou mais desde então.

Além daquele Dérbi, ficou no banco em apenas duas partidas: a volta na final contra o arquirrival, no Allianz Parque, e o empate com o Goiás, pelo Campeonato Brasileiro.

De acordo com pessoas ligadas ao Verdão, Wesley voltou a ganhar espaço no ataque e por isso creem que Angulo pode ter mais espaço para amadurecer no time mineiro. Gabriel Veron, também, está perto de voltar de lesão.

Angulo foi contratado pelo Palmeiras em 2019, após se destacar pelas seleções de base da Colômbia. O clube pagou 3 milhões de dólares (cerca de R$ 12 milhões à época). Aos 21 anos de idade, ele tem contrato até 2024.