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

Podcast

Maratona

Especialistas e corredores falam sobre temas recorrentes para quem frequenta as pistas de corrida.


Maratona

Maratona #6: Conheça as lesões mais comuns para o corredor e como evitá-las

Do UOL, em São Paulo

21/11/2019 04h01

Quais são as lesões mais comuns para o corredor? Em seu sexto episódio, publicado nesta quinta-feira (21), o podcast semanal Maratona, de VivaBem, aborda um dos maiores companheiros do corredor (amador ou profissional): as dores.

Mas até que ponto uma dor pode significar uma lesão? Para esclarecer isso, o fisioterapeuta Cláudio Mesquita, colunista de VivaBem, fala sobre os tipos de lesão que mais acometem os corredores, além de dar dicas sobre como evitar certas dores dos treinos. "Os iniciantes precisam conhecer melhor o corpo para correr", afirma.

Já Cêsar Cândido dos Santos, editor de VivaBem e que já fez as maratonas de Porto Alegre, Buenos Aires e São Paulo, fala sobre a escolha do melhor tênis para treinos e provas. "O atleta precisa se sentir confortável com o tênis, independente da sua pisada. Algumas marcas já têm lançado modelos 'universais', que servem para qualquer tipo de corredor", diz.

A primeira temporada do programa, com oito episódios, é uma jornada pelo ciclo de treinamentos da apresentadora, a jornalista Tatiana Schibuola, que se prepara para correr a sua terceira maratona. A cada novo episódio, ela divide o estúdio com especialistas e corredores de carteirinha para discutir o que há de mais importante pra quem frequenta as pistas de corrida: alimentação, suplementação, lesões, determinação, preparação... Toda quinta, um novo episódio.

Podcasts são programas que podem ser ouvidos a qualquer hora e lugar --no computador, smartphone ou em outro aparelho com conexão à internet. Os podcasts do UOL estão todos disponíveis em uol.com.br/podcasts. Para ouvir estes e outros programas, você pode baixar aplicativos como o Spotify e o Apple Podcasts, por exemplo, buscar o nome do podcast e dar play no episódio desejado.

Maratona