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

Leonardo Sakamoto

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

O que Lula, Tarcísio e Rodrigo Garcia têm em comum? A busca pelo voto útil

Colunista do UOL

27/09/2022 19h55

Receba os novos posts desta coluna no seu e-mail

Email inválido

Enquanto o PT pede voto útil visando a uma vitória de Lula sobre Bolsonaro já no próximo domingo (2), em São Paulo a mesma tática está sendo usada pelo antipetismo para empurrar quem diz ter mais chance de derrotar Fernando Haddad no segundo turno.

De acordo com a pesquisa Ipec, divulgada nesta terça (27), por enquanto quem está melhor posicionado para isso é o governador Rodrigo Garcia (PSDB), tecnicamente empatado com Haddad na simulação de segundo turno: ele com 38% e o petista, 41%. A margem de erro é de dois pontos. Enquanto isso, o ex-prefeito venceria Tarcísio de Freitas por 44% a 37%.

Mas Tarcísio está à frente de Garcia no primeiro turno, tendo oscilado dois pontos para cima, chegando a 24%, enquanto o tucano ganhou um ponto, atingindo 19%. Haddad manteve os mesmos 34% do levantamento de seis dias atrás.

Na pesquisa Quaest, divulgada ontem, Garcia venceria Haddad por 45% a 36% no segundo turno, enquanto Haddad está numericamente à frente de Tarcísio, mas tecnicamente empatado, com 42% a 39%.

Postagens defendendo que Garcia e Tarcísio contam com mais capacidade de "derrotar o PT" no segundo turno têm sido mais frequentes desde o final de semana - o que, na prática, são um chamado ao voto útil antipetista.

A disputa entre o governador e o ex-ministro deve ser acirrada até domingo, com Tarcísio partindo de uma vantagem acima da margem de erro.

Enquanto isso, na disputa nacional...

No cenário nacional, a pesquisa Ipec mostrou que Lula oscilou de 47% para 48% enquanto Ciro Gomes foi de 7% para 6% e Simone Tebet manteve 5% entre os levantamentos do Ipec divulgados em 19 e 26 de setembro.

Por mais que o ex-governador do Ceará ataque o voto útil, podemos já estar vendo uma migração de parte de seus votos em direção a Lula. O discurso lulista de que é preciso acabar com a eleição no primeiro turno para impedir que Bolsonaro esfacele o país em outubro ou questione o resultado da eleição, ao que tudo indica, tem mais potencial que o discurso cirista de que tal ação representa um "fascismo de esquerda".

Ironicamente, Ciro usou a mesma estratégia em 2018, quando tentou convencer os eleitores de Fernando Haddad de que ele era mais capaz de vencer Bolsonaro no segundo turno.

A pesquisa Ipec apontou que para 90% dos eleitores de Lula e 87% de Bolsonaro a decisão do voto é definitiva. Os números caem para 48% entre os de Ciro e 45% junto aos de Simone - o que dá esperança a lulistas.

Até agora, contudo, o Ipec mostra oscilação apenas de Ciro Gomes, não de Simone Tebet. Há uma possibilidade do voto da "terceira via" se concretizar de fato em Tebet, garantindo que ela não desidrate nos próximos dias e termine à frente de Ciro.

Dessa forma, ele pode acabar ocupando o lugar de Geraldo Alckmin, hoje candidato a vice na chapa de Lula. O ex-governador de São Paulo contava com 10% das intenções de votos no Datafolha de 28 de setembro de 2018. Mas desidratou, muito por conta da campanha de voto útil, e terminou o primeiro turno com 4,76%, em quarto lugar.