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

Na Escócia, fãs de Harry Potter podem andar no Expresso de Hogwarts

A empresa The Jacobite promove o expresso de Hogwarts da "vida real" - Getty Images/iStockphoto
A empresa The Jacobite promove o expresso de Hogwarts da "vida real" Imagem: Getty Images/iStockphoto

Do UOL

05/08/2019 15h45

Já sonhou em viver uma experiência de Harry Potter? A empresa The Jacobite promove uma viagem que vai fazer você se sentir no Expresso de Hogwarts.

Infelizmente, o trem não parte da real plataforma 9¾, em Kings Cross Station, em Londres. Em vez disso, o trem, operado pela West Coast Railways, parte de Fort William, a cerca de duas horas de carro de Glasgow, e vai até Mallaig, nas Terras Altas da Escócia.

Plataforma 9¾, em Kings Cross Station, Londres - Getty Images - Getty Images
Plataforma 9¾, em Kings Cross Station, Londres
Imagem: Getty Images

Os ingressos para o West Coast Railways Hogwarts Express custam 37,75 libras (aproximadamente R$ 180, em valores convertidos em 05/08/2019) para adultos e 20,75 libras (aproximadamente R$ 100) para crianças de até 12 anos. O trajeto ocorre de segunda a domingo, às 10:15 e 14:30, até o dia 25 de outubro de 2019.

Apesar de parecer muito com o trem nos filmes de Harry Potter, este não é o único trem que copia o Expresso de Hogwarts no Reino Unido. Existe outro eio operado pelo North Yorkshire Moors Historical Railway Trust, que também proporciona aos ageiros uma experiência Harry Potter.

Na Filadélfia, nos EUA, também existe o Hogwarts Express, inaugurado em 2017, que parte da Estação Jefferson para um local especial com tema de Harry Potter.

Castelo de Alnwick e o rio Aln - iStock - iStock
Castelo de Alnwick e o rio Aln
Imagem: iStock

Além do eio de trem, o Reino Unido tem outros eios turísticos e experiências destinadas aos fãs de Harry Potter, como as estações Kings Cross Station e Hogsmeade Station, assim como o Castelo de Alnwick, onde foram filmados os primeiros filmes da saga.