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

Surfe 360°

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Filipinho:"Foco é levantar a taça; se não der certo, ano que vem tem mais"

Filipe Toledo, durante o WSL Finals de 2021 - Tony Heff/World Surf League
Filipe Toledo, durante o WSL Finals de 2021 Imagem: Tony Heff/World Surf League

Colunista do UOL

06/09/2022 17h48

A contagem que era em dias, agora é em horas.

Quinta-feira, a World Surf League abre oficialmente a janela de espera para o WSL Finals, último e especial evento, que vai consagrar os novos campeões mundiais masculino e feminino de surfe.

O Brasil tem mais uma vez ótimas chances, com Tatiana Weston-Webb, Italo Ferreira e Filipe Toledo.

Nesta terça, os 10 surfistas classificados para a festa participaram da coletiva oficial pré-campeonato, em um pier... ali pertinho das ondas.

Receberam as lycras que vão usar, deram entrevistas 'pra geral' e esquentaram ainda mais o clima de decisão.

Para alcançar o hexa para o Brasil, Filipe e Italo terão pela frente os australianos Ethan Ewing e Jack Robinson, além do japonês Kanoa Igarashi.

IF cai na água logo na bateria de estreia diante de Kanoa, numa reedição da final olímpica do ano ado, vencida pelo brasileiro na praia de Tsurigazaki, no Japão.

"Gosto de não ser o favorito. Já estive na mesma posição antes, em 2019. Gosto de ficar atrás dos adversários e estou muito anisoso pra começar", disse Italo na Conference Press.

Número 1 do ranking, Filipinho só entra no mar na final do torneio, disputada em melhor de 3 duelos.

No feminino, Tati, vice-campeã em 2021, irá enfrentar a australiana Stephanie Gilmore, a costa-riquenha Brisa Hennessy, a sa Johanne Defay e a havaiana Carissa Moore. Ela estreia na 2ª rodada, diante da vencedora entre Stephanie e Brisa.

"Local" de Trestles, já que mora há vários anos em San Clemente, na Califórnia, Filipe Toledo é considerado o principal favorito ao título.

Mas mantém o foco e aproveita para curtir os dias perto da família.

"É uma benção estar aqui de novo, fazendo o que amo. Tô amarradão, tranquilo. É uma oportunidade muito boa de conquistar o primeiro título. Tem tudo pra dar certo, se não der certo ano que vem tem mais. Mas o foco é levantar essa taça aí esse ano... e deixar com 'nóis' mais uma vez. Não vejo a hora", disse ao perfil da WSL.

O período de espera para as melhores condições vai de 8 a 16 deste mês. Vale lembrar que a todas as baterias da competição serão realizadas em um mesmo dia.

No ano ado, na estreia deste formato, Gabriel Medina venceu Filipinho por 2 a 0 e levantou o tricampeonato.

Entre as mulheres, Carissa Moore conquistou o penta, com virada por 2 a 1 sobre Tatiana Weston-Webb.

Todo mundo no modo 'contagem regressiva'.

E a corrente verde e amarela ganha cada dia mais peso. O surfista e comentarista Alejo Muniz acredita numa final brasileira: "O Italo vai ter que dar um gás bem grande para ar pelo Filipe, porque o Filipe vem surfando muito há muito tempo, mas esse ano está muito encaixado... e pra mim ele é o melhor surfista daquela onda".

Gabriel Medina, em entrevista no Esporte Espetacular, reforçou a aposta em Filipinho: "Estou torcendo para uma final brasileira, mas o Filipe é o grande favorito".

Vem logo, WSL Finals!!!

por @thiago_blum / @surf360_