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

Carioca - 2021

Record atravessa SBT e tenta acordo para transmissão do Carioca 2021

Flamengo é campeão do Campeonato Carioca 2020 - Thiago Ribeiro/AGIF
Flamengo é campeão do Campeonato Carioca 2020 Imagem: Thiago Ribeiro/AGIF

Gabriel Vaquer, Leo Burlá e Rodrigo Mattos

Do UOL, no Rio de Janeiro

09/02/2021 16h53

A Record aproveitou a brecha após a rescisão contratual da Globo e tenta encaminhar um acordo para transmitir as edições de 2021 e 2022 do Campeonato Carioca.

Os clubes irão votar o contrato na próxima quinta-feira (11). Há consenso para o sinal verde para a proposta. Restam pendências, mas uma reviravolta é considerada pouco provável. Além de Record e SBT, a Globo também acompanhava o caso atentamente.

Pelo acordo, a Record pagará um montante igual para cada um dos quatro grandes clubes. Para selar o negócio, Botafogo, Fluminense e Vasco exigiram que os valores pagos fossem os mesmos que serão reados ao Flamengo.

Uma outra exigência anterior de alguns é que o dinheiro não e pelas mãos da Federação de Futebol do Estado do Rio de Janeiro (Ferj), sendo reado diretamente para as agremiações. Em reunião realizada hoje (10), no entanto, não houve oposição para que a entidade siga repartindo o bolo.

A Record ainda estuda cobertura nacional para os jogos, que devem ter transmissão ao vivo aos sábados. As finais, no entanto, terão transmissão em rede garantida. O sucesso comercial do SBT com a exibição da Libertadores animou o canal, que decidiu investir.

PPV no Carioca

O executivo Marcelo Campos Pinto, responsável por vender os direitos de transmissão e formular o novo regulamento do Campeonato Carioca em 2021, está montando a estrutura do pay-per-view da competição regional. O modelo é parecido com os recém-lançados serviços da Conmebol e da Copa do Nordeste nas operadoras pagas.

Profissionais que trabalharam no Fox Sports e não tiveram seus contratos renovados pela Disney no fim de 2020 estão sendo chamados para tocar o projeto.

O UOL Esporte apurou que, além dos jogos no modelo "pague para ver", o projeto lançará um canal no YouTube e uma página no Facebook para repercutir os conteúdos produzidos. Entre eles está um programa pré e pós jogo que será exibido em todas as partidas exibidas. O comando desse projeto será da jornalista Lívia Nepomuceno, que trabalhou na Fox por seis anos.