;(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; // 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(); })();

Topo

Viagem em Cena

Como são os lugares que marcaram os filmes na vida real


O roteiro mais fofo por Paris: veja os locais de 'Ratatouille' na vida real

De Nossa

26/10/2022 04h00

É praticamente impossível ter assistido a "Ratatouille" sem ter se apaixonado pela Paris explorada por Remy e Linguini, certo?

No segundo episódio do "Viagem em Cena", vamos viajar novamente até a capital sa, mas desta vez de olho nas localidades reais que deram inspiração à animação da Pixar de 2007.

Galeria Lafayette
40 Bd Haussmann, 75009
48° 52' 24" N, 2° 19' 55" E

A vista da icônica galeria Lafayette, em Paris - Barry Winiker/Getty Images - Barry Winiker/Getty Images
A vista da icônica galeria Lafayette, em Paris
Imagem: Barry Winiker/Getty Images

A galeria chama atenção por sua arquitetura e a invejável vista panorâmica de Paris. Não é à toa que foi justamente a escolha para a abertura da animação. A loja principal fica na Boulevard Haussmann, mas possui vários outros endereços na capital sa. O projeto da loja é do arquiteto Georges Chedanne e seu assistente, Ferdinand Chanut, que idealizaram sua cúpula de vidro e aço e suas icônicas escadarias em art nouveau, todas construídas em 1912.

Controle de Pragas Aurouze
8 Rue des Halles, 75001
48° 51' 33" N, 2° 20' 50" E

Controle de Pragas Aurouze - Facebook/Reprodução - Facebook/Reprodução
Controle de Pragas Aurouze, dona da assustadora vitrine cheia de ratos empalhados
Imagem: Facebook/Reprodução

A cena em que Remy olha para uma loja especializada em controles de pragas parece algo feito especialmente para um filme cujo protagonista é um ratinho. Mas não é o caso. A Aurouze é uma loja que está em Paris desde 1872 com sua vitrine aterrorizante cheia de ratos empalhados em armadilhas. Sua reprodução em "Ratatouille" é quase perfeita e fez a loja se tornar um ponto turístico de fácil o, já que está bem próxima de outras rotas dos viajantes.

Pont au Double
Pont au Double, 75004
48° 51' 09" N, 2° 20' 54" E

Pont au Double, a chamosa conexão com a Catedral de Notre Dame - Izzet Keribar/Getty Images - Izzet Keribar/Getty Images
Pont au Double, a chamosa conexão com a Catedral de Notre Dame
Imagem: Izzet Keribar/Getty Images

Uma parada quase que obrigatória aos românticos que visitam Paris, esta ponte é que a conecta a cidade a Île de la Cité, onde está a catedral de Notre-Dame. Sua primeira versão foi construída entre 1881 e 1883 e, desde então, foram quatro versões instaladas ao longo dos 45 metros sobre o rio Sena. A atual é uma ponte em formato de arco de ferro fundido elaborada pelo engenheiro Jules Lax.

Rio Sena
Port de Montebello, 75005
48° 51' 09" N, 2° 20' 52" E

Uma vista do rio Sena, em Paris - Cristian Bortes / EyeEm/Getty Images/EyeEm - Cristian Bortes / EyeEm/Getty Images/EyeEm
Uma vista do rio Sena, em Paris
Imagem: Cristian Bortes / EyeEm/Getty Images/EyeEm

Falando em rio Sena, "Ratatouille" mostra diversos pontos interessantes de Paris naquela região. Uma caminhada ou quem sabe um eio de bicicleta pode te levar em uma viagem pelas 37 pontes e marcos construídos em diferentes momentos da história da capital sa.

Restaurante La Tour d' Argent
19 Quai de la Tournelle, 75005
48° 51' 01" N, 2° 21' 12" E

Restaurante La Tour d' Argent, em Paris - WikiCommons - WikiCommons
Restaurante La Tour d' Argent, em Paris
Imagem: WikiCommons


A história dos proprietários diz que o La Tour d' Argent existe desde 1582, quando era uma taberna. Assim como outros marcos que apareceram no filme, o restaurante teve uma grande procura após o lançamento da Pixar, já que o prédio foi a inspiração para o Gusteau, onde se a a maior parte da história.