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

Dudu crê em sucesso de Felipe Melo na zaga e vê lançamentos como trunfo

Dudu treina com o Palmeiras nos Estados Unidos - Cesar Greco/Ag. Palmeiras/Divulgação
Dudu treina com o Palmeiras nos Estados Unidos Imagem: Cesar Greco/Ag. Palmeiras/Divulgação

Colaboração para o UOL, em São Paulo

13/01/2020 18h54

Em preparação para a Florida Cup, nos Estados Unidos, Dudu, do Palmeiras, opinou sobre a possível mudança de posição de seu companheiro Felipe Melo, que está sendo testado por Vanderlei Luxemburgo na defesa. Em entrevista aos canais Fox Sports, o atacante disse acreditar que a mudança será bem-sucedida.

Dudu ressaltou que, em outros momentos da carreira, Felipe Melo já atuou como zagueiro. O atacante também afirmou que a qualidade de e do volante pode ser um trunfo para esta adaptação.

"O Luxemburgo já tinha falado que gostaria de testar o Felipe Melo de zagueiro. Ele está testando. Isso requer tempo, mudar de posição. Ele tem que aprimorar isso no treino. Já jogou na posição. Tenho certeza que ele vai nos ajudar nesse ano e tem tudo pra dar certo esse ano. [...] Até conversei com o Felipe Melo no treino sobre o e dele, que pode ser uma facilidade para ele achar a gente do ataque com um e longo. É algo que a gente tem que treinar", declarou.

O atacante palmeirense ainda falou sobre a reunião com os integrantes da torcida organizada Mancha Verde. Felipe Melo, Bruno Henrique e Vanderlei Luxemburgo também compareceram a este encontro.

"A gente sabe da paixão do torcedor pelo Palmeiras. Sabemos que eles querem ver um time campeão. Ano ado, não conquistamos nenhum título. Mas, por outro lado, eles têm que nos ajudar. Se ficar separado o torcedor, a diretoria e os jogadores como ficou ano ado, fica difícil de ganhar. Quando entrar no Allianz Parque, eles têm que nos apoiar, e a gente tem que se dedicar. A conversa foi tranquila. A gente sempre se dedica, quer ajudar, e contamos com os torcedores este ano, esperamos que todo mundo esteja feliz no fim do ano", completou.