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

Covas vence em todas as regiões; Boulos chega perto no Centro e no Capão

Candidatos do PSDB e PSOL vão ao 2º turno na disputa pela cadeira da Prefeitura de São Paulo - Arte/UOL
Candidatos do PSDB e PSOL vão ao 2º turno na disputa pela cadeira da Prefeitura de São Paulo Imagem: Arte/UOL

Vitor Pamplona

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

16/11/2020 07h08

O prefeito Bruno Covas (PSDB) foi o mais votado em todas as 58 zonas eleitorais de São Paulo no 1º turno da eleição municipal. O tucano teve 32,85% do total de votos válidos e vai disputar o segundo turno contra Guilherme Boulos (PSOL), que conquistou a vaga ao alcançar 20,24%.

No mapa eleitoral da capital paulista, Covas se saiu melhor na 5ª zona eleitoral, onde conquistou 44,5% dos votos, mais que o dobro do percentual de Boulos. A região engloba bairros ricos como Jardim Paulista, Jardim América, Vila Olímpia e Itaim Bibi. O prefeito também venceu com margem confortável, superior a 15 pontos, em outros bairros do chamado centro expandido, como Vila Mariana e Mooca.

Mas na 1ª zona eleitoral, onde fica o Centro propriamente dito e bairros como Sé e Liberdade, além de parte de Higienópolis, Consolação e Bela Vista, a disputa foi mais acirrada. Boulos teve 29,6% dos votos, somente 3,7 pontos percentuais abaixo do tucano Covas.

A diferença foi ainda menor na 20ª zona eleitoral, na zona sul da cidade, em bairros como Jardim Amália, Valo Velho e na Cohab Adventista. Nessa área, Boulos teve só 2,5 pontos a menos do que Covas, que marcou 25,4%. A região pertence ao distrito do Capão Redondo, onde fica também a 373ª zona eleitoral —nela a diferença foi de 6 pontos a favor de Covas, a mesma registrada em Pinheiros, por exemplo.

Confira o mapa da votação para prefeito na cidade de São Paulo

PSDB vence no extremo sul da cidade

Na comparação com a última eleição para prefeito, este ano o PSDB conseguiu vencer no extremo sul da cidade, onde costumava ser derrotado pelo PT e em 2016 perdeu para Marta Suplicy, então no MDB. As zonas de Parelheiros e do Grajaú foram as únicas em que os tucanos foram superados quatro anos atrás, quando elegeram João Doria no 1º turno.

Dessa vez, essas foram as únicas zonas eleitorais da capital em que o PT superou o PSOL de Boulos, alcançando o segundo lugar com votação superior a 20%. Isso revela que Jilmar Tatto, que teve apenas 8,65% dos votos na cidade, conseguiu recuperar para o PT parte do eleitorado da região.