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

Crivella tem a menor votação da história do Rio em um 2º turno

O atual prefeito, Marcelo Crivella, do Republicanos, vota na Escola Municipal Sérgio Buarque de Holanda, na Barra da Tijuca, no Rio de Janeiro - ERBS JR./FRAMEPHOTO/ESTADÃO CONTEÚDO
O atual prefeito, Marcelo Crivella, do Republicanos, vota na Escola Municipal Sérgio Buarque de Holanda, na Barra da Tijuca, no Rio de Janeiro Imagem: ERBS JR./FRAMEPHOTO/ESTADÃO CONTEÚDO

Igor Mello

Do UOL, no Rio

29/11/2020 20h56

A confirmação da vitória de Eduardo Paes (DEM) não é a única má notícia para Marcelo Crivella (Republicanos). Primeiro prefeito do Rio a não conseguir se reeleger desde 2000, ele também termina a disputa com a menor votação na história da cidade em um 2º turno.

Até então, o pior desempenho de um candidato no 2º turno na capital fluminense havia sido de Sérgio Cabral, que teve a preferência de 1.055.993 eleitores em 1996, quando foi derrotado. Crivella recebeu 913.700 votos.

A grande rejeição a Crivella —cuja gestão é desaprovada por 72% dos cariocas, segundo pesquisa do Ibope a cinco dias da eleição— e a abstenção recorde ajudam a explicar o desempenho do prefeito. De acordo com dados do TSE (Tribunal Superior Eleitoral), 1.719.901 eleitores (35,45% das pessoas aptas a votar) não foram às urnas neste domingo (29).

Paes obteve 64,07% dos votos válidos (1.629.319 votos), contra 35,89% de Crivella (913.700)—diferença superior a 715 mil votos. Votos brancos somaram 5,01% e nulos, 13,72%. O democrata venceu em todas as zonas eleitorais da capital.

O Rio tem eleições com modelo de dois turnos desde 1992. Desde 2000 —primeira eleição municipal com a possibilidade de reeleição—, um prefeito no cargo não era derrotado. Assim como ocorre agora, naquela ocasião Luiz Paulo Conde (MDB), então prefeito da cidade, foi derrotado pelo antecessor, Cesar Maia (DEM).

Durante todo o 2º turno, os institutos de pesquisa já desenhavam uma derrota acachapante de Crivella, com Paes chegando próximo da casa dos 70% das intenções de voto. Diante do cenário desfavorável, o atual prefeito adotou uma estratégia de ataques bastante agressivos contra Paes, na tentativa de desconstruí-lo.

Em seus programas eleitorais e nos dois debates na TV aberta —realizados pela Band, em 19 de novembro, e pela Rede Globo, nesta sexta (27)—, Crivella ou a acusar Paes de corrupção e a trazer para o centro da campanha denúncias contra o ex-prefeito e seus aliados.

"Eduardo Paes vai ser preso, e digo isso com o coração partido. E vai porque cometeu os mesmos erros de Cabral e Pezão. Ele vai ser preso", afirmou Crivella no debate da TV Globo.

Crivella atacou Paes também em temas morais, inclusive com fake news. Nesta semana, sua campanha distribuiu panfletos afirmando que Paes havia se aliado ao PSOL —o que não é verdade— e que apoiaria a distribuição de "kit gay nas escolas".

O kit gay é uma notícia falsa criada em 2011, ao distorcer o que seria a cartilha Escola Sem Homofobia. O material não tinha como público-alvo estudantes e nunca chegou a ser implementado pelo Ministério da Educação.

Em um vídeo gravado com o deputado federal bolsonarista Otoni de Paula (PSC-RJ), Crivella fez referência sem qualquer prova a uma suposta aliança entre Paes e o PSOL. Ele afirmou que, se o adversário ganhasse a eleição, haveria "pedofilia nas escolas".

Por conta dessas manifestações, a Procuradoria Regional Eleitoral denunciou Crivella e sua vice, Andréa Firmo (Republicanos), por difamação eleitoral e propaganda falsa em campanha.