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

Dudu faz compilado e agradece mensagens de aniversário: 'Sempre juntos'

Dudu em ação com a camisa do Al Duhail pela Liga dos Campeões Asiática  - Simon Holmes/Getty Images
Dudu em ação com a camisa do Al Duhail pela Liga dos Campeões Asiática Imagem: Simon Holmes/Getty Images

Colaboração para o UOL, em São Paulo

07/01/2021 12h50

O atacante Dudu, ex-Palmeiras, usou seu Instagram para agradecer as diversas mensagens de feliz aniversário que recebeu hoje, no dia em que completa 29 anos.

O jogador do Al-Duhail, do Qatar, montou um longo compilado com as principais mensagens recebidas e escreveu um texto para agradecer aos ex-colegas, amigos e familiares.

Entre as mensagens selecionadas por Dudu, palavras de Zé Roberto, Willian, Mayke, dos filhos, da avó e de Paula Caroline, sua namorada, entre outros.

"Fala, pessoal! Hoje, completo 29 anos e não poderia receber um presente melhor do que todas essas homenagens, ainda mais vindo de pessoas que são especiais pra mim: minha família e meus amigos", escreveu o jogador na legenda da publicação.

"Sei que no vídeo ainda faltaram muitos amigos, mas carrego todos vocês no meu coração e no meu pensamento. Fica aqui o meu muito obrigado, do fundo do coração, a todos vocês por cada palavra de carinho. Com certeza, vocês fizeram o meu dia ser ainda melhor. Estamos longe, mas estaremos sempre juntos. Que Deus abençoe cada um de vocês grandemente", continuou.

"E agora quero mandar uma mensagem especial às pessoas que me seguem e que torcem por mim. A minha vida não seria nada sem esse carinho e sem essa força de vocês. Só tenho que agradecer por tudo o que fizeram e seguem fazendo por mim. Podem ter certeza de que vocês são fundamentais na minha vida. Grande abraço e obrigado", finalizou o atacante.

O Al Duhail, time de Dudu, atravessa um bom momento na Q-League, campeonato nacional do Qatar. Após quatro vitórias seguidas, o time assumiu a segunda colocação da competição, com 24 pontos em 12 jogos. O líder é o Al-Sadd, que tem 35 pontos em 13 jogos.

Palmeiras