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

Dracena adota cautela, mas elogia prodígio de 16 anos do Santos na Copinha

Jair, zagueiro da base do Santos - Pedro Ernesto Guerra Azevedo/Santos FC
Jair, zagueiro da base do Santos Imagem: Pedro Ernesto Guerra Azevedo/Santos FC

Eder Traskini e Lucas Musetti Perazolli

Colaboração para o UOL, em Santos (SP)

25/01/2022 04h00

A grande revelação do Santos nesta edição da Copa São Paulo de Futebol Júnior é o zagueiro Jair Paula, de apenas 16 anos.

O Menino da Vila é o mais novo do elenco do Peixe e já foi titular durante toda a competição. Com Jair em campo, o Alvinegro enfrentará o Palmeiras na final da Copinha hoje (25), às 10h, no Allianz Parque.

Em alta, Jair ganhou elogios de Edu Dracena, atualmente executivo de futebol e um dos maiores zagueiros da história do Santos. Ele, porém, pede calma ao torcedor.

"Não vamos queimar etapas, por mais que ele esteja se destacando. Está jogando muito, vemos ele com bons olhos, mas vamos com calma. Ele está sendo observado por todos nós e, quando for propício, vamos trazer para treinar, se adaptar e descer para jogar. Faremos esse meio-campo para não queimar etapas e que suba de uma vez, sem subir e descer porque isso atrapalha a cabeça do jogador", disse Edu Dracena, em entrevista ao UOL Esporte.

"É um zagueiro que chama a atenção pela estatura (1,95 m) e pelo que joga, tecnicamente muito bom, sabe sair jogando com es entrelinhas. E é corajoso. A gente brinca aqui que a base é diferente do profissional. Dá um e e driblar e perder a bola e tomar o gol... A torcida não quer nem saber [risos]. Mas é da idade, e temos que estar atentos para não perder essa confiança e que evolua cada vez mais", completou o chefe do departamento de futebol do Santos.

O técnico Fabio Carille deve chamar Jair para algumas atividades com o elenco profissional nos próximos meses. O Santos sabe que o zagueiro é acima da média e fará um processo semelhante ao de Ângelo, com mais treinos do que jogos.

Para a posição, o Peixe conta com Kaiky, Eduardo Bauermann, Emiliano Velázquez, Luiz Felipe e Robson. Derick, parceiro de Jair na Copinha, também pode ser promovido.

O contrato de Jair Paula com o Santos termina em 31 de maio de 2024.