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

STU fecha maratona de eventos de skate em Porto Alegre com cinco finais

O skatista catarinense Kalani Konig, de 15 anos, revelação do STU em Porto Alegre - Pablo Vaz/ STU Divulgacão
O skatista catarinense Kalani Konig, de 15 anos, revelação do STU em Porto Alegre Imagem: Pablo Vaz/ STU Divulgacão

Colaboração para o UOL

19/03/2023 20h10

A cidade de Porto Alegre se tornou a capital do skate brasileiro por uma semana com o Skate Total Urbe, o STU National, segunda etapa do Campeonato Brasileiro com uma maratona de mais de uma semana de eventos finalizada neste domingo (19), com cinco finais em oito horas de competições.

Ao sediar o festival, a capital gaúcha recebeu 110 skatistas de todo o Brasil, que participaram de eventos oficiais e não oficiais espalhados por diversos locais da cidade em praças, viadutos, bancos de praça com festas, shows ao vivo, e provas de best trick (melhor manobra) em obstáculos inusitados na rua em uma grande confraternização do skate nacional.

Realizada na nova pista de skate da Orla do Guaíba, considerada uma das maiores da América Latina, o público compareceu em peso ao evento e lotou as arquibancadas debaixo de um sol de 30°C, apesar das transmissões ao vivo em TV aberta, a cabo e redes sociais.

A estrela maior do festival a medalhista prateada e campeão mundial Rayssa Leal, de 15 anos, ficou com a prata em uma final acirrada do street feminino vencida pela paulista Gabriela Mazetto, a Gabi, de 25 anos, ambas com lesões nos braços, Rayssa no punho e Gabi no cotovelo.

Rayssa está concorrendo ao Prêmio Laureus, de melhor esportista de ação do mundo deste ano, junto com o surfista campeão mundial Filipe Toledo.

No street masculino, o jovem gaúcho Sebastian Simonetto, de 17 anos, único a correr de capacete devido sua idade, surpreendeu e fechou com ouro na frente de Eduardo Neves e Carlos Ribeiro, onde além de fazer a melhor linha conseguiu mostrou a melhor manobra na fase de "bomb trick".

No paraskate, com skatistas PCD, Felipe Nunes foi o campeão seguido por David Soares e Vini Sardi em terceiro lugar, na categoria mais inclusiva da competição.

No park feminino, a jovem gaúcha Sofia Godoy, de 14 anos, também foi revelação e superou as olímpicas catarinenses Isadora Pacheco e Yndiara Asp.

O ponto alto desta etapa gaúcha se encerrou com as finais do park masculino, com direito a pôr do sol no final da tarde deste domingo, onde mais um skatista da nova geração foi para o topo do pódio: o catarinense Kalani Konig, de 15 anos.

Kalani conseguiu impor respeito com uma volta perfeita ao atingir a maior nota do final de semana, com 90 pontos levar o ouro e superar o vice-campeão mundial Augusto Akio, o Japinha (prata), e o medalhista olímpico de prata, o catarinense Pedro Barros ficou em terceiro lugar.

O evento serviu de aquecimento para grandes eventos internacionais que estão no radar como a primeira etapa da Street League, em 29 de abril em Chicago, e o Mundial da World Skate, dias 27 e 28 de maio em San Juan, na Argentina, válido como pontuação para a corrida olímpica de Paris 2024.