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

Especialistas elegem melhores campanhas publicitárias do ano; veja as top 5

A campanha Tagwords, da Budweiser, usa frases em outdoor com convite para pesquisá-las na internet - Divulgação
A campanha Tagwords, da Budweiser, usa frases em outdoor com convite para pesquisá-las na internet Imagem: Divulgação

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

20/12/2018 13h28

O "Meio & Mensagem", um dos principais veículos de propaganda e marketing do Brasil, publicou em sua última edição do ano o resultado de uma eleição das melhores campanhas nacionais de 2018. 

O ranking foi definido a partir de uma votação feita entre mais de cem executivos do setor, entre presidentes, vice-presidentes ou diretores de criação das principais agências de publicidade do país. Cada um deles preparou uma lista com as dez melhores ações de marketing do ano. Cerca de 180 campanhas foram citadas. 

Confira as cinco mais bem votadas:

5) Vai na Brasileiragem (da agência W+K São Paulo para a Nike)

Para tentar apagar as marcas do 7 a 1 e engajar a torcida brasileira para a Copa do Mundo da Rússia, a Nike investiu na campanha Brasileiragem, que apostava na reconquista da confiança do público na seleção.

Assista ao vídeo da campanha: 

4) Endless Stories (da agência AlmapBDO para a Getty Images)

O curta-metragem, criado integralmente com conteúdo do banco de imagens, mostra as histórias paralelas que aconteceram no mesmo momento da lendária luta de boxe entre Muhammad Ali e Joe Frazier, em 8 de março de 1971.

Assista ao vídeo da campanha:

3) Whooper em Branco (agência David para o Burger King)

A rede de lanchonetes fez um comercial às vésperas da eleição deste ano para mostrar os efeitos de se votar nulo ou em branco. 

Assista ao vídeo da campanha:

2) Detector de Corrupção (agência Grey para o Reclame Aqui)

O aplicativo exibe se determinado político está envolvido em alguma investigação apenas apontando a câmera do celular para sua foto. O app usa uma ferramenta de reconhecimento facial e pesquisa em fontes oficiais para informar sobre a situação judicial do político.

Assista ao vídeo da campanha:

1) Tagwords (agência Africa para a Budweiser)

A campanha usa frases em outdoor e anúncios com um convite para que fossem pesquisadas na internet. Quando buscadas, os resultados mostravam ídolos tomando a cerveja, para mostrar a conexão da marca com a música. A campanha ganhou o principal prêmio de "Mídia Impressa" no Festival de Publicidade de Cannes neste ano.

Assista ao vídeo da campanha: