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

Teletubbies contra covid-19? No PR, Novo usa 'cabeças laranjas' em campanha

Ação será intensificada na reta final das eleições municipais em Curitiba, e será copiada por outros municípios - Novo/Divulgação
Ação será intensificada na reta final das eleições municipais em Curitiba, e será copiada por outros municípios Imagem: Novo/Divulgação

Isadora Rupp

Colaboração para o UOL, em Curitiba

28/10/2020 15h55

Quem pegou transporte público ou circulou pelo centro de Curitiba nos últimos dias se deparou com pessoas com cabeças laranjas circulando pela cidade. Sentadas nos terminais de ônibus ou andando pela rua XV de Novembro, elas não interagiam com ninguém. Logo pipocaram postagens nas redes sociais perguntando: "o que está rolando na cidade com várias pessoas vestidas assim?", ou "que raios de cabeças laranjas são essas circulando por Curitiba?". Há quem tenha apostado que tinham chegado à capital paranaense os "Teletubbies contra a covid-19".

Depois de mais de uma semana de mistério e impacto orgânico de pelo menos 100 mil pessoas nas redes sociais e vários pedidos de selfie, a identidade das cabeças foi revelada: integram uma ação de marketing do Novo, na chapa formada pelo candidato João Guilherme e da vice Geovana de Conti.

"Desde o início da campanha a gente queria fazer algo diferente para poder se destacar. Não temos muito dinheiro, porque não usamos o Fundo Eleitoral, e temos pouco tempo de TV. E aí atrelamos o inusitado com a nossa mensagem de uma política nova, relacionada à nossa candidatura", diz João Guilherme, que é médico e concorre pela segunda vez — a primeira foi como vice nas eleições municipais em 2016, na chapa do deputado federal Ney Leprevost (PSD), que ficou em segundo lugar.

Nos primeiros dias, 30 "cabeças" circularam por Curitiba, cada uma a uma diária de R$ 70. O sucesso do engajamento fez com que outras cidades que têm chapa formada pelo Novo copiassem a ideia: Balneário Camboriú (SC), Blumenau (SC), Maringá (PR) e São José dos Pinhais (PR) devem iniciar a mesma ação em breve.

Na reta final da campanha em Curitiba, o Novo vai angariar mais cabeças, tamanho o sucesso. Serão pelo menos mais 100, totalizando uma média de 130 figuras estranhas pela capital paranaense. Dessa vez, elas carregam algumas mensagens com pautas caras ao partido, como a devolução do valor do Fundo Eleitoral, e do "absurdo" que é "político profissional viver do nosso dinheiro há 30 anos".

O candidato acredita que o fato de, no início, a ação não ter falado sobre política, ajudou no engajamento. "As pessoas estão muito reticentes em falar sobre política. Elas veem casos de corrupção, dinheiro na cueca. Por isso a estratégia foi chamar atenção e aos poucos ar a nossa mensagem."