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

Em ação promocional de filme, comentarista da ESPN leva cão para estúdio

Mário Marra, comentarista da ESPN, leva cachorro para estúdio - Divulgação/ESPN
Mário Marra, comentarista da ESPN, leva cachorro para estúdio Imagem: Divulgação/ESPN

Colaboração para o UOL, em São Paulo

20/02/2020 11h11

O Sportscenter desta quinta-feira contou com um convidado ilustre, Otto, o cachorro do comentarista Mário Marra. Em ação promocional do filme O Chamado da Floresta, o cão eou pelo estúdio, fez alguns truques e encantou os apresentadores Marcela Rafael e Luciano Amaral.

A publicidade começou logo nos primeiros minutos do programa da ESPN, com os presentes se perguntando onde estaria Marra, que não apareceu para trabalhar. Na sequência, Luciano Amaral ligou, ao vivo, para o colega, que afirmou estar de folga. Após negativa dos apresentadores, o jornalista, que disse estar eando com o cachorro, se comprometeu a ir ao estúdio.

"Mas, antes de começar, claro que a gente vai debater tudo isso, deixa eu dar bom dia para os nossos comentaristas... Tem algo de estranho aí!", disse Luciano Amaral ao notar a ausência de Mário Marra.

"Bom dia, Prates", cumprimentou Marcela Rafael.

"Eu estou aqui. O programa te um horário de início, todos nós sabemos, obviamente... Não sei o que aconteceu. Bom dia a todos", falou Raphael Prates.

"Fomos surpreendidos. Cadê o Mário Marra?", perguntou a apresentadora.

"Vou pedir desculpas, televisão ao vivo é isso. Acontece, às vezes..." falou Luciano que, na sequência, ligou para o colega.

"Tô de folga hoje. Estou eando com o Otto", explicou Marra.

"Marra, vem para cá", pediu Amaral.

"Vem com o Otto mesmo", completou Marcela.

Mário Marra - Divulgação/ESPN - Divulgação/ESPN
Imagem: Divulgação/ESPN

Pouco depois, após o primeiro intervalo do programa, Mário Marra invadiu o estúdio ao lado de Otto. Após mostrar seu local de trabalho para o cão, o comentarista mandou o cachorro sentar e pegar um petisco no ar, além de brincar de 'Cadê o papai?'. Além disso, o jornalista compartilhou algumas de suas aventuras ao lado de Otto, que ganhou muitos carinhos dos presentes.

Por fim, ao se despedir do cão, Marcela Rafael explicou o motivo de Marra ter trazido seu companheiro para o estúdio:

"Por que a gente trouxe o Otto aqui? Porque a gente quer falar sobre a adaptação do clássico norte-americano O Chamado da Floresta", disse a apresentadora ao chamar o trailer do filme sobre o cachorro Buck, que estreia nesta quinta-feira.

A presença de Otto no Sportscenter de hoje também encantou os internautas. Confira: