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

Livre no mercado, Daniel Alves avisa que "não tem medo de desafios"

Daniel Alves no jogo Brasil x Bolívia na Copa América - Lucas Lima/UOL
Daniel Alves no jogo Brasil x Bolívia na Copa América Imagem: Lucas Lima/UOL

Danilo Lavieri, João Henrique Marques, Marcel Rizzo e Pedro Lopes

Do UOL, em Salvador e em Paris (França)

16/06/2019 13h49

Daniel Alves está a menos de 15 dias de ficar sem contrato com o PSG. Livre no mercado para com qualquer outra equipe, o lateral da seleção brasileira tentou despistar sobre o seu futuro, mas avisou que está pronto para qualquer tipo de situação.

Segundo apurou o UOL Esporte, a renovação do vínculo é vista como improvável não só pela diretoria do clube, quanto por pessoas próximas do atleta. Ele já tem opções à mesa e fará a sua decisão após a disputa da Copa América.

"Estou aqui na seleção, prefiro focar no compromisso que a gente tem agora. Foi um ano duro para mim, tive que me reinventar muito. Sou batalhador e foi difícil para voltar aqui. Não quero estragar esse momento pensando em outra coisa. Foi sofrido ar a situação que ei, e agora vou focar nisso, fazer o melhor para conseguir o objetivo aqui", afirmou o jogador.

"Temos uma missão, não pode haver distrações. Quero focar 100% em cumprir o objetivo e a partir daí vamos ver. Posso dizer só que não tenho medo de desafios, para qualquer coisa estou preparado", completou.

Depois, questionado por um repórter local se um dia ele voltaria a jogar na Bahia, Dani avisou que ainda não pensa nisso.

"Vai demorar um pouco, porque tenho grandes objetivos ainda. No meu meu livro ainda faltam algumas páginas e eu vou me dedicar ao máximo para poder escrever. E que sejam páginas vitoriosas", afirmou. "Eu sou são-paulino, meu pai é palmeirense. Mas sempre falam de Bahia e São Paulo, são os dois times que eu tenho mais relação. Torci muito para o São Paulo na época do Telê. Eu construí essa relação. E o princípio de tudo foi aqui (na Bahia). Seria forma de agradecimento voltar aqui para encerrar. Mas eu não pretendo jogar uma temporada inteira, vai ser um mês ou dois. Tenho muita coisa para fazer".

Aos 36 anos, Daniel Alves ainda pensa em continuar no futebol europeu e não descarta participar de mais uma Copa do Mundo com o Brasil, em 2022, no Qatar. Vale lembrar que ele foi cortado por uma lesão grave às vésperas da Rússia de 2018. Sobre o tema, ele também prefere evitar uma resposta direta.

"Quando você olha muito à frente, esquece um pouco de olhar o agora. As oportunidades que tenho de estar aqui não podem ser distraídas nem com futuro, nem com o ado. É o presente, me reinventar. Eu sou consciente que quando bate uma idade, começa a gerar dúvidas. Muito se fala que tem que renovar (a seleção). Independente da idade que a gente tem, estamos aqui para dar resultado, a partir do momento que não estiver mais dando, tem que ceder a vez para quem estiver dando", analisou.