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

Saque e Voleio

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

'Federer x Fish' é imperdível, mas Federer nada tem a ver com isso

Mardy Fish no documentário "Untold: Federer x Fish" - Reprodução / Netflix
Mardy Fish no documentário "Untold: Federer x Fish" Imagem: Reprodução / Netflix

Colunista do UOL

22/09/2021 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

O debate sobre saúde mental entre atletas de alto nível nunca foi tão recorrente - e importante - quanto agora. Casos recentes como os de Naomi Osaka e Emma Raducanu no tênis e, claro, Simone Biles na ginástica jogaram potentes holofotes sobre o tema. Não se trata, porém, de um obstáculo recente no mundo esportivo, e é isso que aborda "Untold: Federer x Fish", documentário disponibilizado recentemente pela Netflix.

Antes de ir mais longe, é preciso esclarecer: Roger Federer quase nada tem a ver com a história. Sua "participação" tem a ver com a crise de ansiedade sentida pelo americano Mardy Fish, então número 25 do mundo, antes de um duelo pelas oitavas de final do US Open de 2012. E só. O doc sequer traz um depoimento de Federer. É bem provável que seu nome tenha parado no título da versão em português por causa de um desses malabarismos de SEO buscando cliques e destaques. O nome original do filme é "Untold: Breaking Point", que faz menção ao "ponto de quebra" de Fish.

O grande mérito da produção está em conseguir mostrar, em 79 minutos, os momentos mais importantes da carreira de Mardy Fish e, em especial, aqueles que levaram o americano a ter taquicardias provocadas muito mais por crises de ansiedade e ataques de pânico do que por problemas cardíacos de origem física. É possível observar como um garoto criado para ser atleta e ensinado a não demonstrar fraquezas vai sofrer consequências dessa orientação e do peso de ser um tenista de ponta mais de 15 anos depois.

O documentário tem a seu favor também riquíssimos depoimentos de Andy Roddick, que esteve ligado direta e indiretamente à carreira de Fish. Desde os tempos em que moravam e treinavam juntos até o momento em que Roddick, por ser número 1 dos EUA por tanto tempo, de certa forma aliviava o peso sobre os ombros de Fish. E tudo muda quando Mardy, após uma excelente temporada em 2012, assume o posto de americano mais bem ranqueado.

Fish ficou quase três anos sem competir e demorou a entender que seus problemas de saúde mental não iriam embora. E contou sua história pela primeira vez em 2015, às vésperas do US Open, justamente porque não teve uma referência enquanto lidava com seus dilemas. Não havia exemplos de atletas que lutaram com problemas semelhantes e voltaram a competir no alto nível. E se há uma mensagem crucial que "Untold: Breaking Point" deixa, é que falar sobre sua experiência fez Fish se sentir melhor. Mostrar seus medos e fraquezas foram parte essencial de seu retorno. Por isso, hoje mais do que nunca, o documentário é imperdível.

Coisas que eu acho que acho:

- Há várias opções interessantes à disposição dos fãs de tênis atualmente. O documentário de Naomi Osaka foi lançado há pouco. O filme francês "Cinquième Set" ("O Quinto Set" em português) também chegou à Netflix recentemente. Em breve, farei avaliações de ambos por aqui.

- De novo: Agradeço de coração às mensagens que recebi dos apoiadores do blog na última semana. Foram dias difíceis, com um susto grande, mas tudo vai votando ao normal. Aos poucos, retomo a programação normal.