;(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();
})();
Por que Carlos Saldanha deixou a animação de lado por 'Cidade Invisível'
Carlos Saldanha (dir) com Marco Pigossi nas gravações de 'Cidade Invisível'
Alisson Louback / Netflix
De Splash, em São Paulo
05/02/2021 04h00
Você provavelmente já se acostumou a ver o trabalho do diretor Carlos Saldanha em filmes como "A Era do Gelo" e "Rio". Mas agora ele deixou a animação (um pouco) de lado para investir em um projeto completamente diferente: "Cidade Invisível", sua primeira série live-action, em cartaz na Netflix.
Já estou fazendo animação há quase 30 anos, então chegou um momento em que eu queria experimentar outras coisas desse mundo criativo. Carlos Saldanha, a Splash
Continua depois da publicidade
O diretor Carlos Saldanha, de filmes como "Rio", "A Era do Gelo" e "O Touro Ferdinando"
Imagem: Divulgação
A vontade de fazer algo com atores de carne e osso só cresceu depois de ele dirigir um dos curtas que formam o filme "Rio, Eu te Amo" (2014). Mas o cineasta quis seguir trabalhando com temas brasileiros —o que, em "Cidade Invisível", veio na forma de personagens do nosso folclore.
Muitos deles cruzam os caminhos do detetive Eric (Marco Pigossi), que tenta desvendar a morte misteriosa de sua mulher durante um incêndio. Mas, aqui, não tem nada dos personagens que nos acostumamos a ver em "O Sítio do Picapau Amarelo". O Saci mora em uma ocupação, e a Cuca não é um jacaré.
"Queria dar uma roupagem contemporânea, nova, falar de folclore, mas não ser uma coisa infantil", diz Saldanha. "Foi uma forma de me redescobrir, de me reinventar e de descobrir as histórias que eu quero contar."
Continua depois da publicidade
Rotina diferente
Para o cineasta, acostumado às longas horas de trabalho em ambientes internos exigidas pela animação, foi um desafio lidar com a mudança de rotina. "Cidade Invisível" precisou de três meses para ser gravada em locais como São Paulo, Rio de Janeiro e Ubatuba (litoral norte de SP).
"Para mim foi muito novo estar frente a frente com os atores, trabalhando em um projeto no qual eu não tinha muita experiência nem muito controle", conta. "Eu faço meus trabalhos de animação no mesmo escritório, no mesmo estúdio, então foi um desafio tentar entender esse processo novo."
Marco Pigossi (e um boto) em cena de 'Cidade Invisível', da Netflix
Imagem: Divulgação/Netflix
A escalação dos atores, antes, também já havia sido algo diferente, já que Saldanha trabalhou nos Estados Unidos durante a maior parte de sua carreira. "Eu não conhecia muitos atores brasileiros, então todo o mundo veio como uma novidade para mim."
O que não significa que a conexão com o elenco tenha sido difícil. Com o protagonista, Marco Pigossi, por exemplo, ela veio bem rápido. "A gente conversou por Zoom, e foi imediata a identificação", lembra o diretor.
Continua depois da publicidade
Alessandra Negrini, Marco Pigossi e Áurea Camargo em cena de 'Cidade Invisível', da Netflix
Imagem: Divulgação/Netflix
E no fim, a experiência de fazer a série —dividida não só com os atores, mas também com uma equipe técnica liderada pelos diretores Luiz Carone e Júlia Jordão— deixou saudades.
Foram três meses gravando como uma família, mesmo. Deu uma sensação de ninho vazio assim que acabou.
Reconectar o brasileiro
Saldanha espera que "Cidade Invisível" possa ajudar os brasileiros a se reconectarem com o folclore e ainda fazer esses célebres personagens nacionais "viajarem" para outros países —o que não é difícil, já que produções como "3%" conquistaram fãs nos quatro cantos do mundo.
Alessandra Negrini é Inês, uma das entidades de 'Cidade Invisível'
Imagem: Divulgação/Netflix
Continua depois da publicidade
"Temos esperança de que o brasileiro consiga se reconectar com o folclore, com essa arte, que se envolva nessa redescoberta. E também de que o mundo possa ter curiosidade de descobrir um pouco da gente", diz.
Se a gente consome as coisas de lá, 'American Gods', 'Vikings', por que não consumir o que é daqui?
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.