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

Balbuena é fã de M 22 e assume a função de DJ da seleção paraguaia

Fabián Balbuena é o "DJ do vestiário" da seleção do Paraguai e era do West Ham - Reprodução
Fabián Balbuena é o "DJ do vestiário" da seleção do Paraguai e era do West Ham Imagem: Reprodução

Marinho Saldanha

Do UOL, em Brasília (DF)

22/06/2021 04h00

"Peguei minhas coisas, fui embora, não queria mais voltar, eu nunca quis presenciar o fim": certamente foi cantarolando este trecho de "Tarde de Outubro", do M 22, que Balbuena partiu do Corinthians em 2018. O zagueiro rock and roll do Paraguai contesta a versão de que jogadores de futebol preferem apenas músicas da moda. Com personalidade, ele assume o posto de "DJ do vestiário". Seja no West Ham, da Inglaterra, ou na seleção, tem riffs pesados para todo mundo.

E por que exatamente o M 22 pautaria a despedida do defensor de 29 anos? Pois, da agem pelo Brasil, Balbuena não levou apenas a iração da torcida do Corinthians e o bom desempenho, que valorizou sua cotação no mercado de chegar à Premier League. Ele também virou fã empolgado do grupo chefiado por Badauí, segundo apurou o UOL Esporte.

E cabia a ele, no West Ham, clube do qual se despede ao fim do contrato, organizar a música no vestiário, junto com outros colegas. O mesmo acontece na seleção paraguaia, ainda que no time nacional exista concorrência maior.

"Somos cinco ou seis encarregados de por a música. No meu caso eu coloco rock, um pouco de rock leve para dar ritmo ao treino. Depende da situação, se a gente está na academia, coloco um pouco mais de ritmo. Um System of a Dawn, um AC/DC, Guns N' Roses", contou em entrevista ao Betway. "Se estamos na hora do tereré (bebida), um Red Hot Chilli Peppers, Oasis, um Blur", completou.

Balbuena não tem sido titular da seleção. Atualmente, dois jogadores que estão em atividade no Brasil formam a zaga: Junior Alonso, do Atlético-MG, é parceiro de Gustavo Gómez, ídolo do Palmeiras, compondo um dos setores defensivos mais sólidos do continente.

Na última temporada, Balbuena disputou 18 partidas e marcou um gol pelo West Ham. Ele deixará o clube ao fim do vínculo e tem negociação avançada para se transferir ao Betis, da Espanha. O retorno ao Brasil até foi especulado, mas não deve acontecer. Uma situação que chama outra trilha do M 22 (de "Não Sei Viver Sem Ter Você"): "Chegou a hora de recomeçar, acreditar que pode ser melhor assim, fingir feliz e te deixar para depois".