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

Brasileirão - 2019

Fla tem 9 em seleção do Brasileiro da CBF; Bruno Henrique é eleito craque

Thiago Ribeiro/AGIF
Imagem: Thiago Ribeiro/AGIF

Leo Burlá e Pedro Ivo Almeida

Do UOL, no Rio de Janeiro e em São Paulo

09/12/2019 00h01

Campeão, recordista de pontuação (90) e agora dono das melhores marcas dos pontos corridos, o Flamengo será também o grande protagonista da festa oficial de encerramento do Campeonato Brasileiro 2019, nesta segunda-feira (9), no Armazém 2 do Píer Mauá, na Zona Portuária do Rio de Janeiro. No evento organizado pela CBF, o time carioca dominará as premiações individuais da CBF e a seleção do torneio - serão nove nomes do rubro-negro da Gávea na lista. O Athletico Paranaense terá os outros dois escolhidos.

O UOL Esporte apurou que o "time ideal" - eleito por jornalistas, capitães dos clubes e treinadores da competição - terá Santos; Rafinha, Rodrigo Caio, Pablo Marí e Filipe Luis; Bruno Guimarães, Gerson e Everton Ribeiro; Arrascaeta, Bruno Henrique e Gabigol.

Bruno Henrique receberá ainda o prêmio de craque da competição. Jorge Jesus venceu como melhor técnico. Michael, do Goiás, ficará com o troféu de revelação após superar o vascaíno Talles Magno em votação apertada. Arrascaeta levará pra casa a homenagem pelo gol mais bonito - marcado de bicicleta contra o Ceará, na Arena Castelão.

Representante do Flamengo na categoria "Craque da Galera", Everton Ribeiro desponta como grande favorito em votação realizada na internet.

Assista aos gols da da 38ª rodada do Brasileirão

Gols UOL Esporte

Mais de mil presentes e destaque para o feminino

Realizada nos últimos anos na sede da CBF, a premiação cresceu para 2019. Especialmente pelo protagonismo do Flamengo, que levará todo o seu elenco ao evento. Com uma estrutura maior, a festa contará com mais de mil pessoas, entre jornalistas, atletas, figuras do mundo da bola e convidados.

Outra novidade na edição deste ano será o destaque para o futebol feminino. De acordo com a confederação, as duas competições terão o mesmo espaço na festa. A seleção do Brasileiro feminino será dominada pelas campeãs do Ferroviária e por atletas do Corinthians, vice. Santos e Internacional terão uma jogadora cada, completando o time ideal.

A "festa de arromba" prometida pela confederação brasileira terá ainda os shows do sambista Dudu Nobre e do grupo de rock Skank.

"O Prêmio Brasileirão celebra de maneira brilhante a temporada de competições no País do Futebol. Vamos festejar os melhores de 2019 no feminino e no masculino, homenageando quem fez a festa do torcedor brasileiro. Estamos levando o evento a um novo patamar e receberemos os convidados e a imprensa em um ambiente fantástico", comentou o presidente da CBF, Rogério Caboclo.