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

Rodrigo Coutinho

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Coutinho: Melhora de Dudu no Verdão não é por acaso. Entenda a função dele

Colunista do UOL

20/03/2022 04h00

Se há um jogador no setor ofensivo do Palmeiras com capacidade individual para desequilibrar, este é Dudu. Raphael Veiga cresceu bastante e divide o protagonismo com o camisa 7, mas sabe-se que o atacante repatriado em 2021 é capaz de mudar totalmente os rumos de uma partida. Ele demorou um pouco a engrenar e voltou a ser um grande destaque a partir do aproveitamento em uma função específica.

Dudu já atuou de diversas formas diferentes nos mais de 300 jogos com a camisa do Palmeiras. Pelos dois lados do campo, como um meia central e até como o homem mais avançado da equipe. A função atual, porém, tem uma diferença básica.

01 - Cesar Greco / Ag. Palmeiras - Cesar Greco / Ag. Palmeiras
Dudu e Abel após o bi da Libertadores
Imagem: Cesar Greco / Ag. Palmeiras

Por ser uma referência técnica desde que chegou, ele quase sempre teve muita liberdade de circulação pelo campo. Basicamente, na maioria das vezes, tinha autonomia para se aproximar da bola, seja qual fosse o setor em que ela estivesse.

Isso mudou! Mas ao contrário do que o ''romantismo'' do futebol brasileiro prega, restringir o espaço de movimentação de um atleta, seja ele muito talentoso ou não, nem sempre é negativo. Desde que se crie mecanismos para aproveitar a individualidade do jogador, e ele seja colocado em um contexto favorável.

É exatamente o que acontece com Dudu atualmente no Palmeiras. Em alguns jogos do Brasileirão de 2021, Abel já havia utilizado o camisa 7 bem aberto e fixo pela direita. A responsabilidade por dar amplitude ao time no setor é dele.

Como Marcos Rocha faz a ''saída de três'' com a dupla de zaga e Piquerez se solta pelo flanco esquerdo, liberando a flutuação de Gustavo Scarpa para a meia, Dudu é obrigado a manter a ocupação do espaço na faixa direita. E vem sendo acionado de forma muito benéfica para as suas características.

Rápido, habilidoso, inventivo e agressivo. O conjunto dessas valências faz com que qualquer bola que domine de frente com o lateral-esquerdo adversário, seja um verdadeiro tormento para quem vai marcá-lo. Lucas Piton, no clássico da última quinta-feira, foi apenas o último a sofrer assim.

A circulação rápida de bola do Palmeiras e as inversões da esquerda para direita visam gerar esse tipo de situação. Até a equipe adversária flutuar para o lado da bola, o lateral rival diminuir o espaço, a cobertura chegar a tempo, ou pintar uma dobra de marcação, Dudu já driblou, acelerou e serviu um companheiro.

02 - Rodrigo Coutinho - Rodrigo Coutinho
Dudu em cima da linha lateral pela direita, uma constante nos últimos meses
Imagem: Rodrigo Coutinho

03 - Rodrigo Coutinho - Rodrigo Coutinho
Inversões rápidas de jogo geram esse tipo de situação para Dudu. Domina de frente, com muito espaço para agir
Imagem: Rodrigo Coutinho

Abel Ferreira vem dando nova demonstração de como aplicar um determinado conceito para aproveitar uma grande virtude de um atleta específico. Algo que vai de encontro a basicamente tudo aquilo que buscaram com Dudu no Palmeiras.