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

Escalações São Paulo x Botafogo: Tchê Tchê volta; Honda fica no banco

Marcelo Benevenuto, do Botafogo, conduz a bola sob marcação de Pablo, do São Paulo - Vitor Silva/Botafogo
Marcelo Benevenuto, do Botafogo, conduz a bola sob marcação de Pablo, do São Paulo Imagem: Vitor Silva/Botafogo

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

08/12/2020 21h30Atualizada em 09/12/2020 20h45

São Paulo e Botafogo jogam nesta quarta-feira, no Morumbi, às 21h30, pelo Campeonato Brasileiro. O Tricolor paulista já está escalado para enfrentar o adversário carioca no jogo válido pela 18ª rodada do Brasileirão. Tchê Tchê ganhou a vaga de Daniel Alves, suspenso pelo terceiro cartão amarelo. Honda começa no banco. Zagueiro Forster improvisado na lateral esquerda. Lucas Campos novidade no setor ofensivo, primeira vez de titular no Brasileiro.

Escalações

São Paulo: Volpi; Juanfran, Arboleda, Bruno Alves e Reinaldo; Luan, Tchê Tchê, Gabriel Sara e Igor Gomes; Luciano e Brenner. Técnico: Fernando Diniz.

Botafogo: Diego Cavalieri, Marcinho, Marcelo Benevenuto, Kanu e Rafael Forster; Zé Welison, Caio Alexandre e Bruno Nazário; Kalou, Lucas Campos e Pedro Raul. Técnico: Felipe Lucena.

Objetivos distintos

O São Paulo recebe o Botafogo nesta quarta-feira, no Morumbi, em partida válida pela 18ª rodada do Campeonato Brasileiro. Originalmente, o duelo estava marcado para o dia 25/10, mas teve de ter a data alterada por causa do confronto do Tricolor paulista com o Fortaleza, pela Copa do Brasil.

Enquanto a equipe de Fernando Diniz, com 47 pontos, quer a vitória para abrir ainda mais vantagem na liderança, o Alvinegro, que tem apenas 20 pontos e está na penúltima colocação, busca meios para sair da zona de rebaixamento.

Onde assistir:

A partida será transmitida pela Globo e pelo Premiere. Além disso, o Placar UOL acompanha em tempo real.

Estádio e horário:

O duelo ocorre no Morumbi, em São Paulo, sem público devido aos cuidados em meio à pandemia de coronavírus. A partida começa às 21h30.

Suspensos e Liberados

Daniel Alves, do São Paulo, e Victor Luis, do Botafogo, estão fora da partida por estarem suspensos.

Quem está no Departamento Médico

No Alvinegro, o lateral-esquerdo Guilherme Santos se recupera de lesão muscular na coxa esquerda e o goleiro Gatito ainda trata um edema ósseo no joelho direito. Devido ao protocolo, o técnico Eduardo Barroca também permanece fora, após testar positivo para Covid-19.

No São Paulo, há dois jogadores no departamento médico: o zagueiro Walce e o volante Liziero. Ambos estão fora de combate e não entram em campo na noite de hoje.