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

Assine o Futebol Muleke na Twitch e ganhe benefícios exclusivos nas lives!

Siga o UOL Esporte no

Do UOL, em São Paulo

24/05/2021 04h00Atualizada em 08/10/2021 14h52

Agora você pode ajudar ainda mais o Farahoh a fazer as lives do Futebol Muleke na Twitch! Basta o canal para desbloquear benefícios exclusivos, ganhar mais pontos do canal e ainda entrar no nosso grupo de WhatsApp. Veja no vídeo acima como funciona.

Os s do canal do Futebol Muleke podem participar das lives de um jeito exclusivo: resgatando áudios de colunistas e comentaristas do UOL Esporte. Pode ser o Arnaldo Ribeiro falando "favoritaço", o Mauro Cézar Pereira disparando um "pífio e patético" e o Milton Neves acusando o Farahoh de se beneficiar do apito amigo.

Quanto mais tempo você ficar como do Futebol Muleke na Twitch, melhor será o status da sua insígnia. Você pode ser peladeiro, astro da várzea, astro da base, astro do Estadual, astro do Brasileirão, astro da Libertadores, astro da Champions, astro do Mundial, astro da Copa e Bola de Ouro. Quem chegar ao nível máximo ganha o status de VIP do canal!

Além disso, s ganham Futpoints e Firulas, os pontos do canal, três vezes mais rápido! É possível trocá-los por um x1 com o Farahoh, para fazê-lo reagir a um vídeo ou música ou para que ele divulgue o seu canal.

Você pode o Futebol Muleke por R$ 7,90 por mês. Mas se você já é da Amazon Prime você pode fazer isso de graça! Para isso, é preciso:

As lives do Futebol Muleke têm muita resenha sobre futebol e Cartola FC, além de games como Fifa, FM e Fall Guys. Também é possível acompanhá-las no perfil do UOL Esporte no TikTok. Veja no vídeo abaixo como fazer:

Siga o UOL Esporte no

O endereço do canal do Futebol Muleke na Twitch é www.twitch.tv/futebolmuleke. No TikTok, você pode ver as lives no https://www.tiktok.com/@uolesporte.