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

Desempenho de Covas fica abaixo dos votos brancos, nulos e abstenções

José Dacau

Do UOL, em São Paulo

29/11/2020 23h49Atualizada em 29/11/2020 23h49

O candidato Bruno Covas (PSDB) se reelegeu para a Prefeitura de São Paulo, mas perdeu em números para os votos brancos e nulos somados às abstenções. Juntos esses três fatores totalizaram cerca de 3,6 milhões (40,61%) de eleitores que não quiseram escolher candidato a prefeito na cidade, no segundo turno das eleições municipais realizado neste domingo (29).

Segundo o TSE (Tribunal Superior Eleitoral), a cidade de São Paulo tem cerca de 9 milhões de eleitores — 6.217.508 deles compareceram às urnas neste segundo turno.

O número de abstenções registrado foi de: 2.769.179, o maior índice desde 1996. Votos brancos: 273.216 (4,39%). Votos nulos: 607.062 (9,76%). Juntos somaram: 3.649.457.

Nas urnas, Covas conseguiu 3.169.121 (59,38%) dos votos válidos — 480.336 a menos que o somatório dos votos brancos e nulos, mais as abstenções.

O adversário do tucano neste segundo turno, Guilherme Boulos (PSOL) conquistou os votos de 2.168.109 eleitores (40,62%).

Pandemia

Na eleição para prefeito de São Paulo, em 2016, não houve segundo turno —o então candidato João Doria (PSDB) venceu na primeira rodada.

Em 2012, Fernando Haddad (PT) foi eleito prefeito no segundo turno, com 3,4 milhões (55,57%) dos votos válidos. Naquela época, o número de votos brancos e nulos somados com as abstenções chegou a 2,5 milhões.

O total de abstenções em 2012 foi de 1.722.880 (19,99%). O segundo turno de 2020 das eleições para prefeito de São Paulo registrou cerca de 1 milhão a mais de eleitores que deixaram de votar.

O motivo para esse crescimento seria o medo de contágio pelo novo coronavírus na hora da votação. Principalmente entre os eleitores do chamado grupo de risco — idosos, gestantes e portadores de comorbidades, tais como diabetes, obesidade e hipertensão arterial.

O número de votos brancos e nulos, na comparação de 2020 com 2012 não mudou muito. Na eleição que teve a vitória de Haddad foram computados 299.224 (4,34%) votos brancos e 500.578 (7,26%) nulos.