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

Danilo Lavieri

OPINIÃO

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

Palmeiras precisa resolver "caso Luiz Adriano" para dar mais opções a Abel

Luiz Adriano em treino do Palmeiras na Academia de Futebol - Fabio Menotti
Luiz Adriano em treino do Palmeiras na Academia de Futebol Imagem: Fabio Menotti

Colunista do UOL

04/09/2021 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Uma das reclamações recorrentes de torcedores do Palmeiras é a falta de ação na última janela de transferências, especialmente para a contratação de um camisa 9. A verdade é que o elenco apresenta opções para Abel Ferreira, mas a principal delas vive uma situação que merecia mais transparência.

Luiz Adriano já mostrou diversas vezes que tem condições técnicas e táticas superiores em relação a quase todos os seus concorrentes no time e até mesmo no Brasileirão. Ele tem posicionamento diferenciado, consegue exercer funções até de armação se necessário e tem capacidade para finalizar. A questão é que sua agem na Academia de Futebol tem sido marcada por problemas físicos que impossibilitam uma sequência.

Afinal, o que acontece com ele? Quais os problemas para que um jogador de salário tão expressivo e de tamanha importância para o grupo não seja mais aproveitado? Um edema pode tirar o atleta por tantas vezes de campo? O máximo que ouvimos até aqui é que "ele não vive suas melhores condições físicas".

As estatísticas mostram que o time de Abel consegue, sim, criar bastante oportunidade. Como bem destacou o jornalista Paulo Calçade, nos últimos seis jogos, o tão aclamado Atlético-MG conseguiu criar 105 oportunidades de gol. O Palmeiras, por sua vez, chegou a incríveis 95 oportunidades, mas a impressão é que não tem criatividade. Mesmo que com menos "show" do que o Galo e o Flamengo, os palmeirenses sempre conseguem incomodar a defesa adversária, mas às vezes isso não fica muito claro. E sabe por quê? Falta qualidade para finalizar.

Deyverson é esforçado, mas limitado tecnicamente. Willian tem um excelente custo-benefício, mas já disse que prefere não atuar como referência. Rony já atuou improvisado por ali em um esquema sem camisa 9 fixo, mas não consegue repetir o desempenho que lhe deu o rótulo de um dos melhores da Libertadores de 2020.

Se Luiz vive um "drama" sem solução, o melhor seria encontrar uma saída boa para os dois lados. Se ele não estiver satisfeito no Palmeiras, já teve oportunidades de se transferir para outras equipes mais de uma vez.

Isso não significa que o mercado do Palmeiras foi horrível. Na verdade, as contratações de Piquerez, Jorge e o retorno de Dudu já seriam suficientes para animar a torcida, isso sem nem contar a volta de Matheus Fernandes. E a manutenção de praticamente todos os atletas que conquistaram os títulos de 2020? Outro feito considerável! Tudo isso mantendo saúde financeira do clube: louvável.

Mas enquanto não tiver um camisa 9 para chamar de seu, a torcida vai ter sempre uma parte do copo meio-vazio para lembrar.

Siga também as opiniões de Danilo Lavieri no Twitter e no Instagram