;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Eco Moliterno, da Accenture: Marcas precisam fazer menos, com mais verdade

Renato Pezzotti

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

18/12/2020 12h38

Como as marcas atuaram durante a pandemia? E o que fica de lição para 2021? Para fala sobre estes temas, o podcast Mídia e Marketing, do UOL, realizou uma edição especial, ao vivo, na tarde de ontem (17).

O convidado da vez foi Eco Moliterno, publicitário e líder de criação da Accenture Interactive, uma das maiores consultorias do mundo, que trabalha em várias —inclusive na publicidade.

"Teremos duas grandes frentes agora. Primeiro é fazer 'mais com menos'. Com toda a crise, vamos ter que encontrar soluções. Por outro lado, vem o que eu chamo de "fazer menos coisas com mais propósito". Precisamos de mais verdade, [de ações] que tenham mais relevância para as pessoas", afirmou o criativo (no arquivo acima, este trecho está a partir de 28:40).

Como bons exemplos, Eco citou as campanhas que uniram concorrentes durante a pandemia - como as realizadas pelas operadoras Claro, Vivo, Oi e TIM, e o 'Movimento Nós', promovido por Ambev, Aurora Alimentos, BRF, Coca-Cola, Heineken, Mondelez, Nestlé e PepsiCo.

"Esse movimento de união, de empatia, extrapolou para o mundo profissional. Torço para que isso não volte atrás. Essa é uma tendência positiva que chegou para ficar. Marcas deram exemplos que espero que sirvam para todo mundo", declarou (a partir de 31:10).

10 anos em 10 meses

Eco também falou sobre a transformação digital que atingiu toda a indústria, causada, principalmente, pelo isolamento social.

"Muitas marcas já vinham num movimento de 'DTC' (direct to consumer, em inglês), de vender diretamente ao consumidor. O que era uma vontade, virou uma necessidade", disse (a partir de 2:27:01).

O digital abriu nova fonte de relacionamento e supriu as necessidades (do varejo). Antes era 'olho no olho' e agora é 'tela na tela'. Se todos precisam migrar? Não sei. Não existe verdade absoluta. Cada empresa tem que entender qual o melhor caminho", afirmou (a partir de 7:10).

Ruptura no modelo

Para o executivo, as empresas têm vivido uma ruptura no modelo clássico do marketing.

"Antes existiam empresas de produtos ou de serviços. Hoje, isso mudou. As empresas agora precisam fazer os negócios dos pontos de vista do consumidor. A palavra, hoje, é experiência, declarou (a partir de 9:50).

Os podcasts do UOL estão disponíveis em uol.com.br/podcasts e em todas as plataformas de distribuição. Você pode ouvir Mídia e Marketing, por exemplo, no Spotify, na Apple Podcasts, no Orelo e no YouTube.