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

De 10 a 5: Zé Rafael se firma como curinga no Palmeiras desde Luxa

Zé Rafael chegou ao Palmeiras em janeiro de 2019 - Cesar Greco/Palmeiras/by Canon
Zé Rafael chegou ao Palmeiras em janeiro de 2019 Imagem: Cesar Greco/Palmeiras/by Canon

Do UOL, em São Paulo

15/02/2023 12h00

Zé Rafael está no Palmeiras há quatro anos e tem jogado cada vez mais próximo da linha defensiva. Contratado como um meia-armador, o camisa 8 foi recuado em duas oportunidades, por Vandelei Luxemburgo, em 2020, e por Abel Ferreira, em 2023.

O meio-campista foi promovido a "novo Danilo" nesta temporada. A transferência do jogador para o Nottingham Forest (ING) obrigou Abel Ferreira a remodelar o meio do Palmeiras e, para dar maior liberdade para Gabriel Menino, recuou Zé Rafael para a "posição 5", de primeiro volante.

Para ser muito sincero, nós pegamos o Zé e estamos a fazer dele o Danilo, e pegamos o Menino e estamos a fazer dele o Zé, só que do lado contrário". Abel Ferreira, técnico do Palmeiras.

Sem reforços, Zé Rafael foi a "solução caseira" de Abel. Como o Palmeiras não tem pressa para contratar, o português precisou se virar com as opções que tinha no elenco. Após testes com Jailson e Atuesta, o comandante montou o meio-campo com Zé Rafael, Gabriel Menino e Raphael Veiga.

O Zé é o nosso maior ladrão de bola. É o cara que mais rouba a bola para pegar contra-ataque. Se a gente parar para ver os últimos anos dele, ele tem se reinventado, jogado em várias funções. Não joga só em uma função, joga de primeiro, segundo volante, e quando chegou do Bahia ele era meia". Weverton, goleiro do Palmeiras.

Zé Rafael é o segundo melhor jogador do Palmeiras em desarmes nesta temporada, atrás apenas de Murilo. O camisa 8, segundo o Sofascore, tem média de 2,5 por partida.

Primeira troca foi com Luxa

Zé Rafael - VINICIUS NUNES/AGÊNCIA F8/ESTADÃO CONTEÚDO - VINICIUS NUNES/AGÊNCIA F8/ESTADÃO CONTEÚDO
Zé Rafael, do Palmeiras, em jogo contra a Inter de Limeira pelo Paulistão
Imagem: VINICIUS NUNES/AGÊNCIA F8/ESTADÃO CONTEÚDO

Técnico do Palmeiras em 2020, Vanderlei Luxemburgo transformou Zé Rafael em segundo volante. Contratado após se destacar ofensivamente pelo Bahia, o meio-campista não conseguiu se firmar no time e viu com bons olhos uma mudança de posição.

Ele foi o cara que mudou o meu modo de jogar, recuou um pouco, me pôs numa situação mais de criação, vindo de trás, com um pouco mais de campo. O duro é que tem que marcar mais, mas isso aí faz parte". Zé Rafael, em fevereiro de 2021.

Na "posição 8", Zé Rafael se tornou titular do Palmeiras. Desde então, foram cerca de 170 jogos como segundo homem de meio-campo e cinco gols.

Palmeiras