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

Podcast

Caoscast

Conversas sobre comportamentos e tendências que fazem a cabeça dos brasileiros


Geração Z na política reúne milhões de jovens 'apartidários com causa'

Unsplash/Clay Banks
Imagem: Unsplash/Clay Banks

15/11/2020 04h01

Quase 150 milhões de brasileiros estão aptos a ir às urnas em 2020, segundo o TSE. Dentre eles, 20.365.784 têm menos de 25 anos de idade, ou seja, são da geração Z. Isso significa que 13 a cada 100 cidadãos que votam são nativos digitais e tendem a ser mais debochados, realistas e menos preocupados com perfeição, como mostrou TAB em especial sobre o tema.

Eles estão conectados, discutem temas como meio ambiente, feminismo, racismo e questões LGBTQI+, mas am longe de vestir a camisa de um partido. "O Z é aquela pessoa que não tem lado definido, mas não necessariamente fica em cima do muro", definiu Marina Roale, head de pesquisa da Consumoteca, no primeiro episódio do CAOScast hospedado no TAB (ouça abaixo partir de 16:24).

CAOScast vai ao ar às quintas-feiras.

Ainda ficou confuso? Calma, ela esmiúça. "A gente não está falando aqui de uma geração que é alienada, porque eles estão ligados em militância e tudo mais. Porém, eles não se identificam com os partidos" (a partir de 17:08).

Para isso, Roale tem um nome: apartidários com causa. Uma pesquisa da Consumoteca mostra que apenas 32% da geração Z assume uma ideologia política — esquerda, direita ou centro. Enquanto isso, 44% deles falam que, embora tenham alguma posição política, não se identificam com nenhum dos lados.

Aliás, não raro séries, músicas e filmes são fonte de contato com temas politizados para esses jovens, observa Rebeca de Moraes, também no podcast. Redes sociais, então, nem se fala: 63% dos jovens preferem se informar pelo Instagram. E quem usa a rede social sabe que ela não é exatamente o forte dos políticos tradicionais. O TikTok, então, rede que vem conquistando cada vez mais a nova geração, ainda é terreno obscuro para muitos desses adultos que precisam pedir voto.

Não tem como fugir. Para falar com os Zs, é preciso estar nas redes e defender causas, argumenta Faria. "Tem que acertar no tom e na mensagem. Alguns bons exemplos: quando Magalu diz que vai contratar apenas trainees negros. Ou quando o Burger King veicula campanhas com drag queens. Acho que é o tipo de política que fala a real, sem levantar bandeira e defender causas" (a partir de 39:57).

Se você se interessou pelo tema, pode ouvir o episódio completo de estreia do CAOScast no TAB: Política Z.