O Galaxy S25 plus é visto a ser segurado e o YouTube está ativo no ecrã principal. Mantenha premido o botão lateral para pedir ao Google Gemini, com linguagem natural, para listar os locais mencionados num vídeo e guardá-los como uma nota. Irá percorrer várias aplicações para pesquisar online e, em seguida, criar e guardar uma nota.
O AI ProVisual Engine mais avançado,
Dois indivíduos jogam basquetebol à noite. As imagens são nítidas graças à câmara do Galaxy S25 plus.
O processador mais poderoso feito à medida para Galaxy
O processador de 3 nm é visto a flutuar por cima da placa de chips antes de repousar em cima da mesma. Vários raios de luz saem do AP antes de se transformarem no dispositivo Galaxy S25 plus. O dispositivo é visto na horizontal a partir do perfil lateral antes de rodar para mostrar uma cena do jogo Wuthering Waves no ecrã principal.
Duração da bateria inigualável
Um intervalo de tempo de uma paisagem urbana vai do dia à noite durante 29 horas e 30 minutos graças à bateria de longa duração do Galaxy S25 plus.
“A personalização é uma das melhores coisas das novas funcionalidades de AI na Galaxy S25 Series”
ZDNET
“A Galaxy S Series continua a ser uma das tecnologias com melhor design do mundo”
The Independent
Simples. Impactante.
O Galaxy S25 plus em Azul Marinho aparece a voar e é visto a partir de trás. Em seguida, o Galaxy S25 em Azul Gelo, que é mais pequeno, aparece ao lado na vista frontal.
Conheça o Galaxy S25 e S25+. Um design elegante e premium numa estrutura de alumínio forte, com um ecrã imersivo, câmara sofisticada e agora mais fino, para um manuseamento mais confortável.,
Grande e maior
Design mais fino, uma melhor escolha. Os Galaxy S25 e S25+ apresentam o nosso processador mais poderoso e feito à medida, duração da bateria otimizada e a nossa IA mais inovadora. Torne-se ainda maior e mais ousado com o ecrã de 6,7 polegadas do Galaxy S25+.,
A Now Bar aparece da direita para a esquerda com um alerta do Now Brief. A Now Bar move-se para a parte inferior do ecrã principal do Galaxy S25 plus, que aparece focada. Três outros alertas da Now Bar aparecem acima do primeiro: temporizador, música e exercício.
Entre na próxima era da IA móvel com um companheiro de IA que está um passo à frente de cada uma das suas necessidades. Apenas basta falar naturalmente e deixar que a inteligência artificial trate por si as suas tarefas diárias.
Prima, fale e já está
O Galaxy S25 plus é visto a ser segurado e o YouTube está ativo no ecrã principal. Mantenha premido o botão lateral para pedir ao Google Gemini, com linguagem natural, para listar os locais mencionados num vídeo e guardá-los como uma nota. Irá percorrer várias aplicações para pesquisar online e, em seguida, criar e guardar uma nota.
Conclua facilmente as suas tarefas, sem ter de alternar entre várias aplicações. Basta premir sem soltar o botão lateral para aceder ao Google Gemini e obter ajuda.1
Conclua as suas tarefas facilmente, sem ter de alternar entre várias aplicações. Basta dizer ao Google Gemini o que precisa, de forma natural, e este irá tratar das coisas de uma só vez.
Entre em direto, obtenha respostas
O Google Gemini Live está ativo e o Talk Live está selecionado. Em seguida, uma imagem é enviada como anexo para o Gemini Live. O Gemini Live analisa a imagem e pode conversar sobre o conteúdo com linguagem natural.
Tenha uma conversa fluida com o Gemini Live para debater ideias ou para se preparar para apresentações anexando imagens e obtendo respostas em tempo real que se adaptam ao seu estilo de conversa.
Briefings personalizados para o seu dia
Now Brief envia briefings personalizados ao longo do dia. Os destaques da manhã incluem atualizações meteorológicas e da Pontuação de Energia, os destaques do meio-dia incluem dicas de condução e atualizações de cupões a expirar e os destaques da noite incluem uma compilação do seu dia com fotografias da galeria e destaques da atividade diária.
Obtenha resumos personalizados ao longo do dia a partir do novo Now Brief. Comece a sua manhã com um resumo do dia que tem pela frente, como verificar a sua Pontuação de Energia mais recente e lembretes da sua agenda. Depois, à noite, recapitule os eventos do dia com informações sobre a atividade diária.
Duas formas de encontrar. Circular ou ouvir.
O Circle to Search with Google permite-lhe pesquisar qualquer coisa no seu ecrã e conseguir informações rapidamente com as Visões Gerais de IA. Basta fazer um círculo num objeto - incluindo imagens, vídeos ou texto - com o dedo ou a S Pen e obterá resultados imediatamente. Até pode procurar uma música para ouvir no momento sem mudar de aplicação.
Um estúdio de som ao seu alcance
As imagens dos objetos são vistas com ondas sonoras ao longo do meio. No Apagador de áudio, o ruído indesejado selecionado pode ser reduzido de 0 para -100. A -100, o Mute é realçado.
Elimine facilmente o ruído de fundo indesejado dos seus vídeos e torne-os dignos de partilha com o Apagador de Áudio. Ajuste o seu áudio regulando diferentes tipos de som, incluindo vozes, música, vento e muito mais.
Destacar reels mais facilmente
Os destaques de vários vídeos são editados em conjunto com o recorte automático de vídeo.
Crie reels facilmente ao colar os seus vídeos e simplesmente clicar em recorte automático de vídeo. A IA irá detetar a atividade principal e recortá-la em clipes prontos para serem destacados, que pode facilmente modificar para a duração pretendida.
O futuro da saúde, agora personalizado
Mantenha-se a par dos seus objetivos de saúde monitorizando a sua Pontuação de Energia. Sincronize com o Galaxy Watch ou Ring e receba informações personalizadas e coaching, como uma análise do seu sono, atividade e frequência cardíaca.,
O Motor de Dados Pessoais combina e processa os seus dados principais e fornece sugestões personalizadas. Encripta estes dados e guarda-os no seu dispositivo com o Knox Vault, tornando-os inacessíveis a qualquer outra pessoa.
Tenha controlo sobre a sua Galaxy AI. Pode decidir onde processá-la, no dispositivo ou na cloud.
Melhorámos ainda mais a segurança em todos os dispositivos Galaxy ligados com a tecnologia Knox Matrix Trust Chain. Agora, pode monitorizar a segurança de outros dispositivos diretamente a partir do seu smartphone Galaxy.
As lentes da câmara do Galaxy S25 plus aparecem e todo o dispositivo roda para mostrar a sua vista traseira. Outro dispositivo é visto atrás a partir do ecrã principal, apresentando a câmara frontal.
O nosso ProVisual Engine é agora reforçado pelo nosso poderoso processador. Experimente o nosso sistema criativo avançado para captar, visualizar e editar, que irá superar as suas expetativas.,
Câmara frontal
12 MP
Câmara de selfie
Câmara traseira
12 MP
Ultra Grande-angular
50 MP
Grande-angular
Zoom de qualidade ótica 2x
10 MP
Teleobjetiva
Zoom ótico 3x
Comparar câmaras
Zoom ótico de 3x, zoom de qualidade ótica de 2x, zoom digital até 30x,,
Zoom ótico híbrido de 3x, zoom digital até 30x,,
Zoom ótico de 3x, zoom digital até 30x,,
Vídeo Nightography incomparável. Menos ruído, mais nitidez
Dois indivíduos jogam basquetebol à noite. As imagens são nítidas graças à câmara do Galaxy S25 plus.
Agora pode fotografar em HDR de 10 bits melhorado para uma experiência de videografia mais impressionante. O nosso AP avançado também proporciona uma remoção de ruído mais precisa, o que significa que já não terá de se preocupar com filmes noturnos granulados.,
Retratos épicos, sempre
Nós vemo-lo. Tal como a nossa câmara com Object-aware Engine melhorado, que reconhece objetos e que se adapta a vários ambientes de iluminação. Capte os tons e as texturas da pele exatamente como os seus olhos os veem.
Filtros só para si
Dê vida às suas fotografias com os seus próprios filtros personalizados. A Galaxy AI irá analisar a sua fotografia favorita e criar um filtro que capte o momento. Use-o instantaneamente ou personalize-o ainda mais para se adequar ao seu estado de espírito, com ajustes à saturação, brilho e muito mais.
Fotografias captadas à velocidade da luz
O nosso ProVisual Engine e sensor avançados juntam-se para proporcionar imagens de alta qualidade, mesmo a velocidades rápidas do obturador, para que possa captar elementos em movimento com mais nitidez.
O processador mais poderoso feito à medida para Galaxy
O processador de 3 nm é visto a flutuar por cima da placa de chips antes de repousar em cima da mesma. Vários raios de luz saem do AP antes de se transformarem no dispositivo Galaxy S25 plus. O dispositivo é visto na horizontal a partir do perfil lateral antes de rodar para mostrar uma cena de um jogo no ecrã principal. Com tecnologia Snapdragon 8 Elite para Galaxy.
Apresentamos o nosso processador mais poderoso feito à medida para Galaxy. Agora, com ray tracing melhorado e otimização Vulkan, mergulhe na ação com gráficos ultra suaves graças ao Snapdragon® 8 Elite para Galaxy.,,,
CPU
45
%
processamento mais rápido
GPU
48
%
desempenho gráfico melhorado
NPU
68
%
melhor desempenho da IA
Snapdragon® 8 Elite para Galaxy
Melhore até à perfeição, veja a diferença
Uma comparação de antes e depois do ecrã do dispositivo Galaxy representa os efeitos do ProScaler. O ProScaler oferece gráficos mais detalhados.
A qualidade da imagem do ecrã é ainda mais impressionante com o nosso ProScaler incorporado. O processamento de algoritmos de IA é utilizado para proporcionar uma experiência de visualização em alta definição sem ter de ajustar as definições de visualização.,
Duração da bateria inigualável
Um time lapse de uma paisagem urbana vai do dia à noite durante 29 horas e 30 minutos graças à bateria de longa duração do Galaxy S25 plus.
Graças à nossa tecnologia mDNIe pioneira incorporada na nossa otimização de software e AP personalizado, o tempo de utilização da bateria do Galaxy S25 e S25+ é melhorado para que possa desfrutar de horas de visualização de vídeos.,
Veja até
30
horas
de vídeos no Galaxy S25+
Veja até
29
horas
de vídeos no Galaxy S25
Comparar bateria
,
,
Armazenamento até 512 GB
Armazene tudo com 12 GB de memória e até 128 GB, 256 GB ou 512 GB de armazenamento com o Galaxy S25, ou escolha entre 256 GB ou 512 GB de armazenamento com o Galaxy S25+.
Nova One UI 7, construída para IA
Now Bar
Obtenha acesso direto aos seus alertas do Now Brief, música, temporizador e muito mais da nova Now Bar sem ter de desbloquear o seu telefone.
A Now Bar está ativa na parte inferior do ecrã principal de um smartphone Galaxy. Um alerta do Now Brief desliza para cima e para trás de uma pilha de outras notificações da Now Bar de aplicações ativas. Em seguida, aparece a música, o exercício e o temporizador, e depois regressa ao Now Brief.
Widget
O novo ecrã inicial é controlado por si, com layouts altamente personalizáveis e widgets redesenhados.
Vários widgets, incluindo tempo, relógio, pontuação de sono e galeria, aparecem da esquerda e da direita.
Notificação
Veja o que está a acontecer neste momento. As notificações em direto permitem-lhe monitorizar atividades em curso, tais como temporizadores e gravações de voz na Now Bar, barra de estado ou mesmo no topo do seu painel de notificações normal.
As notificações são deslizadas para baixo no ecrã principal do dispositivo Galaxy para mostrar notificações em direto de aplicações ativas na parte superior.
O que vai, volta. Focamo-nos na eficiência energética e circularidade de recursos em todos os ciclos de vida dos produtos. Tudo ajuda e estamos empenhados em fazer mais.
Mantenha-o protegido, com o seu estilo
Concebidos para se adaptarem ao seu estilo, em qualquer caso. Obtenha acessórios funcionais com grande personalidade.
Os Galaxy S25 e S25+ estão disponíveis em Azul Marinho, Azul Gelo, Menta e Cinza. Azul Escuro, Coral e Rosa Dourado estão disponíveis exclusivamente em Samsung.com.
Os Galaxy S25 e S25+ utilizam IA para que as suas aplicações funcionem em conjunto com um único pedido. Também incluem funcionalidades de IA adicionais, como Now Brief, Google Gemini Live e Apagador de Áudio. Graças à One UI 7 atualizada, estas funcionalidades funcionam perfeitamente nos Galaxy S25 e S25+.,,,,
O Galaxy S25 tem um ecrã de 6,2” e uma capacidade de bateria de 4000 mAh, enquanto o Galaxy S25+ tem um ecrã de 6,7” e uma capacidade de bateria de 4900 mAh. O Galaxy S25 tem três opções de armazenamento à escolha, incluindo 128 GB, 256 GB ou 512 GB, enquanto o Galaxy S25+ tem duas opções de armazenamento: 256 GB ou 512 GB.,,
Os Galaxy S25 Series apresentam o primeiro processador de 3 nm personalizado para smartphones Galaxy. O Snapdragon® 8 Elite Mobile Platform para Galaxy com ray tracing melhorado e otimização Vulkan, para uma experiência de jogo melhorada. E com uma Vapor Chamber maior e um novo material de interface térmica (TIM), terá uma experiência mais suave e nítida para que possa mergulhar totalmente no jogo durante mais tempo. 22,23,24
Os Galaxy S25 e S25+ são reforçados com Armor Aluminum, vidro Corning® Gorilla® Glass Victus® 2 e uma classificação IP68 para proteger de riscos, pó e água diários.,,
Graças ao nosso AP melhorado, a Nightography melhorou nos Galaxy S25 e S25+, permitindo-lhe captar vídeos ainda mais nítidos à noite. Também pode tirar retratos realistas graças à capacidade do Object-aware Engine que deteta e se adapta-se a ambientes luminosos.,
A Galaxy AI processa dados personalizados de forma segura no seu dispositivo através do Motor de Dados Pessoais. Os dados são então encriptados para restringir o acesso aleatório por outras aplicações. Em Controlos, também pode escolher como a Galaxy AI processa os seus dados, como no seu dispositivo ou na nuvem, eliminar dados personalizados ou optar por não personalizar.
Gemini é uma marca comercial da Google LLC. Resultados para fins ilustrativos. Requer ligação à Internet e início de sessão na Google Account. A disponibilidade do serviço pode variar consoante o país, o idioma ou o modelo do dispositivo. Funciona em aplicações compatíveis. As funcionalidades podem variar dependendo da subscrição e os resultados podem ser diferentes. Poderá ser necessário configurar determinadas funções ou aplicações. A precisão dos resultados não é garantida.
Os resultados podem variar dependendo das condições de disparo, incluindo vários motivos, estar fora de foco ou motivos em movimento.
Em comparação com modelos anteriores.
Com base nas condições de testes laboratoriais internos da Samsung com a versão de pré-lançamento de um determinado modelo ligado ao auricular via Bluetooth sob as predefinições através de LTE. Estimado em relação à capacidade da bateria e à corrente medida sobre o consumo de energia da bateria durante a reprodução de vídeo (resolução de ficheiro de vídeo 720p, guardado no dispositivo). O tempo real de reprodução de vídeo pode variar consoante a ligação à rede, as definições, o formato do ficheiro de vídeo, o brilho do ecrã, o estado da bateria e muitos outros fatores.
A estrutura Armor Aluminum não inclui o volume, teclas laterais nem o suporte SIM.
Medido diagonalmente como um retângulo completo. A área visível real é menor devido aos cantos arredondados e/ou ao orifício da câmara. Medido na diagonal, o tamanho do ecrã do Galaxy S25 é 6,2” no retângulo completo e 6,0” com os cantos arredondados; o tamanho do ecrã do Galaxy S25+ é 6,7” no retângulo completo e 6,5” com os cantos arredondados; o tamanho do ecrã do Galaxy S25 Ultra é 6,9” no retângulo completo e 6,8” com os cantos arredondados; a área visível real é menor devido aos cantos arredondados e/ou ao orifício da câmara.
Valor típico testado sob condições laboratoriais de terceiros. O valor típico é o valor médio estimado considerando o desvio na capacidade da bateria entre as amostras de bateria testadas sob a norma IEC 61960. A capacidade nominal é 3885 mAh para o Galaxy S25, 4755 mAh para o Galaxy S25+ e 4855 mAh para o Galaxy S25 Ultra.
A disponibilidade de cores pode variar dependendo do país ou operadora.
Disponível exclusivamente em Samsung.com.
O Corning® Gorilla® Glass Victus® 2 aplica-se na parte frontal e traseira do dispositivo.
Com base nas condições de teste para submersão em até 1,5 metros de água doce durante até 30 minutos. Sem entrada de pó; proteção completa contra contacto (à prova de pó). A resistência ao pó e à água do dispositivo não é permanente e pode diminuir ao longo do tempo devido ao desgaste normal.
Gemini é uma marca registada da Google LLC. Resultados para fins ilustrativos. A funcionalidade Gemini Live requer ligação à Internet e início de sessão na Google Account. A disponibilidade do serviço pode variar consoante o país, o idioma ou o modelo do dispositivo. As funcionalidades podem variar dependendo da subscrição e os resultados podem ser diferentes. Compatível com determinadas funcionalidades e determinadas contas. Disponível apenas para utilizadores com idade igual ou superior a 18 anos. A precisão dos resultados não é garantida.
A funcionalidade Now Brief requer início de sessão na Samsung Account. A disponibilidade do serviço pode variar consoante o país, o idioma, o modelo do dispositivo e as aplicações. Algumas funcionalidades podem requerer ligação à rede. Os Modos e Rotinas têm de estar ativados para utilizar o Motor de Dados Pessoais para sugestões de Rotinas baseadas no contexto. O utilizador tem de consentir em aceder a permissões, tais como fotografias, vídeos, ficheiros de áudio e eventos de calendário. Pode não apresentar momentos, dependendo da política de tempo de exposição. A descrição das fotografias fornecidas por momentos pode não estar alinhada com a intenção do utilizador. A notificação de calendário de eventos está disponível com aplicações de calendário que utilizem bases de dados de calendário Android se o Calendário Samsung estiver instalado. Notificações para cupões apenas disponíveis para cupões adicionados à Samsung Wallet com data de validade. Para verificar a Pontuação de Energia, os dados de saúde monitorizados do Samsung Galaxy Watch ou Samsung Galaxy Ring devem ser sincronizados com a aplicação Samsung Health. O resultado é apenas para sua referência pessoal e não se destina a fins médicos.
Circundar para Pesquisar é uma marca comercial do Google LLC. Sequências encurtadas e simuladas. Resultados apenas para fins ilustrativos. A disponibilidade do serviço pode variar segundo o país, idioma ou modelo do dispositivo. Requer ligação à Internet. Os utilizadores podem ter de atualizar as aplicações Android ou Google para uma versão mais recente. Os resultados podem variar dependendo das correspondências visuais e áudio. A precisão dos resultados não é garantida. Funciona em aplicações e superfícies compatíveis e apenas com música ambiente. Não identificará música proveniente dos auscultadores ou se o volume do telefone estiver desligado.
Os resultados podem variar por vídeo, dependendo de como os sons estão presentes no vídeo. É necessário iniciar sessão na Samsung Account. Determinados tipos de som podem ser detetados, tais como vozes, música, vento, natureza, multidão e ruído. A deteção de som real pode variar dependendo da fonte de áudio e do estado do vídeo. A precisão dos resultados não é garantida.
A duração máxima por clipe a editar utilizando o recorte automático de vídeo para o Assistente de Fotos é de 90 minutos. A duração máxima dos clipes combinados a editar utilizando o recorte automático de vídeo para o Assistente de Fotos é de 180 minutos. O número máximo de clipes a editar por projeto de vídeo é de 60 clipes. A precisão dos resultados não é garantida.
A Pontuação de Energia está disponível em telefones Android (Android 11 ou superior) e requer a aplicação Samsung Health (v6.27 ou superior). É necessário iniciar sessão na Samsung Account. A disponibilidade do serviço pode variar por país, região e idioma. Para verificar a Pontuação de Energia, os dados de saúde monitorizados do Samsung Galaxy Watch (a série Galaxy Watch4 e modelos mais OS 5.0 ou superiores) ou Samsung Galaxy Ring devem ser sincronizados com a aplicação Samsung Health. Necessita de pelo menos os dados de atividade e de sono do dia anterior, e dados de frequência cardíaca durante o sono. Não deve ser usado na deteção, diagnóstico ou tratamento de qualquer condição médica. O resultado é apenas para sua referência pessoal. Consulte um profissional médico para aconselhamento.
Dispositivos Galaxy Watch e Galaxy Ring vendidos separadamente.
O Knox Matrix está disponível em smartphones e tablets Galaxy com a One UI 7.0 ou superior. A disponibilidade pode variar consoante o país ou a região.
O zoom de qualidade ótica é ativado pelo sensor de píxeis adaptável.
Em comparação com os Galaxy S24 e S24+.
As melhorias de desempenho da AP aplicam-se ao Galaxy S25+ e são comparadas com o Galaxy S24+. O desempenho real dependerá do ambiente do utilizador, das condições e do software e aplicações pré-instalados.
Wuthering Waves é uma marca comercial e/ou marca comercial registada da Kuro Games. Agora disponível para download na Galaxy Store. As obras de arte estão protegidas por direitos de autor e a Kuro Games goza dos direitos exclusivos. A disponibilidade do serviço pode variar consoante o país, o idioma ou o modelo do dispositivo.
Os produtos da marca Snapdragon são produtos da Qualcomm Technologies, Inc. e/ou das suas subsidiárias.
A funcionalidade ProScaler está disponível nos modelos Galaxy S25+ e Ultra. A qualidade da imagem pode ser melhorada até QHD+, dependendo da definição de resolução de ecrã do dispositivo.
As opções de armazenamento e a disponibilidade podem variar consoante a operadora, o país ou a região. A disponibilidade de armazenamento real pode variar consoante o software pré-instalado.
Alguns widgets funcionais podem requerer ligação à rede e/ou início de sessão na Samsung Account. A disponibilidade das funções nas aplicações pode variar consoante o país.
As transferências com fios de dispositivos Android™ requerem que o dispositivo recetor tenha Android™ 4.3 ou posterior e que o dispositivo emissor tenha Android™ 4.3 ou posterior. As transferências podem ser concluídas sem um cabo através de uma ligação sem fios. Para ligações sem fios, o dispositivo recetor tem de ter Android™ 4.0 ou posterior e o dispositivo emissor tem de ter Android™ 4.0 ou posterior. Abra o Smart Switch Mobile em “Definições” no dispositivo Galaxy recetor ou transfira a aplicação Smart Switch Mobile da Galaxy Store. Os dados, conteúdos e aplicações disponíveis para transferência podem variar consoante o método de transmissão.
As transferências com fios do iOS requerem que o dispositivo recetor tenha Android™ 4.3 ou posterior e que o dispositivo emissor tenha iOS 5 ou posterior. As transferências podem ser concluídas sem um cabo através de uma ligação sem fios ou iCloud. Para ligações sem fios, o dispositivo recetor tem de ter Android™ 4.0 ou posterior e o dispositivo emissor tem de ter iOS 12 ou posterior. As transferências iCloud requerem que o dispositivo recetor tenha Android™ 4.0 ou posterior e que o dispositivo emissor tenha iOS 5 ou posterior. Abra o Smart Switch Mobile em “Definições” no dispositivo Galaxy recetor ou descarregue a aplicação Smart Switch Mobile da Galaxy Store. Para transferências sem fios, descarregue o Smart Switch para iOS a partir da App Store no seu iPhone ou iPad. Os dados, conteúdos e aplicações disponíveis para transferência podem variar consoante o método de transmissão. Os contactos, galeria, vídeos, calendários e lembretes podem ser transferidos sem fios a partir de um dispositivo iOS.
Recomenda-se a utilização de uma ligação com fios ao transferir diversos conjuntos de dados de uma só vez.
Aplicam-se Termos e Condições. A cobertura Samsung Care+, o tipo de serviço e os detalhes da promoção podem variar de acordo com o país/região e pode aplicar-se a franquia (taxa de serviço). Para ser elegível para o benefício da promoção Samsung Care+, pode ser necessário registar-se. Para obter informações detalhadas sobre o Samsung Care+, visite https://www.samsung.com/samsung-care-plus/.
A distância de 3x é o zoom ótico. A distância de 2x é o zoom de qualidade ótica.
O Space Zoom de 30x inclui o zoom ótico de 3x e o zoom digital 30x com tecnologia super resolução. As distâncias do zoom para além do zoom de 3x podem apresentar alguma deterioração da imagem.
O AI Zoom é aplicado a distâncias entre os comprimentos do zoom digital. A exatidão dos resultados não é garantida.
A duração real da bateria varia de acordo com o ambiente de rede, as funcionalidades e as aplicações usadas, a frequência das chamadas e das mensagens, o número de carregamentos, e muitos outros fatores.
`;
target.insertAdjacentHTML('beforeend', viewrHTML);
res();
});
};
const bindEvents = function () {
eventHandler.viewerEvents();
eventHandler.click();
eventHandler.mousedown();
eventHandler.mouseup();
if (!isLow) {
eventList.setScene();
}
};
const eventHandler = {
viewerEvents: function () {
window.addEventListener('introPoseReady', eventList.introPoseReady);
window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd);
},
click: function () {
els.resetBtn && els.resetBtn.addEventListener('click', eventList.clickReset);
els.presetOpen && els.presetOpen.addEventListener('click', eventList.openPresetPopup);
for (let i = 0; i < els.angleCta.length; i++) {
els.angleCta[i].addEventListener('click', eventList.setAngle);
}
els.contents.addEventListener('click', function (e) {
if (e.target.classList.contains('js-reset-btn') || e.target.classList.contains('js-fold-btn') || e.target.classList.contains('js-preset-open') || e.target.closest('.js-preset-layer')) return;
eventList.closePresetPopup();
});
},
scroll: function () {
window.addEventListener('scroll', eventList.runIntroPose);
},
mousedown: function () {
els.presetOpen.addEventListener('mousedown', eventList.presetOpenDown);
els.presetOpen.addEventListener('touchstart', eventList.presetOpenDown);
},
mouseup: function () {
els.presetOpen.addEventListener('mouseup', eventList.presetOpenUp);
els.presetOpen.addEventListener('touchend', eventList.presetOpenUp);
},
presetOpen: function () {
window.addEventListener('focusin', eventList.focusInPreset);
},
presetClose: function () {
window.removeEventListener('focusin', eventList.focusInPreset);
}
};
const eventList = {
viewerLoadEnd: function () {
pdViewer.hideLoader();
eventList.setViewerAltText();
isViewerLoaded = true;
},
introPoseReady: function () {
if (!isLow) {
els.viewerParent.isIntroposeReady = true;
eventHandler.scroll();
eventList.runIntroPose();
} else {
els.viewerParent && pdViewer.runIntroPoseAll();
}
},
setScene: function () {
els.sceneObj = SCROLLER({
trackElement: els.section,
useFixed: false
});
},
runIntroPose: function () {
els.sceneObj.trackAnimation(function () {
let progress = currDevice.indexOf('mobile') > -1 ? 50 : 30;
if (this.progress >= progress && !!els.viewerParent.isIntroposeReady) {
els.viewerParent && pdViewer.runIntroPoseAll();
window.removeEventListener('scroll', eventList.runIntroPose);
}
});
},
clickReset: function () {
if (!isViewerLoaded) return;
pdViewer.reset();
},
presetOpenDown: function () {
isPresetOpenDown = true;
},
presetOpenUp: function () {
isPresetOpenDown = false;
},
focusInPreset: function () {
if (isPresetOpenDown) return;
const isAngleCtaFocus = Array.from(els.angleCta).find((el) => el === document.activeElement);
if (els.presetClose !== document.activeElement && !isAngleCtaFocus) {
eventList.closePresetPopup();
}
},
openPresetPopup: function () {
if (!els.presetLayer.classList.contains('is-active')) {
els.presetOpen.classList.add('is-open');
els.presetLayer.classList.add('is-active');
els.presetOpen.setAttribute('aria-expanded', true);
els.presetClose.focus();
eventHandler.presetOpen();
} else {
eventList.closePresetPopup();
}
els.presetClose && els.presetClose.addEventListener('click', eventList.closePresetPopup);
},
closePresetPopup: function (e) {
if (els.presetLayer.classList.contains('is-active')) {
els.presetOpen.classList.remove('is-open');
els.presetLayer.classList.remove('is-active');
els.presetOpen.setAttribute('aria-expanded', false);
if (e && e.target.classList.contains('js-preset-close')) {
els.presetOpen.focus();
}
eventHandler.presetClose();
}
},
setAngle: function () {
if (!isViewerLoaded) return;
let target = this,
targetAngle = target.getAttribute('data-js-angle');
pdViewer.setModelDirection(targetAngle);
accessibility.selected(target);
},
setViewerAltText: function () {
let altText = '';
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
const activeModel = els.viewerSection.getAttribute('data-product-name');
altText = activeModel === 'galaxy-s25-plus' ? LOCAL_VARI.viewer.altTextPlus : LOCAL_VARI.viewer.altTextBasic;
}
pdViewer.setCanvasAltText(altText);
}
};
const accessibility = {
selected: function (target) {
for (let i = 0; i < els.angleCta.length; i++) {
els.angleCta[i].removeAttribute('title');
if (els.angleCta[i].classList.contains('is-selected')) {
els.angleCta[i].classList.remove('is-selected');
}
}
if (!target.classList.contains('is-selected')) {
target.classList.add('is-selected');
}
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
target.setAttribute('title', LOCAL_VARI.selected);
} else {
target.setAttribute('title', 'Selected');
}
}
};
return {
init: init
}
})();
})();
(function () {
window.flagship.features.colors = (function () {
const utils = window.flagship.common.utils;
let els = {},
colorchips = document.querySelectorAll('.js-colorchip'),
isViewerLoaded = utils.isLowNetwork ? true : false;
const init = function () {
els.section = document.querySelector('.js-colors');
for (let i = 0; i < colorchips.length; i++) {
colorchips[i].type = colorchips[i].parentElement.classList.contains('js-popup-colorchip') ? 'popup' : 'colors';
colorchips[i].isStatic = colorchips[i].parentElement.getAttribute('data-static');
flagship.features.colorchip(colorchips[i]);
}
setElements();
bindEvents();
initialize();
eventList.setActiveModel(els.viewerSection.getAttribute('data-product-name'));
}
const setElements = function () {
// model group
els.modelGroupBtns = els.section.querySelectorAll('.js-model-button');
// panel
els.panelWrap = els.section.querySelector('.js-panel-wrap');
els.panelInner = els.section.querySelectorAll('.js-panel-inner');
// viewer
els.viewerSection = els.section.querySelector('.js-colors-viewer');
els.viewerWrap = els.viewerSection.querySelector('.features-colors__viewer360-content');
// colorchip
els.allColorchip = els.section.querySelectorAll('.features-colors__colorchip');
els.allColorchipButtons = els.section.querySelectorAll('.js-colorchip-button');
els.highColorchipWrap = els.section.querySelector('.features-colors__colorchip--high');
els.highColorchipButtons = els.highColorchipWrap.querySelectorAll('.js-colorchip-button');
els.lowColorchipWrap = els.section.querySelector('.features-colors__colorchip--low');
els.colorchipNameBtns = els.section.querySelectorAll('.features-colors__chip-product-text');
els.colorchipButtons = els.lowColorchipWrap.querySelectorAll('.js-colorchip-button');
};
const bindEvents = function () {
eventHandler.click();
eventHandler.viewerEvents();
}
const initialize = function () {
if (els.modelGroupBtns.length === 0) {
els.allColorchip.forEach((colorchipWrap) => colorchipWrap.classList.add('is-single'));
}
}
const eventHandler = {
click: function () {
for (let i = 0; i < els.modelGroupBtns.length; i++) {
els.modelGroupBtns[i].addEventListener('click', eventList.clickModelButton);
}
},
viewerEvents: function () {
if (!PDVIEWER.getViewer()) return;
window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd);
}
}
const eventList = {
clickModelButton: async function () {
if (!isViewerLoaded) return;
const modelName = this.getAttribute('data-model-name');
if (modelName === els.viewerSection.getAttribute('data-product-name')) return;
if (!utils.isLowNetwork()) {
const viewerObj = PDVIEWER.getViewer();
if (!viewerObj || viewerObj.viewer.isChanging) return;
const activeColorchipEl = Array.from(els.highColorchipButtons).find((el) => el.classList.contains('is-active'));
const colorName = activeColorchipEl.getAttribute('data-colors');
viewerObj.showLoader();
await viewerObj.fadeChangeModel(modelName, colorName);
viewerObj.hideLoader();
}
els.viewerSection.setAttribute('data-product-name', modelName);
eventList.setActiveModel(modelName);
},
setActiveModel: function (activeName) {
eventList.fadeOut(activeName);
eventList.setModelName(activeName);
eventList.setColorchip(activeName);
eventList.setColorchipName(activeName);
if (!utils.isLowNetwork()) {
eventList.setCanvasAltText(activeName);
}
},
setModelName: function (activeName) {
for (let i = 0; i < els.modelGroupBtns.length; i++) {
const targetBtn = els.modelGroupBtns[i];
targetBtn.classList.remove('is-active');
targetBtn.removeAttribute('title');
if (targetBtn.getAttribute('data-model-name') === activeName) {
targetBtn.classList.add('is-active');
accessibility.selected(targetBtn);
}
}
},
setPanel: function (activeName) {
for (let i = 0; i < els.panelInner.length; i++) {
const panel = els.panelInner[i];
const panelModelName = panel.getAttribute('data-panel-model');
if (panelModelName === activeName) {
panel.classList.add('is-active');
eventList.setPanelItem(panel);
} else {
panel.classList.remove('is-active');
accessibility.inactivePanel(panel)
}
}
},
setPanelItem: function (panelInnerEl) {
const activeColorchip = Array.from(els.colorchipButtons).find((el) => el.classList.contains('is-active'));
const activeColorName = activeColorchip.getAttribute('data-colors');
const panelItems = panelInnerEl.querySelectorAll('.js-panel-item');
for (let i = 0; i < panelItems.length; i++) {
const item = panelItems[i];
if (item.classList.contains('is-active')) item.classList.remove('is-active');
if (item.getAttribute('id') === activeColorName) item.classList.add('is-active');
}
accessibility.activePanel(panelInnerEl, activeColorName);
},
setColorchip: function (activeName) {
for (let i = 0; i < els.allColorchipButtons.length; i++) {
const colorchipWrap = els.allColorchipButtons[i].parentElement;
const enableModels = colorchipWrap.getAttribute('data-active-model').split(',');
const isEnableModel = enableModels.find((name) => name === activeName);
if (!isEnableModel) {
colorchipWrap.style.display = 'none';
} else {
colorchipWrap.style.display = 'block';
}
}
},
setColorchipName: function (activeName) {
for (let i = 0; i < els.colorchipNameBtns.length; i++) {
const chipNameBtn = els.colorchipNameBtns[i];
const chipModel = chipNameBtn.getAttribute('data-color-model');
if (chipModel === activeName) {
chipNameBtn.classList.add('is-active');
} else {
chipNameBtn.classList.remove('is-active');
}
}
},
fadeOut: function (activeName) {
if (utils.isLowNetwork()) {
els.panelWrap.removeEventListener('transitionend', eventList.fadeIn.bind(null, activeName));
els.panelWrap.removeEventListener('transitionend', eventList.onFadeIn);
els.panelWrap.style.transition = 'opacity .3s ease-in-out';
els.panelWrap.style.opacity = 0;
els.panelWrap.addEventListener('transitionend', eventList.fadeIn.bind(null, activeName));
}
},
fadeIn: function (activeName) {
if (utils.isLowNetwork()) {
eventList.setPanel(activeName);
els.panelWrap.style.opacity = 1;
els.panelWrap.removeEventListener('transitionend', eventList.fadeIn.bind(null, activeName));
els.panelWrap.addEventListener('transitionend', eventList.onFadeIn);
}
},
onFadeIn: function () {
if (utils.isLowNetwork()) {
els.panelWrap.style.transition = '';
els.panelWrap.removeEventListener('transitionend', eventList.onFadeIn);
}
},
setCanvasAltText: function (activeName) {
let altText = '';
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
altText = activeName === 'galaxy-s25-plus' ? LOCAL_VARI.viewer.altTextPlus : LOCAL_VARI.viewer.altTextBasic;
}
if (PDVIEWER.getViewer()) PDVIEWER.getViewer().setCanvasAltText(altText);
},
viewerLoadEnd: function () {
isViewerLoaded = true;
}
};
const accessibility = {
selected: function (target) {
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
target.setAttribute('title', LOCAL_VARI.selected);
} else {
target.setAttribute('title', 'Selected');
}
},
activePanel: function (activePanel, activeColor) {
const panelItems = activePanel.querySelectorAll('.js-panel-item');
for (let i = 0; i < panelItems.length; i++) {
const item = panelItems[i];
if (item.getAttribute('id') === activeColor) {
item.setAttribute('aria-hidden', false);
} else {
item.setAttribute('aria-hidden', true);
}
}
},
inactivePanel: function (panel) {
const panelItems = panel.querySelectorAll('.js-panel-item');
for (let i = 0; i < panelItems.length; i++) {
panelItems[i].setAttribute('aria-hidden', true);
}
}
}
return {
init: init
}
})();
window.flagship.features.colorchip = function (colorchipWrap) {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
activeClass = 'is-active',
middleClass = 'is-middle',
endClass = 'is-end',
currentDevice = resize.checkResolution(),
prevDevice = null,
currentSlidesPerView = currentDevice.indexOf('mobile') > -1 ? 5 : 7,
isViewerLoaded = utils.isLowNetwork ? true : false;
const init = function () {
els.section = document.querySelector('.js-colors');
els.popup = document.querySelector('.js-viewer');
if (colorchipWrap.type == 'popup') {
colorchipWrap.contentWrap = els.popup;
} else {
colorchipWrap.contentWrap = els.section;
}
setElements();
setProperty();
bindEvents();
};
const setElements = function () {
// panel
els.panelWrap = els.section.querySelector('.js-panel-wrap');
els.panelInner = els.panelWrap.querySelectorAll('.js-panel-inner');
// colorchip
els.swiperContainer = colorchipWrap.querySelector('.js-colorchip-container');
els.colorchipButtons = colorchipWrap.querySelectorAll('.js-colorchip-button');
els.swiperArrowWrap = colorchipWrap.querySelector('.js-arrow-wrap');
els.swiperNextArrow = colorchipWrap.querySelector('.js-colorchip-next');
els.swiperPrevArrow = colorchipWrap.querySelector('.js-colorchip-prev');
els.colorchipNames = colorchipWrap.querySelectorAll('.js-colorchip-name');
// viewer
els.viewerSection = els.section.querySelector('.js-colors-viewer');
els.viewerWrap = els.viewerSection.querySelector('.features-colors__viewer360-content');
};
const setProperty = function () {
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].index = i;
}
};
const bindEvents = function () {
eventList.checkColorchipSwiper();
if (colorchipWrap.type != 'popup') eventList.setColors(0);
eventHandler.click();
eventHandler.keydown();
resize.add(eventList.resize);
eventHandler.scroll();
eventHandler.viewerEvents();
if (!utils.isLowNetwork()) {
eventHandler.clickHighColorchip();
}
};
const eventHandler = {
click: function () {
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].addEventListener('click', eventList.clickColorchip);
}
els.swiperNextArrow.addEventListener('click', accessibility.clickArrow);
els.swiperPrevArrow.addEventListener('click', accessibility.clickArrow);
},
keydown: function () {
els.swiperNextArrow.addEventListener('keydown', accessibility.clickArrow);
els.swiperPrevArrow.addEventListener('keydown', accessibility.clickArrow);
},
scroll: function () {
window.addEventListener('scroll', eventList.scroll);
},
viewerEvents: function () {
if (!PDVIEWER.getViewer()) return;
window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd);
},
clickHighColorchip: function () {
els.swiperContainer.addEventListener('click', eventList.colorchipsEnable);
}
};
const eventList = {
scroll: function () {
let winOffsetBottom = window.pageYOffset + window.innerHeight,
kv = document.querySelector('.features-kv'),
kvHeight = kv.getBoundingClientRect().height + utils.getNavHeight();
if (winOffsetBottom >= kvHeight) {
// bg load
colorchipWrap.bgImgs = colorchipWrap.querySelectorAll('.js-bg-img');
if (!!colorchipWrap.bgImgs) bgLoader.setResponsiveMedia(colorchipWrap.bgImgs);
window.removeEventListener('scroll', eventList.scroll);
}
},
checkColorchipSwiper: function () {
let colorchipSwiperLength = currentDevice.indexOf('mobile') > -1 ? 6 : 8;
if (els.colorchipButtons.length >= colorchipSwiperLength) {
if (els.swiperArrowWrap.style.display == 'none') {
els.swiperArrowWrap.style.display = '';
}
swiperEvents.set();
} else {
if (els.swiperArrowWrap.style.display != 'none') {
els.swiperArrowWrap.style.display = 'none';
}
if (els.colorchipSwiper != null) {
swiperEvents.destroy();
}
}
},
setColors: function (activeIndex) {
eventList.setColorchip(activeIndex);
eventList.setPanel(activeIndex);
eventList.setColorName(activeIndex);
// viewer
if (PDVIEWER.getViewer()) {
eventList.setViewerColor(activeIndex)
}
},
resize: function (currRes) {
currentDevice = currRes;
if (currentDevice !== prevDevice) {
currentSlidesPerView = currentDevice.indexOf('mobile') > -1 ? 5 : 7;
prevDevice = currentDevice;
eventList.checkColorchipSwiper();
}
},
clickColorchip: async function () {
if (!isViewerLoaded) return;
if (!utils.isLowNetwork() && PDVIEWER.getViewer()) {
if (PDVIEWER.getViewer().viewer.isChanging) return;
}
const targetColor = this;
eventList.setColors(targetColor.index);
},
setViewerColor: async function (activeIndex) {
const modelName = els.viewerSection.getAttribute('data-product-name');
const colorName = els.colorchipButtons[activeIndex].getAttribute('data-colors');
await PDVIEWER.getViewer().changeColor(modelName, colorName);
},
setColorchip: function (activeIndex) {
let targetcolorchipButton = els.colorchipButtons[activeIndex];
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].classList.remove(activeClass);
els.colorchipButtons[i].removeAttribute('title');
}
if (!targetcolorchipButton.classList.contains(activeClass)) {
targetcolorchipButton.classList.add(activeClass);
accessibility.selected(targetcolorchipButton);
}
},
setPanel: function (activeIndex) {
if (!colorchipWrap.isStatic) return;
const activePanelInner = Array.from(els.panelInner).find((el) => el.classList.contains('is-active'));
if (!activePanelInner) return;
const panelItems = activePanelInner.querySelectorAll('.js-panel-item');
for (let i = 0; i < panelItems.length; i++) {
if (panelItems[i].classList.contains(activeClass)) {
panelItems[i].classList.remove(activeClass);
panelItems[i].setAttribute('aria-hidden', true);
}
}
if (!panelItems[activeIndex].classList.contains(activeClass)) {
panelItems[activeIndex].classList.add(activeClass);
panelItems[activeIndex].setAttribute('aria-hidden', false);
}
},
setColorName: function (activeIndex) {
for (let i = 0; i < els.colorchipNames.length; i++) {
if (i !== activeIndex) {
utils.onAccessibility(els.colorchipNames[i]);
}
if (els.colorchipNames[i].classList.contains(activeClass)) {
els.colorchipNames[i].classList.remove(activeClass);
}
}
if (!els.colorchipNames[activeIndex].classList.contains(activeClass)) {
els.colorchipNames[activeIndex].classList.add(activeClass);
utils.offAccessibility(els.colorchipNames[activeIndex]);
}
},
viewerLoadEnd: function () {
isViewerLoaded = true;
},
colorchipsEnable: function () {
if (!PDVIEWER.getViewer().viewer.isChanging) {
els.section.classList.remove('is-viewer-loading');
}
}
};
const swiperEvents = {
set: function () {
if (els.colorchipSwiper == null) {
els.colorchipSwiper = new Swiper(els.swiperContainer, {
init: false,
navigation: {
nextEl: els.swiperNextArrow,
prevEl: els.swiperPrevArrow,
},
slidesPerView: currentSlidesPerView,
speed: 300,
});
els.colorchipSwiper.on('init', swiperEvents.init);
els.colorchipSwiper.on('slideChange', swiperEvents.slideChange);
els.colorchipSwiper.init();
}
},
init: function () {
let notification = this.el.querySelector('.swiper-notification');
if (!!notification) this.el.removeChild(notification);
els.swiperPrevArrow.removeAttribute('aria-label');
els.swiperPrevArrow.removeAttribute('role');
els.swiperNextArrow.removeAttribute('aria-label');
els.swiperNextArrow.removeAttribute('role');
accessibility.colorchip(els.colorchipSwiper);
accessibility.colorchipArrow(els.colorchipSwiper);
},
slideChange: function () {
accessibility.colorchip(els.colorchipSwiper);
accessibility.colorchipArrow(els.colorchipSwiper);
},
destroy: function () {
els.colorchipSwiper.destroy(true);
els.colorchipSwiper = null;
},
};
const accessibility = {
clickArrow: function (e) {
let arrowTimeout = null,
arrowStyleTimeout = null;
if ((e.type == 'keydown' && e.keyCode == 13) || e.type == 'click') {
e.preventDefault();
if (els.colorchipSwiper.isBeginning && !els.colorchipSwiper.isEnd) {
els.swiperContainer.parentElement.classList.remove(middleClass);
els.swiperContainer.parentElement.classList.remove(endClass);
clearTimeout(arrowTimeout);
arrowTimeout = setTimeout(function () {
els.swiperNextArrow.focus();
}, 300);
clearTimeout(arrowStyleTimeout);
arrowStyleTimeout = setTimeout(function () {
els.swiperPrevArrow.style.display = '';
}, 400);
} else if (!els.colorchipSwiper.isBeginning && els.colorchipSwiper.isEnd) {
els.swiperContainer.parentElement.classList.remove(middleClass);
els.swiperContainer.parentElement.classList.add(endClass);
clearTimeout(arrowTimeout);
arrowTimeout = setTimeout(function () {
els.swiperPrevArrow.focus();
}, 300);
clearTimeout(arrowStyleTimeout);
arrowStyleTimeout = setTimeout(function () {
els.swiperNextArrow.style.display = '';
}, 400);
}
if (!els.colorchipSwiper.isBeginning && !els.colorchipSwiper.isEnd) {
els.swiperContainer.parentElement.classList.remove(endClass);
els.swiperContainer.parentElement.classList.add(middleClass);
}
}
},
colorchip: function (swiperObj) {
let isNotActivedColorchips = null;
for (let i = 0; i < swiperObj.slides.length; i++) {
if (currentDevice.indexOf('mobile') > -1) {
isNotActivedColorchips = (i != swiperObj.activeIndex) && (i > swiperObj.activeIndex + 4) || (swiperObj.activeIndex > i);
} else {
isNotActivedColorchips = (i != swiperObj.activeIndex) && (i > swiperObj.activeIndex + 6) || (swiperObj.activeIndex > i);
}
if (isNotActivedColorchips) {
utils.onAccessibility(swiperObj.slides[i]);
setTimeout(function () {
utils.onAccessibility(swiperObj.slides[i]);
}, 300);
} else {
utils.offAccessibility(swiperObj.slides[i]);
setTimeout(function () {
utils.offAccessibility(swiperObj.slides[i]);
}, 300);
}
}
},
colorchipArrow: function (swiperObj) {
if (swiperObj.isBeginning && !swiperObj.isEnd) {
utils.onAccessibility(els.swiperPrevArrow);
utils.offAccessibility(els.swiperNextArrow);
} else if (!swiperObj.isBeginning && !swiperObj.isEnd) {
utils.offAccessibility(els.swiperPrevArrow);
utils.offAccessibility(els.swiperNextArrow);
} else {
utils.onAccessibility(els.swiperNextArrow);
utils.offAccessibility(els.swiperPrevArrow);
}
},
selected: function (target) {
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
target.setAttribute('title', LOCAL_VARI.selected);
} else {
target.setAttribute('title', 'Selected');
}
}
};
return init(colorchipWrap);
};
})();
(function () {
window.flagship.features.compares = (function () {
const init = function () {
const compares = document.querySelectorAll('.js-compare');
for (let i = 0; i < compares.length; i++) {
compares[i].type = compares[i].getAttribute('data-compare-type') || null;
flagship.features.compare(compares[i]);
}
}
return {
init: init
}
})();
window.flagship.features.compare = function (compareWrap) {
const resize = window.flagship.common.resize,
compareOption = window.flagship.features.compareOption;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution(),
isMousedown = false;
els.currentOldValue = null,
els.compareOldValue = null;
const compareData = {
'SM-S931': {
modelName: 'galaxy-s25',
modelText: 'Galaxy S25',
weight: {
A: 162,
B: 162,
},
thickness: 7.2,
hrs: {
A: 29,
B: 29,
}
},
'SM-S936': {
modelName: 'galaxy-s25-plus',
modelText: 'Galaxy S25+',
weight: {
A: 190,
B: 190,
},
thickness: 7.3,
hrs: {
A: 30,
B: 30,
}
},
'SM-S916': {
modelName: 'galaxy-s23-plus',
modelText: 'Galaxy S23+',
weight: {
A: 196,
B: 195,
},
thickness: 7.6,
hrs: {
A: 27,
B: 27,
}
},
'SM-S911': {
modelName: 'galaxy-s23',
modelText: 'Galaxy S23',
weight: {
A: 168,
B: 168,
},
thickness: 7.6,
hrs: {
A: 22,
B: 22,
}
},
'SM-S906': {
modelName: 'galaxy-s22-plus',
modelText: 'Galaxy S22+',
weight: {
A: 196,
B: 195,
},
thickness: 7.6,
hrs: {
A: 21,
B: 22,
}
},
'SM-S901': {
modelName: 'galaxy-s22',
modelText: 'Galaxy S22',
weight: {
A: 168,
B: 167,
},
thickness: 7.6,
hrs: {
A: 18,
B: 19,
}
},
'SM-G996': {
modelName: 'galaxy-s21-plus',
modelText: 'Galaxy S21+ 5G',
weight: {
A: 202,
B: 200,
},
thickness: 7.8,
hrs: {
A: 22,
B: 22,
}
},
'SM-G991': {
modelName: 'galaxy-s21',
modelText: 'Galaxy S21 5G',
weight: {
A: 171,
B: 169,
},
thickness: 7.9,
hrs: {
A: 19,
B: 20,
}
}
}
const init = function () {
els.section = compareWrap;
if (!!els.section) {
setElements();
setProperty();
bindEvents();
eventList.setCompareVari();
eventList.getDeviceInfo().then((modelCode) => {
if (!modelCode || !Object.keys(compareData).find((sku) => sku === modelCode) || (modelCode === 'SM-S931' || 'SM-S936')) {
modelCode = 'SM-G996';
}
const currentModel = 'SM-S936';
eventList.setDefault(els.currentVisual, currentModel);
eventList.selectItem(els.currentVisual, currentModel);
eventList.setDefault(els.compareVisual, modelCode);
eventList.selectItem(els.compareVisual, modelCode);
});
}
};
const setElements = function () {
els.visualEls = [];
els.currentVisual = els.section.querySelector('.js-current-visual');
els.compareVisual = els.section.querySelector('.js-compare-visual');
els.visualEls.push(els.currentVisual, els.compareVisual);
els.visualEls.forEach((visualEl) => visualEl.dropdown = visualEl.querySelector('.js-dropdown'));
if (els.section.type === 'camera') {
els.zoomTexts = els.section.querySelectorAll('.js-copy-zoom');
} else if (els.section.type === 'design') {
els.thicknessTexts = els.section.querySelectorAll('.js-copy-thickness');
els.weightTexts = els.section.querySelectorAll('.js-copy-weight');
els.visualEls.forEach((visualEl) => {
visualEl.compareThickness = visualEl.querySelector('.js-thickness-value');
visualEl.compareWeight = visualEl.querySelector('.js-weight-value');
visualEl.thicknessUnits = visualEl.querySelectorAll('.js-thickness-unit');
visualEl.weightUnits = visualEl.querySelectorAll('.js-weight-unit');
});
} else if (els.section.type === 'battery') {
els.playbackTexts = els.section.querySelectorAll('.js-copy-playback');
els.visualEls.forEach((visualEl) => {
visualEl.compareHrs = visualEl.querySelector('.js-hrs-value');
visualEl.batteryUnits = visualEl.querySelectorAll('.js-battery-unit');
})
}
};
const setProperty = function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.selectBox = visualEl.dropdown.querySelector('.js-select-box');
visualEl.dropdown.button = visualEl.dropdown.querySelector('.js-select-button');
visualEl.dropdown.list = visualEl.dropdown.querySelector('.js-select-list');
visualEl.dropdown.listItem = visualEl.dropdown.list.querySelectorAll('.js-select-item');
});
if (els.section.type === 'camera') {
els.zoomTexts.forEach((textEl) => {
textEl.key = 'zoom';
textEl.defaultText = 'Zoom';
})
} else if (els.section.type === 'design') {
els.thicknessTexts.forEach((textEl) => {
textEl.key = 'thickness';
textEl.defaultText = 'Thickness';
});
els.weightTexts.forEach((textEl) => {
textEl.key = 'weight';
textEl.defaultText = 'Weight';
});
els.visualEls.forEach((visualEl) => {
for (let i = 0; i < visualEl.thicknessUnits.length; i++) {
visualEl.thicknessUnits[i].key = 'mm';
visualEl.thicknessUnits[i].defaultText = 'mm';
}
for (let i = 0; i < visualEl.weightUnits.length; i++) {
visualEl.weightUnits[i].key = 'g';
visualEl.weightUnits[i].defaultText = 'g';
}
});
} else if (els.section.type === 'battery') {
els.playbackTexts.forEach((textEl) => {
textEl.key = 'playback'
textEl.defaultText = 'Video Playback';
});
els.visualEls.forEach((visualEl) => {
for (let i = 0; i < visualEl.batteryUnits.length; i++) {
visualEl.batteryUnits[i].key = 'hrs';
visualEl.batteryUnits[i].defaultText = 'hrs';
}
});
}
};
const bindEvents = function () {
resize.add(eventList.resize);
eventHandler.click();
eventHandler.mousedown();
eventHandler.mouseup();
eventHandler.change();
eventHandler.resize();
eventHandler.offFocusSelect()
};
const eventHandler = {
click: function () {
els.section.addEventListener('click', function (event) {
const isButton = event.target.classList.contains('js-select-button');
const isOption = event.target.classList.contains('js-select-item');
if (isButton) {
eventHandler.dropdownClickCheck(event);
eventList.dropdowntoggle(event);
accessibility.changeAriaHidden();
} else if (isOption) {
eventList.clickCompareModel(event.target);
eventList.clickOption(event.target);
eventList.dropdownClose();
accessibility.dropdownFocus(event.target);
}
});
els.visualEls.forEach((visualEl) => visualEl.dropdown.selectBox.addEventListener("click", eventList.clickSelect));
},
change: function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.selectBox.addEventListener('change', function (event) {
eventList.clickOption(event.target);
eventList.changeSelectBox(event.target);
});
});
},
resize: function () {
window.addEventListener('resize', function () {
accessibility.changeAriaHidden();
});
},
mousedown: function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.button.addEventListener('mousedown', function () {
isMousedown = true;
});
});
},
mouseup: function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.button.addEventListener('mouseup', function () {
isMousedown = false;
});
});
},
dropdownClickCheck: function () {
document.addEventListener('click', eventList.checkDropdownClick);
},
offDropdownClickCheck: function () {
document.removeEventListener('click', eventList.checkDropdownClick);
},
onFocusInDropdown: function () {
eventHandler.offFocusInDropdown();
document.addEventListener('focusin', eventList.focusInDropdown);
},
offFocusInDropdown: function () {
document.removeEventListener('focusin', eventList.focusInDropdown);
},
offFocusSelect: function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.selectBox.addEventListener('blur', eventList.offFocusSelect)
});
}
}
const eventList = {
isDropdownSelect: function () {
return els.visualEls.every((visualEl) => visualEl.dropdown.selectBox.clientHeight > 0);
},
dropdowntoggle: function (event) {
const isExpanded = event.target.getAttribute('aria-expanded') === 'true';
event.target.setAttribute('aria-expanded', !isExpanded);
if (!isExpanded) {
event.target.classList.add('is-active');
eventHandler.onFocusInDropdown();
setTagging.close(event.target);
} else {
event.target.classList.remove('is-active');
setTagging.open(event.target);
}
},
checkDropdownClick: function (event) {
const isButton = event.target.classList.contains('js-select-button');
const isOption = event.target.classList.contains('js-select-item');
if (!isButton && !isOption) {
eventList.dropdownClose();
}
},
dropdownClose: function () {
els.visualEls.forEach((visualEl) => {
visualEl.dropdown.button.setAttribute('aria-expanded', 'false');
visualEl.dropdown.button.classList.remove('is-active');
const button = visualEl.dropdown.button;
if (!(button.getAttribute('aria-expanded') === 'true')) {
setTagging.open(button);
}
});
eventHandler.mouseup();
eventHandler.offDropdownClickCheck();
eventHandler.offFocusInDropdown();
accessibility.changeAriaHidden();
},
focusInDropdown: function (event) {
const isInList = event.target.closest('.js-select-list');
const isButton = event.target.classList.contains('js-select-button');
if (!isInList && !(isButton && isMousedown)) {
eventList.dropdownClose();
}
},
clickOption: function (target) {
const targetParent = target.closest('.js-dropdown');
targetParent.selectBoxButton = targetParent.querySelector('.js-select-button');
if (eventList.isDropdownSelect()) {
const selectIndex = targetParent.selectBox.selectedIndex,
optionList = targetParent.selectBox.options;
Array.from(optionList).forEach(option => option.removeAttribute('selected'));
optionList[selectIndex].setAttribute('selected', true)
targetParent.button.textContent = optionList[selectIndex].textContent;
} else {
const selectItemDataValue = target.getAttribute('data-value');
Array.from(targetParent.selectBox.children).forEach((optionEl) => {
const value = optionEl.getAttribute('value');
if (value !== selectItemDataValue) {
optionEl.removeAttribute('selected');
} else {
optionEl.setAttribute('selected', 'true');
}
});
targetParent.selectBox.value = selectItemDataValue;
targetParent.button.textContent = target.textContent;
}
},
setDefault: function (visualEl, modelValue) {
const {
modelText
} = compareData[modelValue];
visualEl.dropdown.button.innerText = modelText;
accessibility.changeAriaHidden();
},
changeDescription: function (modelValue, visualEl) {
const textLists = visualEl.querySelectorAll('.js-camera-text-change');
if (textLists.length > 0) {
textLists.forEach(function (list) {
const matchDataItems = list.dataset.value.split(' ');
const isMatched = matchDataItems.some(item => item === modelValue);
!isMatched ? accessibility.ariaHiddenTrue(list) : accessibility.ariaHiddenFalse(list);
if (isMatched && !els.targetOldValue) {
list.classList.add('is-init');
} else if (els.targetOldValue && els.targetOldValue !== modelValue) {
list.classList.remove('is-active');
list.classList.remove('is-show');
list.classList.remove('is-init');
if (isMatched) {
accessibility.ariaHiddenFalse(list);
list.classList.add('is-show');
setTimeout(function () {
list.classList.add('is-active');
})
}
}
})
}
},
clickCompareModel: function (optionEl) {
const modelValue = optionEl.getAttribute('data-value') || '';
const targetVisualEl = els.visualEls.find((visualEl) => Array.from(visualEl.dropdown.listItem).includes(optionEl));
eventList.selectItem(targetVisualEl, modelValue);
},
changeSelectBox: function (selectEl) {
const targetVisualEl = els.visualEls.find((visualEl) => visualEl.dropdown.selectBox === selectEl);
const selectedEl = Array.from(selectEl.childNodes).find((el) => el.selected);
const modelValue = selectedEl.value;
eventList.selectItem(targetVisualEl, modelValue);
},
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
eventList.responsive();
prevDevice = currDevice;
}
eventList.dropdownClose();
els.visualEls.forEach((visualEl) => visualEl.dropdown.selectBox.classList.remove("is-active"));
},
responsive: function () {},
getDeviceInfo: function () {
return new Promise((resolve, reject) => {
if (navigator.userAgentData) {
navigator.userAgentData.getHighEntropyValues(['model']).then((uaData) => {
const modelCode = uaData.model ? uaData.model.slice(0, 7) : null;
resolve(modelCode);
}).catch((err) => reject(err));
} else {
const compareModelList = Object.keys(compareData);
const sku = compareModelList.find((sku) => navigator.userAgent.includes(sku));
resolve(sku);
}
});
},
setCompareVari: function () {
let targetTexts = [];
if (els.section.type === 'design') {
targetTexts = Array.from(els.thicknessTexts).concat(Array.from(els.weightTexts));
els.visualEls.forEach((visualEl) => {
targetTexts = targetTexts.concat(Array.from(visualEl.thicknessUnits))
.concat(Array.from(visualEl.weightUnits))
});
} else if (els.section.type === 'camera') {
targetTexts = Array.from(els.zoomTexts);
} else if (els.section.type === 'battery') {
targetTexts = Array.from(els.playbackTexts);
els.visualEls.forEach((visualEl) => {
targetTexts = targetTexts.concat(Array.from(visualEl.batteryUnits))
})
}
targetTexts.forEach((el) => {
const {
key,
defaultText
} = el;
if (typeof COMPARE_VARI != 'undefined' && !!COMPARE_VARI) {
el.innerText = COMPARE_VARI[key] || defaultText;
} else {
el.innerText = defaultText;
}
});
},
setCompareValueText: function (visualEl, modelValue) {
const {
thickness,
weight,
hrs
} = compareData[modelValue];
if (els.section.type === 'design') {
const weightType = weight[compareOption.type] ? weight[compareOption.type] : weight['B'];
visualEl.compareThickness.innerText = thickness;
visualEl.compareWeight.innerText = weightType;
} else if (els.section.type === 'camera') {
eventList.changeDescription(modelValue, visualEl);
} else if (els.section.type === 'battery') {
const hrsType = hrs[compareOption.type] ? hrs[compareOption.type] : hrs['B'];
visualEl.compareHrs.innerText = hrsType;
}
},
selectItem: function (visualEl, modelValue) {
els.targetOldValue = visualEl.classList.contains('js-current-visual') ? els.currentOldValue : els.compareOldValue;
eventList.setCompareValueText(visualEl, modelValue);
if (els.targetOldValue && els.targetOldValue !== modelValue) {
const textAreaList = visualEl.querySelectorAll('.js-text-change');
textAreaList.forEach((textEl) => textEl.classList.remove('is-active'));
setTimeout(() => textAreaList.forEach((textEl) => textEl.classList.add('is-active')), 0);
}
accessibility.changeSelected(visualEl, modelValue);
if (els.targetOldValue === els.currentOldValue) {
els.currentOldValue = modelValue;
} else {
els.compareOldValue = modelValue;
}
},
clickSelect: function (event) {
event.target.classList.toggle("is-active");
},
offFocusSelect: function () {
els.visualEls.forEach((visualEl) => {
if (visualEl.dropdown.selectBox.classList.contains("is-active")) {
visualEl.dropdown.selectBox.classList.remove("is-active");
}
});
}
};
const accessibility = {
changeSelected: function (visualEl, modelCode) {
const targetDropdownItem = visualEl.querySelectorAll('.js-select-item');
const target = Array.from(targetDropdownItem).find((el) => el.getAttribute('data-value') === modelCode);
const selectBoxOptions = visualEl.querySelector('.js-select-box').options;
for (let i = 0; i < selectBoxOptions.length; i++) {
const optionValue = selectBoxOptions[i].getAttribute('value');
if (optionValue !== modelCode) {
selectBoxOptions[i].removeAttribute('selected');
} else {
selectBoxOptions[i].setAttribute('selected', true)
}
}
for (let i = 0; i < targetDropdownItem.length; i++) {
if (targetDropdownItem[i] !== target) {
targetDropdownItem[i].removeAttribute('title');
} else {
accessibility.selected(target);
}
}
},
changeAriaHidden: function () {
els.visualEls.forEach((visualEl) => {
eventList.isDropdownSelect();
if (eventList.isDropdownSelect()) {
accessibility.ariaHiddenTrue(visualEl.dropdown.list);
accessibility.ariaHiddenTrue(visualEl.dropdown.button);
if (visualEl.dropdown.selectBox.hasAttribute('aria-hidden')) {
accessibility.ariaHiddenFalse(visualEl.dropdown.selectBox);
}
} else {
const isOpened = visualEl.dropdown.button.getAttribute('aria-expanded') === 'true';
setTimeout(() => {
// Console warning on aria-hidden on focus element
accessibility.ariaHiddenTrue(visualEl.dropdown.selectBox);
accessibility.ariaHiddenFalse(visualEl.dropdown.button);
if (isOpened) {
accessibility.ariaHiddenFalse(visualEl.dropdown.list);
} else {
accessibility.ariaHiddenTrue(visualEl.dropdown.list);
}
});
}
});
},
ariaHiddenTrue: function (element) {
element.setAttribute('aria-hidden', true);
element.setAttribute('tabindex', '-1');
},
ariaHiddenFalse: function (element) {
element.removeAttribute('aria-hidden');
element.removeAttribute('tabindex');
},
dropdownFocus: function (target) {
const targetVisual = target.closest('.js-current-visual') ? target.closest('.js-current-visual') : target.closest('.js-compare-visual')
targetVisual.dropdown.button.focus();
},
selected: function (target) {
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
target.setAttribute('title', LOCAL_VARI.selected);
} else {
target.setAttribute('title', 'Selected');
}
}
}
const setTagging = {
open: function (target) {
if (target.hasAttribute('data-omni')) {
let dataOmni = target.getAttribute('data-omni').toLowerCase();
target.setAttribute('data-omni', dataOmni.replace('close', 'open'));
}
if (target.hasAttribute('ga-la')) {
let gaLa = target.getAttribute('ga-la').toLowerCase();
target.setAttribute('ga-la', gaLa.replace('close', 'open'));
}
},
close: function (target) {
if (target.hasAttribute('data-omni')) {
let dataOmni = target.getAttribute('data-omni').toLowerCase();
target.setAttribute('data-omni', dataOmni.replace('open', 'close'));
}
if (target.hasAttribute('ga-la')) {
let gaLa = target.getAttribute('ga-la').toLowerCase();
target.setAttribute('ga-la', gaLa.replace('open', 'close'));
}
}
};
return init(compareWrap);
};
})();
(function () {
window.flagship.features.designSpec = (function () {
const utils = window.flagship.common.utils;
let els = {};
let status = {};
const init = function () {
els.section = document.querySelector('.features-design-spec');
els.layerPopup = document.querySelector('.js-compare-popup');
if (!!els.section && !!els.layerPopup) {
setElements();
setStatus();
bindEvents();
}
};
const setElements = function () {
els.contents = document.querySelector('#contents');
els.popupDimmed = document.querySelector('.js-compare-popup__dimmed');
els.openCta = document.querySelector('.js-compare-popup-opener');
els.closeCta = document.querySelectorAll('.js-compare-popop__close-cta');
els.popupWrapper = document.querySelector('.features-design-spec-popup__wrapper');
els.supClicker = els.layerPopup.querySelectorAll('a.click_sup');
els.hashPopupOpener = null;
};
const setStatus = function () {
status.isHash = false;
}
const bindEvents = function () {
eventList.setPopup();
for (let i = 0; i < els.supClicker.length; i++) {
if (!!els.supClicker) {
els.supClicker[i].addEventListener('click', eventList.onClickSup);
}
}
};
const eventList = {
setPopup: function () {
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: '.js-compare-popup',
openerEvent: {
element: els.openCta,
},
closeCtas: els.closeCta,
dimmed: els.popupDimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function () {
els.layerPopup.removeAttribute('aria-hidden');
els.layerPopup.removeAttribute('tabindex');
els.layerPopup.classList.add('is-init');
if (`#${els.openCta.getAttribute('data-hash')}` == window.location.hash) {
status.isHash = true;
els.hashPopupOpener = els.openCta;
}
},
end: function () {
els.layerPopup.classList.add('is-open');
},
},
hide: {
start: function () {
els.layerPopup.classList.remove('is-open');
},
end: function (target) {
if (utils.detector.isIosDevice)
target.openerCta.style.display = '';
setTimeout(function () {
els.layerPopup.classList.remove('is-init');
}, 300);
if (els.popupWrapper) {
els.popupWrapper.scrollTop = 0;
}
if (status.isHash && els.hashPopupOpener) {
els.hashPopupOpener.focus();
setTimeout(function () {
els.hashPopupOpener.focus();
status.isHash = false;
els.hashPopupOpener = null;
}, 300);
}
}
}
});
},
onClickSup: function () {
els.layerPopup.hide();
},
};
return {
init: init,
}
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.features = window.flagship.features || {};
window.flagship.features.display = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let objs = {};
let status = {};
let currDevice = resize.checkResolution();
let prevDevice = null;
const init = function () {
els.section = document.querySelector('.features-display');
if (!!els.section) {
setElements();
setStatus();
bindEvents();
}
};
const setElements = function () {
els.resizeTimeout = null;
els.displayBarWrap = els.section.querySelector('.features-display__bar');
els.displayBar = els.displayBarWrap.querySelector('.features-display__bar-line');
els.displayImage = els.section.querySelector('.features-display__image');
els.displayCoverImage = els.section.querySelector('.features-display__cover');
els.isGrab = false;
els.isAction = false;
els.displayCoverLeftWrap = els.section.querySelector('.features-display__tap--left');
els.displayCoverLeftBtn = els.section.querySelector('.features-display__tap--left button');
els.displayCoverRightBtn = els.section.querySelector('.features-display__tap--right button');
els.controller = els.section.querySelector('.features-display__button');
els.imgWrap = els.section.querySelector('.features-display__image-inner');
els.tabWrap = els.section.querySelector('.features-display__tap-wrap');
maxPercent = currDevice === 'mobileS' ? 0.805 : currDevice === 'mobile' ? 0.845 : 0.985;
minPercent = currDevice === 'mobileS' ? 0.193 : currDevice === 'mobile' ? 0.155 : 0.015;
};
const setStatus = function () {
status.isTabMove = false;
};
const bindEvents = function () {
window.addEventListener('DOMContentLoaded', onLoadHandler, {
once: true
});
window.addEventListener('scroll', onScrollHandler);
els.section.addEventListener('click', grabEventHandler.onMoveEvent);
els.section.addEventListener('mousedown', grabEventHandler.onStart);
els.section.addEventListener('mousemove', grabEventHandler.onMove);
els.section.addEventListener('mouseup', grabEventHandler.onEnd);
els.section.addEventListener('mouseleave', grabEventHandler.onEnd);
els.section.addEventListener('touchstart', grabEventHandler.onStart);
els.section.addEventListener('touchmove', grabEventHandler.onMove);
els.section.addEventListener('touchend', grabEventHandler.onEnd);
els.section.addEventListener('touchcancel', grabEventHandler.onEnd);
els.section.addEventListener('touchmove', grabEventHandler.moveDisabled);
els.section.addEventListener('mousemove', grabEventHandler.moveDisabled);
els.section.addEventListener('click', grabEventHandler.moveDisabled);
resize.add(onResizeHandler);
}
const setAnimations = function () {
let minValue = currDevice.indexOf('mobile') > -1 ? 27.5 : 25;
let maxValue = currDevice.indexOf('mobile') > -1 ? 72.5 : 75;
TweenMax.set(els.displayBar, {
left: `${minValue}%`,
ease: Power2.easeOut
});
TweenMax.set(els.controller, {
left: `${minValue}%`,
ease: Power2.easeOut
});
TweenMax.set(els.displayCoverImage, {
width: `${minValue}%`,
ease: Power2.easeOut
});
objs.barAnim = new TimelineLite();
objs.barAnim
.to(els.displayBar, 1, {
left: `${maxValue}%`,
ease: Power2.easeOut
})
.to(els.displayBar, 1, {
left: 50 + '%',
ease: Power2.easeOut
});
objs.buttonAnim = new TimelineLite();
objs.buttonAnim
.to(els.controller, 1, {
left: `${maxValue}%`,
ease: Power2.easeOut
})
.to(els.controller, 1, {
left: 50 + '%',
ease: Power2.easeOut
});
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.displayCoverImage, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut
})
.to(els.displayCoverImage, 1, {
width: 50 + '%',
ease: Power2.easeOut
});
TweenMax.set(els.displayCoverLeftWrap, {
width: `${minValue}%`,
ease: Power2.easeOut
});
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.displayCoverLeftWrap, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut
})
.to(els.displayCoverLeftWrap, 1, {
width: 50 + '%',
ease: Power2.easeOut
});
};
const onLoadHandler = function () {
onScrollHandler();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
clearTimeout(els.resizeTimeout);
els.resizeTimeout = setTimeout(function () {
onScrollHandler();
}, 150);
if (currDevice != prevDevice) {
onResponsiveHandler();
prevDevice = currDevice;
}
};
const onResponsiveHandler = function () {
maxPercent = currDevice === 'mobileS' ? 0.805 : currDevice === 'mobile' ? 0.845 : 0.985;
minPercent = currDevice === 'mobileS' ? 0.193 : currDevice === 'mobile' ? 0.155 : 0.015;
TweenMax.set(els.displayBar, {
left: 50 + '%'
});
TweenMax.set(els.controller, {
left: 50 + '%'
});
TweenMax.set(els.displayCoverImage, {
width: 50 + '%'
});
TweenMax.set(els.displayCoverLeftWrap, {
width: 50 + '%'
});
};
const onScrollHandler = function () {
let winOffsetTop = window.pageYOffset + utils.getNavHeight();
let winOffsetBottom = window.pageYOffset + window.innerHeight;
let targetRect = els.displayImage.getBoundingClientRect();
let targetOffsetTop = window.pageYOffset + targetRect.top;
let targetOffsetBottom = window.pageYOffset + targetRect.bottom;
if ((winOffsetBottom - (window.innerHeight * 0.25) > targetOffsetTop &&
winOffsetTop + (window.innerHeight * 0.25) < targetOffsetBottom) && !els.isAction) {
setAnimations();
els.isAction = true;
}
};
const grabEventHandler = {
onStart: function (e) {
e.target.matches('.features-display__button') && (els.isGrab = true);
},
onEnd: function () {
els.isGrab = false;
},
onMove: function (e) {
if (els.isGrab) {
e && e.preventDefault();
let wrapRect = els.displayBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let xPosition = !e.touches ? e.pageX : e.touches[0].pageX;
let barPosition = xPosition - wrapRect.left;
if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
else if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
let barPercent = ((barPosition / wrapRect.width) * 100);
els.displayBar.style.left = barPercent + '%';
els.controller.style.left = barPercent + '%';
els.displayCoverImage.style.width = barPercent + '%';
grabEventHandler.setArrowSize(barPercent);
}
},
onMoveEvent: function (e) {
let wrapRect = els.displayBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let barRect = els.displayBar.getBoundingClientRect();
let barPosition = barRect.left - wrapRect.left;
let moveValue = Math.ceil(wrapMaxWidth / ((currDevice.indexOf('desktop') > -1) ? 8 : 5.5));
let isMove = e.target.classList.contains('features-display__tap-button') || e.target.classList.contains('features-display__button');
if (isMove) {
status.isTabMove = true;
if (e.type == 'click' && e.target.classList.contains('features-display__tap-button')) {
let leftBtn = 'features-display__tap--left';
let rightBtn = 'features-display__tap--right';
if (e.target.parentElement.classList.contains(leftBtn)) {
barPosition -= moveValue;
} else if (e.target.parentElement.classList.contains(rightBtn)) {
barPosition += moveValue;
}
}
if (e.target.classList.contains('features-display__button') && (e.keyCode == 39 || e.keyCode == 37)) {
e && e.preventDefault();
if (e.keyCode == 39) barPosition += moveValue;
else if (e.keyCode == 37) barPosition -= moveValue;
}
if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
else if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
let barPercent = ((barPosition / wrapRect.width) * 100);
TweenMax.to(els.displayBar, 0.3, {
left: barPercent + '%',
ease: Power2.easeOut
});
TweenMax.to(els.controller, 0.3, {
left: barPercent + '%',
ease: Power2.easeOut
});
TweenMax.to(els.displayCoverImage, 0.3, {
width: barPercent + '%',
ease: Power2.easeOut
});
grabEventHandler.setArrowSize(barPercent);
}
},
moveDisabled: function () {
const controllerObserver = new MutationObserver(() => {
setTimeout(() => {
const leftValue = els.controller.style.left;
if (leftValue >= Math.trunc(maxPercent * 100) + "%") {
els.displayCoverRightBtn.disabled = true;
if(els.displayCoverRightBtn.disabled == true) {
utils.onAccessibility(els.displayCoverRightBtn);
els.displayCoverLeftBtn.focus();
}
} else if (leftValue == minPercent * 100 + "%") {
els.displayCoverLeftBtn.disabled = true;
if(els.displayCoverLeftBtn.disabled == true) {
utils.onAccessibility(els.displayCoverLeftBtn);
els.displayCoverRightBtn.focus();
}
} else {
els.displayCoverRightBtn.removeAttribute("disabled");
els.displayCoverLeftBtn.removeAttribute("disabled");
utils.offAccessibility(els.displayCoverRightBtn);
utils.offAccessibility(els.displayCoverLeftBtn);
}
}, 0);
});
controllerObserver.observe(els.controller, {
attributes: true,
attributeFilter: ['style']
});
},
setArrowSize: function (barPercent) {
let imgWidth = els.imgWrap.getBoundingClientRect().width;
let tabWidth = els.tabWrap.getBoundingClientRect().width;
let imgValue = imgWidth * (barPercent * (1 / 100));
let tabValue = (imgWidth - tabWidth) / 2;
let moveTabBtnValue = Math.floor(imgValue - tabValue);
if (status.isTabMove) {
TweenMax.to(els.displayCoverLeftWrap, 0.3, {
width: moveTabBtnValue + 'px',
ease: Power2.easeOut
});
status.isTabMove = false;
} else {
els.displayCoverLeftWrap.style.width = moveTabBtnValue + 'px';
}
}
};
return {
init: init
}
})();
})();
;
(function () {
window.flagship.features.faq = (function () {
const resize = window.flagship.common.resize,
utils = window.flagship.common.utils;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector('.js-faq');
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.faqList = els.section.querySelector('.js-faq-list');
};
const bindEvents = function () {
resize.add(eventList.resize);
eventList.setAccordion();
};
const eventList = {
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
let isOpenedItems = els.faqList.querySelectorAll('.js-faq-item.is-open');
if (isOpenedItems.length > 0) {
for (let i = 0; i < isOpenedItems.length; i++) {
let isOpenedItemContent = isOpenedItems[i].querySelector('.js-faq-answer'),
clientHeight = isOpenedItemContent.children[0].clientHeight;
isOpenedItemContent.style.height = `${clientHeight}px`;
}
}
},
setAccordion: function () {
els.accordion = new window.flagship.common.accordion({
wrap: els.faqList,
classList: {
item: 'js-faq-item',
button: 'js-faq-open',
contents: 'js-faq-answer',
activeClass: 'is-open'
},
open: {
start: function (target) {
let targetInnerCta = target.querySelector('.js-featue-cta');
if (targetInnerCta) targetInnerCta.addEventListener('click', accessibility.moveFocus);
}
}
});
els.accordion.init();
},
};
const accessibility = {
moveFocus: function (e) {
if (this.getAttribute('href').indexOf('#') > -1) {
e.preventDefault();
let sectionId = this.getAttribute('href'),
section = document.querySelector(`${sectionId}`),
sectionTop = section.getBoundingClientRect().top,
movePosition = (sectionTop + window.pageYOffset) - utils.getNavHeight(),
clickable = section.querySelectorAll('a, button'),
title = section.querySelector('h2') || section.querySelector('h3');
if (!!title) {
let _focusOut = function () {
title.removeAttribute('tabindex');
title.removeEventListener('focusout', _focusOut);
};
title.addEventListener('focusout', _focusOut);
title.setAttribute('tabindex', 0);
title.focus();
} else {
clickable[0].focus();
}
window.scrollTo(0, movePosition);
}
}
};
return {
init: init
}
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.features = window.flagship.features || {};
window.flagship.features.highlightsZone = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
const Swiper = window.flagship.Swiper;
let els = {};
let prevDevice;
let swiperObj = {};
let pointerOffset = {};
let currDevice = resize.checkResolution();
let ctaPlayStatus = true;
let scrollProgress = null;
let lowNetwork = document.documentElement.classList.contains('low_network');
const init = function () {
els.section = document.querySelector('.features-highlights');
if (!!els.section) {
setElements();
setProperty();
bindEvents();
}
};
const setElements = function () {
els.mainContainer = els.section.querySelector('.js-highlights-main-container');
els.mainSwiperSlides = els.mainContainer.querySelectorAll('.swiper-slide');
els.mediaWrap = els.mainContainer.querySelectorAll('.features-highlights__content');
els.indication = els.section.querySelector('.common-carousel__pagination');
els.prevArrow = els.mainContainer.parentElement.querySelector('.swiper-button-prev');
els.nextArrow = els.mainContainer.parentElement.querySelector('.swiper-button-next');
els.featureTagging = els.mainContainer.getAttribute('data-tagging-feature');
els.scrollbar = els.section.querySelector('.js-highlights-scrollbar');
};
const setProperty = function () {
els.mainContainer.autoPlay = true;
for (let i = 0; i < els.mediaWrap.length; i++) {
els.mediaWrap[i].isVideo = els.mediaWrap[i].classList.contains('is-video');
els.mediaWrap[i].isImage = els.mediaWrap[i].classList.contains('is-image');
if (els.mediaWrap[i].isVideo) {
els.mediaWrap[i].videoWrap = els.mediaWrap[i].querySelector('.js-video-wrap');
els.mediaWrap[i].video = els.mediaWrap[i].querySelector('.common-video__video');
els.mediaWrap[i].coverImageHighband = els.mediaWrap[i].querySelector('.common-video__cover-image--highband');
els.mediaWrap[i].coverImageLowband = els.mediaWrap[i].querySelector('.common-video__cover-image--lowband');
els.mediaWrap[i].controller = els.mediaWrap[i].querySelector('.js-video-control');
els.mediaWrap[i].controller.video = els.mediaWrap[i].video;
els.mediaWrap[i].progressBar = els.mediaWrap[i].querySelector('.common-video__control-progress-bar');
els.mediaWrap[i].startPoint = els.mediaWrap[i].getAttribute('data-start-point');
els.mediaWrap[i].reversePoint = els.mediaWrap[i].getAttribute('data-reverse-point');
els.mediaWrap[i].moStartPoint = els.mediaWrap[i].getAttribute('data-mo-start-point');
els.mediaWrap[i].moReversePoint = els.mediaWrap[i].getAttribute('data-mo-reverse-point');
} else if (els.mediaWrap[i].isImage) {
els.mediaWrap[i].img = els.mediaWrap[i].querySelector('.js-image-wrap > img');
}
}
};
const bindEvents = function () {
eventList.load();
eventHandler.click();
eventHandler.scroll();
eventHandler.flickSwiper();
resize.add(eventList.resize);
};
const eventHandler = {
flickSwiper: function () {
els.mainContainer.addEventListener('touchstart', function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.touches[0].clientX;
els.mainContainer.addEventListener('touchmove', eventList.getPointerMoveSize);
});
els.mainContainer.addEventListener('touchend', function () {
if (pointerOffset.start == null) return;
els.mainContainer.autoPlay = false;
els.mainContainer.removeEventListener('touchmove', eventList.getPointerMoveSize);
});
els.mainContainer.addEventListener('mousedown', function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.offsetX;
els.mainContainer.addEventListener('mousemove', eventList.getPointerMoveSize);
});
els.mainContainer.addEventListener('mouseup', function () {
els.mainContainer.autoPlay = false;
els.mainContainer.removeEventListener('mousemove', eventList.getPointerMoveSize);
});
els.mainContainer.addEventListener('mouseleave', function () {
if (pointerOffset.start == null) return;
pointerOffset.start = null;
pointerOffset.current = null;
els.mainContainer.removeEventListener('mousemove', eventList.getPointerMoveSize);
});
els.scrollbar.addEventListener('mousedown', function () {
els.mainContainer.autoPlay = false;
});
els.scrollbar.addEventListener('mouseleave', function () {
els.mainContainer.autoPlay = false;
});
},
click: function () {
for (let i = 0; i < els.mediaWrap.length; i++) {
if (els.mediaWrap[i].isVideo) {
els.mediaWrap[i].controller.addEventListener('click', eventList.clickVideoCta);
els.mediaWrap[i].controller.addEventListener('click', eventList.stopAutoPlay);
}
}
if (els.prevArrow && els.nextArrow) {
els.nextArrow.addEventListener('click', function (e) {
eventList.stopAutoPlay(e);
eventList.swiperArrow(e);
});
els.prevArrow.addEventListener('click', function (e) {
eventList.stopAutoPlay(e);
eventList.swiperArrow(e);
});
}
els.scrollbar.addEventListener('click', function (e) {
eventList.stopAutoPlay(e);
});
},
scroll: function () {
window.addEventListener('scroll', eventList.scroll);
}
}
const eventList = {
load: function () {
swiperEvents.set();
swiperObj.main.init();
eventList.setVideo();
eventList.setScene();
eventList.scroll();
},
resize: function () {
currDevice = resize.checkResolution();
if (prevDevice != currDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
swiperObj.main.slideTo(0, false);
},
setVideo: function () {
for (let i = 0; i < els.mediaWrap.length; i++) {
if (els.mediaWrap[i].isVideo) {
utils.videoHandler({
playType: 'scrollPlay',
startPoint: (currDevice.indexOf('mobile') > -1) ? els.mediaWrap[i].moStartPoint : els.mediaWrap[i].startPoint,
reversePoint: (currDevice.indexOf('mobile') > -1) ? els.mediaWrap[i].moReversePoint : els.mediaWrap[i].reversePoint,
wrap: els.mediaWrap[i].videoWrap,
video: els.mediaWrap[i].video,
controller: els.mediaWrap[i].controller,
playCallback: function () {
setTagging.pause(this.controller);
this.video.timeupdateEvent = function () {
if (this.currentTime > 0) {
if (!this.videoHandler.wrap.classList.contains('is-started', 'is-playing')) {
this.videoHandler.wrap.classList.add('is-started', 'is-playing');
}
eventList.setProgerssDuration(i);
this.removeEventListener('timeupdate', this.timeupdateEvent);
}
}
this.video.addEventListener('timeupdate', this.video.timeupdateEvent);
this.video.removeEventListener('canplay', eventList.playVideoOnce);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
eventList.autoSlideNext(1000);
}
});
}
}
},
autoSlideNext: function (time) {
if (els.mainContainer.autoPlay) {
if (scrollProgress > 40 && scrollProgress < 55) {
clearTimeout(swiperObj.main.videoTiming);
swiperObj.main.videoTiming = setTimeout(() => {
swiperObj.main.slideNext();
}, time);
} else {
clearTimeout(swiperObj.main.videoTiming);
}
}
},
playVideoOnce: function () {
this.play();
},
playVideo: function (video) {
for (let i = 0; i < els.mediaWrap.length; i++) {
if (els.mediaWrap[i].isVideo && video.readyState >= 1) {
video.play();
} else {
video.addEventListener('canplay', eventList.playVideoOnce, {
once: true
});
}
}
},
clickVideoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
eventList.playVideo(e.currentTarget.video);
ctaPlayStatus = true;
} else {
e.currentTarget.video.pause();
ctaPlayStatus = false;
}
}
},
stopAutoPlay: function (e) {
if (e.target.classList.contains('js-video-control') ||
e.target.classList.contains('swiper-button-next') ||
e.target.classList.contains('swiper-button-prev') ||
e.target.classList.contains('common-carousel__pagination-button') ||
e.target.classList.contains('js-highlights-scrollbar')
) {
els.mainContainer.autoPlay = false;
}
},
swiperArrowVisibility: function () {
let mainSlidesLength = els.mainSwiperSlides.length - 1;
let mainSwiper = swiperObj.main;
let prevArrow = mainSwiper.previousIndex > mainSwiper.realIndex;
let nextArrow = mainSwiper.previousIndex < mainSwiper.realIndex;
if (els.prevArrow && els.nextArrow) {
if (prevArrow) {
if (mainSwiper.realIndex == (mainSlidesLength - 1)) {
if (els.nextArrow.style.display == 'none') els.nextArrow.style.display = '';
} else if (mainSwiper.realIndex == 0) {
els.prevArrow.style.display = 'none';
}
}
if (nextArrow) {
if (mainSwiper.realIndex == 1) {
if (els.prevArrow.style.display == 'none') els.prevArrow.style.display = '';
} else if (mainSwiper.realIndex == mainSlidesLength) {
els.nextArrow.style.display = 'none';
}
}
}
},
swiperArrow: function (e) {
let mainSwiper = swiperObj.main;
let mainSlidesLength = els.mainSwiperSlides.length - 1;
let prevArrow = e.target.classList.contains('swiper-button-prev');
let nextArrow = e.target.classList.contains('swiper-button-next');
if (prevArrow) {
clearTimeout(swiperObj.main.videoTiming);
mainSwiper.slidePrev();
if (mainSwiper.realIndex == 0) {
setTimeout(() => {
els.nextArrow.blur();
els.nextArrow.focus();
}, 300);
}
}
if (nextArrow) {
clearTimeout(swiperObj.main.videoTiming);
mainSwiper.slideNext();
if (mainSwiper.realIndex == mainSlidesLength) {
setTimeout(() => {
els.prevArrow.blur();
els.prevArrow.focus();
}, 300);
}
}
},
scroll: function () {
let isIndex = swiperObj.main.realIndex;
els.section.scene.trackAnimation(function () {
scrollProgress = this.progress;
if (els.mediaWrap[isIndex].isVideo) {
let isMainVideoHandler = els.mediaWrap[isIndex].video.videoHandler;
if (!lowNetwork && ctaPlayStatus) isMainVideoHandler.scrollActive(scrollProgress);
} else if (els.mediaWrap[isIndex].isImage) {
eventList.slideVideoPlay();
}
})
},
slideVideoPlay: function () {
let isIndex = swiperObj.main.realIndex;
if (els.mediaWrap[isIndex].isVideo) {
let isMainVideoHandler = els.mediaWrap[isIndex].video.videoHandler;
isMainVideoHandler.eventList.reset.call(isMainVideoHandler);
els.mediaWrap[isIndex].videoWrap.classList.remove('is-started');
setTimeout(function () {
if (ctaPlayStatus) {
eventList.playVideo(els.mediaWrap[isIndex].video);
setTimeout(function () {
if (els.mainContainer.autoPlay) isMainVideoHandler.controller.blur();
if (els.mainContainer.autoPlay) isMainVideoHandler.controller.focus();
if (isIndex == (swiperObj.main.slides.length)) {
els.mainContainer.autoPlay = false;
}
}, 900);
}
}, 50);
} else if (els.mediaWrap[isIndex].isImage && ctaPlayStatus) {
eventList.autoSlideNext(3000);
}
},
setProgerssDuration: function (index) {
let isDuration = els.mediaWrap[index].video.duration;
if (!!!els.mediaWrap[index].durationSet) {
els.mediaWrap[index].progressBar.style.animationDuration = `${isDuration}s`;
els.mediaWrap[index].durationSet = true;
}
},
setMedia: function (index) {
let videoLength = els.mainSwiperSlides.length - 1;
let isIndex = index + 1;
let loadIndex = isIndex < videoLength ? isIndex : videoLength;
let mainVideoloadComplateLength = els.mainContainer.querySelectorAll('.is-video-load-complete').length - 1;
for (let i = 0; i <= loadIndex; i++) {
if (els.mediaWrap[i].isVideo) {
if (mainVideoloadComplateLength != videoLength && !els.mediaWrap[i].video.classList.contains('is-video-load-complete')) {
if (!els.mediaWrap[i].video.classList.contains('is-mp4video-load-complete')) {
if (!!els.mediaWrap[i].video) videoLoader.setResponsiveMedia([els.mediaWrap[i].video]);
if (!lowNetwork) {
if (!!els.mediaWrap[i].coverImageHighband) imageLoader.setResponsiveMedia([els.mediaWrap[i].coverImageHighband]);
} else {
if (!!els.mediaWrap[i].coverImageLowband) imageLoader.setResponsiveMedia([els.mediaWrap[i].coverImageLowband]);
}
}
}
}
}
},
pauseVideo: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (els.mediaWrap[i].isVideo) {
let slideVideo = swiper.slides[i].querySelector('video');
if (!slideVideo.paused) {
slideVideo.pause();
}
}
}
},
getCarouselSizeInfo: function (swiper) {
let slideLength = swiper.slides.length;
let slideWidth = swiper.slides[0].clientWidth;
let slideMargin = parseInt(window.getComputedStyle(swiper.slides[0]).margin.split(' ')[1]);
let slideSize = slideWidth + slideMargin;
let maxMoveSize = ((slideSize * slideLength) - slideMargin) - swiper.wrapperEl.clientWidth;
let viewWidth = swiper.wrapperEl.clientWidth;
let viewLength = parseInt((viewWidth + slideMargin) / slideSize);
let lastBeforeSize = slideLength == 2 ? 0 : Math.abs((maxMoveSize - slideSize)) + Math.abs((viewWidth - slideWidth));
let isMoveSize = Math.abs(parseInt(window.getComputedStyle(swiper.wrapperEl).transform.split(',')[4]));
return {
slideWidth: slideWidth,
slideMargin: slideMargin,
slideSize: slideSize,
maxMoveSize: maxMoveSize,
viewWidth: viewWidth,
viewLength: viewLength,
lastBeforeSize: lastBeforeSize,
isMoveSize: isMoveSize
}
},
setScene: function () {
els.section.scene = SCROLLER({
trackElement: els.section,
useFixed: false
});
},
getPointerMoveSize: function (e) {
if (!!e.touches) {
pointerOffset.current = e.touches[0].clientX;
} else {
pointerOffset.current = e.offsetX;
}
}
}
const swiperEvents = {
set: function () {
if (swiperObj.main == null) {
swiperObj.main = new Swiper(els.mainContainer, {
init: false,
speed: 600,
slidesPerView: 'auto',
scrollbar: {
el: els.scrollbar,
},
pagination: {
el: els.indication,
clickable: true,
renderBullet: function (index, className) {
const slide = this.slides[index];
const slideTitle = slide.getAttribute('data-slide-title') || '';
const tagging = {
omniType: "microsite_gallery",
actionType: "gallery",
contentType: "feature gallery",
taggingValue: els.featureTagging + ":sldr-dots:" + `${index + 1}`
}
this.slideTitle = slideTitle;
return `
`;
}
},
a11y: false,
});
swiperObj.main.on('init', swiperEvents.init);
swiperObj.main.on('slideChange', swiperEvents.slideChange);
swiperObj.main.on('transitionEnd', swiperEvents.transitionEnd);
swiperObj.main.on('paginationUpdate', swiperEvents.paginationUpdate);
}
if (els.prevArrow) {
els.prevArrow.style.display = 'none';
}
},
init: function () {
if (els.prevArrow && els.nextArrow) {
let isNextArrow = this.el.parentElement.querySelector('.swiper-button-next');
let isPrevArrow = this.el.parentElement.querySelector('.swiper-button-prev');
isNextArrow.removeAttribute('aria-label');
isNextArrow.removeAttribute('role');
isPrevArrow.removeAttribute('aria-label');
isPrevArrow.removeAttribute('role');
}
accessibility.slide(this);
},
paginationUpdate: function () {
const bullets = this.pagination.bullets;
const slides = this.slides;
for (let i = 0; i < bullets.length; i++) {
const slideTitle = i < slides.length ? this.slides[i].getAttribute('data-slide-title') : "";
const bullet = bullets[i];
const button = bullet.querySelector('button');
const isActive = bullet.classList.contains('swiper-pagination-bullet-active');
const selected = isActive ? ` ${LOCAL_VARI.selected}` : '';
button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${slideTitle}`);
}
},
slideChange: function () {
accessibility.slide(this);
eventList.pauseVideo(this);
if (this.realIndex > 0) eventList.setMedia(this.realIndex);
if (!lowNetwork) eventList.slideVideoPlay();
eventList.swiperArrowVisibility();
},
transitionEnd: function () {
setTimeout(() => {
let carouselInfo = eventList.getCarouselSizeInfo(this);
let lastIndex = this.slides.length - 1;
let lastSlide = this.slides[lastIndex];
let lastBeforeSlide = this.slides[lastIndex - 1];
let secondSlide = this.slides[lastIndex - 2];
let lastSlideIsVideo = lastSlide.querySelector('.features-highlights__content.is-video');
let lastBeforeSlideIsVideo = lastBeforeSlide.querySelector('.features-highlights__content.is-video');
let isIndex = swiperObj.main.previousIndex;
let isMoveSize = currDevice != 'mobile' ? carouselInfo.isMoveSize : carouselInfo.isMoveSize + Math.abs(carouselInfo.slideMargin);
if (els.mediaWrap[isIndex].isVideo) els.mediaWrap[isIndex].video.pause();
if (carouselInfo.lastBeforeSize + (carouselInfo.slideWidth / 2) < isMoveSize && carouselInfo.maxMoveSize - (carouselInfo.slideWidth / 2) <= isMoveSize) {
if (currDevice.indexOf('mobile') > -1) {
eventList.pauseVideo(this);
if (!lowNetwork && ctaPlayStatus && lastSlideIsVideo) {
lastSlide.querySelector('video').play();
}
lastSlide.classList.add('swiper-slide-active');
lastBeforeSlide.classList.add('swiper-slide-prev');
lastSlide.classList.remove('swiper-slide-next');
lastBeforeSlide.classList.remove('swiper-slide-active');
secondSlide.classList.remove('swiper-slide-prev');
if (els.nextArrow) {
if (els.nextArrow.style.display != 'none') {
els.nextArrow.style.display = 'none';
setTimeout(() => {
els.prevArrow.blur();
els.prevArrow.focus();
}, 300);
}
}
utils.offAccessibility(this.slides[lastIndex]);
utils.onAccessibility(this.slides[lastIndex - 1]);
}
} else if (carouselInfo.lastBeforeSize <= carouselInfo.isMoveSize) {
if (currDevice.indexOf('mobile') > -1) {
eventList.pauseVideo(this);
if (!lowNetwork && ctaPlayStatus && lastBeforeSlideIsVideo) {
lastBeforeSlide.querySelector('video').play();
}
lastSlide.classList.add('swiper-slide-next');
lastBeforeSlide.classList.add('swiper-slide-active');
secondSlide.classList.add('swiper-slide-prev');
lastSlide.classList.remove('swiper-slide-active');
lastBeforeSlide.classList.remove('swiper-slide-prev');
if (els.nextArrow) {
if (els.nextArrow.style.display == 'none') els.nextArrow.style.display = '';
}
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
}
}
}, 0);
},
destroy: function (swiper) {
if (swiper != null) {
swiper.navigation.destroy(true);
swiper.destroy(true);
swiper = null;
}
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute('data-omni')) {
let dataOmni = targetController.getAttribute('data-omni').toLowerCase();
targetController.setAttribute('data-omni', dataOmni.replace('pause', 'play'));
}
if (targetController.hasAttribute('ga-la')) {
let gaLa = targetController.getAttribute('ga-la').toLowerCase();
targetController.setAttribute('ga-la', gaLa.replace('pause', 'play'));
}
},
pause: function (targetController) {
if (targetController.hasAttribute('data-omni')) {
let dataOmni = targetController.getAttribute('data-omni').toLowerCase();
targetController.setAttribute('data-omni', dataOmni.replace('play', 'pause'));
}
if (targetController.hasAttribute('ga-la')) {
let gaLa = targetController.getAttribute('ga-la').toLowerCase();
targetController.setAttribute('ga-la', gaLa.replace('play', 'pause'));
}
}
};
const accessibility = {
slide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
}
};
return {
init: init,
};
})();
})();
;
(function () {
window.flagship.features.kv = (function () {
let els = {}
const init = function () {
els.section = document.querySelector('.js-kv');
els.hasOffer = document.querySelector('.feature-kv__anchor');
if (!!els.section && !!els.hasOffer) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.kvDropdown = els.section.querySelector('.js-kv-dropdown');
els.kvDropdownItem = els.section.querySelector('.features-kv__description');
els.kvDropdownSpan = els.section.querySelector('.js-button-text');
els.kvDropdownDataOmni = els.kvDropdown.getAttribute('data-omni');
els.kvDropdownGaLa = els.kvDropdown.getAttribute('ga-la');
};
const bindEvents = function () {
eventHandler.click();
eventList.defaultText();
};
const eventHandler = {
click: function () {
els.kvDropdown.addEventListener('click', eventList.click);
}
}
const eventList = {
defaultText: function () {
const openText = els.kvDropdownSpan.getAttribute('data-open-text');
els.kvDropdownSpan.textContent = openText;
},
click: function () {
const openText = els.kvDropdownSpan.getAttribute('data-open-text');
const closeText = els.kvDropdownSpan.getAttribute('data-close-text');
if (els.kvDropdownItem.classList.contains('is-open')) {
els.kvDropdownItem.classList.remove('is-open');
els.kvDropdown.classList.remove('is-active');
els.kvDropdown.setAttribute('ga-la', els.kvDropdownDataOmni.replace('close', 'open'));
els.kvDropdown.setAttribute('data-omni', els.kvDropdownGaLa.replace('close', 'open'));
els.kvDropdownSpan.textContent = openText;
} else {
els.kvDropdownItem.classList.add('is-open');
els.kvDropdown.classList.add('is-active');
els.kvDropdown.setAttribute('ga-la', els.kvDropdownDataOmni.replace('open', 'close'));
els.kvDropdown.setAttribute('data-omni', els.kvDropdownGaLa.replace('open', 'close'));
els.kvDropdownSpan.textContent = closeText;
}
}
};
return {
init: init
}
})();
})();
(function () {
window.flagship.features.proVisual = (function () {
const utils = window.flagship.common.utils;
resize = flagship.common.resize;
let els = {};
let currDevice = resize.checkResolution();
const init = function () {
setElements();
bindEvents();
};
const setElements = function () {
els.cameraSpec = document.querySelectorAll('.features-provisual-engine__spec-item');
};
const bindEvents = function () {
resize.add(eventList.resize);
eventList.setTextScene();
eventList.textMotion();
eventHandler.scroll();
};
const eventHandler = {
scroll: function () {
window.addEventListener('scroll', eventList.textMotion);
}
};
const eventList = {
resize: function (currRes) {
currDevice = currRes;
},
textMotion: function () {
for (let i = 0; i < els.cameraSpec.length; i++) {
els.cameraSpec[i].sceneObj.trackAnimation(function () {
if (10 <= this.progress && this.progress <= 100) {
els.cameraSpec[i].classList.add('is-active');
}
if (this.progress < 0) {
els.cameraSpec[i].classList.remove('is-active');
}
});
}
},
setTextScene: function () {
for (let i = 0; i < els.cameraSpec.length; i++) {
els.cameraSpec[i].sceneObj = SCROLLER({
trackElement: els.cameraSpec[i],
useFixed: false,
useStrictMode: false
});
}
}
};
return {
init: init
}
})();
})();
(function () {
window.flagship.features.howtoPopup = (function () {
const utils = window.flagship.common.utils;
const Swiper = window.flagship.Swiper;
resize = window.flagship.common.resize;
let els = {};
let currDevice = resize.checkResolution();
prevDevice = null,
currOpener = null;
const init = function () {
els.layerPopup = document.querySelector('.js-howto-popup');
if (!!els.layerPopup) {
setElements();
setAttribute();
bindEvents();
eventList.setPopup();
}
};
const setElements = function () {
els.contents = document.querySelector('#contents');
els.openCtas = document.querySelectorAll('.js-howto-popup-opener');
els.openCta = document.querySelectorAll("[data-howto-slide]:not(.js-howto-popup [data-howto-slide])");
// popup content
els.closeCta = document.querySelectorAll('.js-howto-popup-close-cta');
els.ytIframe = els.layerPopup.querySelector('iframe');
els.ytDesc = els.layerPopup.querySelector('.js-howto-popup-youtube-desc');
els.dimmed = els.layerPopup.querySelector('.js-howto-popup-dimmed');
// swiper
els.swiperContainer = els.layerPopup.querySelector('.swiper-container');
els.featureTagging = els.swiperContainer.getAttribute('data-tagging-feature');
els.buttonWrap = els.swiperContainer.querySelectorAll('.swiper-slide');
els.thumbList = els.swiperContainer.querySelectorAll("[data-howto-slide]");
els.arrowWrap = els.swiperContainer.querySelector('.js-howto-popup-arrow-wrap');
els.indication = els.swiperContainer.querySelector('.common-carousel__pagination');
els.scrollbar = els.swiperContainer.querySelector('.js-howto-popup-scrollbar');
};
const setAttribute = function () {
els.openCta.forEach((cta)=> {
const howtoAtrr = cta.getAttribute("data-howto-slide");
els.thumbList.forEach((thumb)=>{
if(thumb.getAttribute("data-howto-slide") === howtoAtrr) {
thumb.openerCta = cta;
thumb.button = thumb.querySelector('button');
thumb.button.openerCta = thumb.openerCta;
cta.thumb = thumb;
}
});
});
};
const bindEvents = function () {
eventHandler.buttonsClick();
resize.add(eventList.resize);
};
const eventHandler = {
buttonsClick: function () {
for (let i = 0; i < els.buttonWrap.length; i++) {
els.buttonWrap[i].button.addEventListener('click', function () {
eventList.setYoutube(els.buttonWrap[i]);
});
}
}
};
const eventList = {
setPopup: function () {
for (let i = 0; i < els.thumbList.length; i++) {
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: '.js-howto-popup',
openerEvent: {
element: els.openCtas[i],
},
closeCtas: els.closeCta,
dimmed: els.dimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
let allVideos = document.querySelectorAll('video');
for (let i = 0; i < allVideos.length; i++) {
if (!allVideos[i].paused) allVideos[i].pause();
}
els.layerPopup.removeAttribute('aria-hidden');
els.layerPopup.removeAttribute('tabindex');
els.layerPopup.classList.add('is-init');
currOpener = target.openerCta;
eventList.itemImageLoader();
swiperEventList.activeCheck();
},
end: function (target) {
els.layerPopup.classList.add('is-open');
eventList.setYoutube(target);
}
},
hide: {
start: function () {
els.layerPopup.classList.remove('is-open');
},
end: function (target) {
if (utils.detector.isIosDevice) target.openerCta.style.display = '';
setTimeout(function () {
els.layerPopup.classList.remove('is-init');
eventList.removeYoutube();
accessibility.removeTitle();
swiperEventList.destroy();
els.layerPopup.children[0].scrollTop = 0;
}, 300);
}
}
});
}
},
setYoutube: function (target) {
let opener = target.openerCta,
ytSrc = 'htt' + 'ps://www.youtube.com/embed/' + opener.getAttribute('data-youtube-id') + '?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1',
ytTitle = opener.getAttribute('data-youtube-title'),
ytBlind = opener.querySelector('.blind').innerHTML;
els.ytIframe.setAttribute('src', ytSrc);
els.ytIframe.setAttribute('title', ytTitle);
els.ytDesc.innerHTML = ytBlind;
let oldActive = els.swiperContainer.querySelector('.swiper-slide.is-active');
if (!!oldActive) {
oldActive.classList.remove('is-active');
oldActive.button.removeAttribute('title');
}
opener.thumb.classList.add('is-active');
accessibility.setTitle(opener.thumb);
},
removeYoutube: function () {
els.ytIframe.removeAttribute('src');
els.ytDesc.innerHTML = '';
},
resize: function (currRes) {
currDevice = currRes;
if (prevDevice != currDevice) {
if (els.layerPopup.classList.contains('is-open')) {
swiperEventList.activeCheck();
}
prevDevice = currDevice;
}
},
itemImageLoader: function () {
for (let i = 0; i < els.buttonWrap.length; i++) {
if (!els.buttonWrap[i].querySelector('img').classList.contains('is-img-load-complete')) {
imageLoader.setResponsiveMedia([els.buttonWrap[i].querySelector('img')]);
}
}
}
};
const swiperEventList = {
set: function () {
if (els.swiperContainer.swiper == null) {
els.swiperContainer.swiper = new Swiper(els.swiperContainer, {
init: false,
slidesPerView: 'auto',
scrollbar: {
el: els.scrollbar,
draggable: true
},
pagination: {
el: els.indication,
clickable: true,
renderBullet: function (index, className) {
const slide = this.slides[index];
const slideTitle = slide.getAttribute('data-slide-title') || '';
const tagging = {
omniType: "microsite_gallery",
actionType: "gallery",
contentType: "feature gallery",
taggingValue: els.featureTagging + ":sldr-dots:" + `${index + 1}`
}
this.slideTitle = slideTitle;
return `
`;
}
},
a11y: false,
});
els.swiperContainer.swiper.on('init', swiperEventList.init);
els.swiperContainer.swiper.on('slideChange', swiperEventList.slideChange);
els.swiperContainer.swiper.on('paginationUpdate', swiperEventList.paginationUpdate);
els.swiperContainer.swiper.init();
}
},
destroy: function () {
if (els.swiperContainer.swiper != null) {
els.swiperContainer.swiper.scrollbar.dragEl.style = '';
els.swiperContainer.swiper.scrollbar.destroy(true);
els.swiperContainer.swiper.navigation.destroy(true);
els.swiperContainer.swiper.destroy(true);
els.swiperContainer.swiper = null;
}
},
init: function () {
let self = this,
notification = self.el.querySelector('.swiper-notification');
if (!!notification) self.el.removeChild(notification);
setTimeout(function () {
accessibility.slide();
}, 500);
},
paginationUpdate: function () {
const bullets = this.pagination.bullets;
const slides = this.slides;
let arrSlidesTitle = [];
for (let i = 0; i < slides.length; i++) {
arrSlidesTitle.push(slides[i].dataset.slideTitle)
}
for (let i = 0; i < bullets.length; i++) {
const bullet = bullets[i];
const button = bullet.querySelector('button');
const isActive = bullet.classList.contains('swiper-pagination-bullet-active');
const selected = isActive ? ` ${LOCAL_VARI.selected}` : '';
if (currDevice.indexOf('mobile') > -1) {
button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${arrSlidesTitle[i]}, ${arrSlidesTitle[i+1]}`);
} else {
button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${arrSlidesTitle[i]}, ${arrSlidesTitle[i+1]}, ${arrSlidesTitle[i+2]}, ${arrSlidesTitle[i+3]}`);
}
}
},
slideChange: function () {
accessibility.slide();
},
activeCheck: function () {
let isSlide = ((currDevice.indexOf('mobile') > -1) && (els.buttonWrap.length >= 3)) ||
((currDevice.indexOf('desktop') > -1 || currDevice == 'tablet') && (els.buttonWrap.length >= 5));
if (isSlide) {
els.scrollbar.style.display = 'block';
swiperEventList.set();
let buttonIndex;
for(let i=0; i < els.buttonWrap.length; i++) {
if (els.buttonWrap[i] === currOpener.thumb) {
buttonIndex = i;
}
}
const changeSlide = buttonIndex - 1;
if (currOpener != null) {
els.swiperContainer.swiper.slideTo(changeSlide, 0);
}
} else {
els.scrollbar.style.display = 'none';
swiperEventList.destroy();
}
}
};
const accessibility = {
setTitle: function (target) {
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
target.button.setAttribute('title', LOCAL_VARI.selected);
} else {
target.button.setAttribute('title', 'Selected');
}
},
removeTitle: function () {
for(let i = 0; i < els.buttonWrap.length; i++) {
if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) {
els.buttonWrap[i].button.removeAttribute('title', LOCAL_VARI.selected);
} else {
els.buttonWrap[i].button.removeAttribute('title', 'Selected')
}
};
},
slide: function () {
let slidePerviewValue = currDevice.indexOf('mobile') > -1 ? 2 : 4;
let getPerviewIndex = function () {
return slidePerviewValue - 1;
}
for (let i = 0; i < els.swiperContainer.swiper.slides.length; i++) {
if (i >= els.swiperContainer.swiper.activeIndex && i <= (els.swiperContainer.swiper.activeIndex + getPerviewIndex())) {
utils.offAccessibility(els.swiperContainer.swiper.slides[i]);
} else {
utils.onAccessibility(els.swiperContainer.swiper.slides[i]);
}
}
}
};
return {
init: init,
}
})();
})();
flagship.features.initialize = (function () {
window.flagship.common.resize.bindEvent();
const init = function () {
flagship.features.highlightsZone.init();
flagship.features.carousel.init();
flagship.features.clickToVideo.init();
flagship.features.howtoPopup.init();
flagship.features.headline.init();
flagship.features.scrollVideo.init();
flagship.features.aiOverview.init();
flagship.features.faq.init();
flagship.features.colorsViewer.init();
flagship.features.colors.init();
flagship.features.arBanner.init();
flagship.features.accordion.init();
flagship.features.designSpec.init();
flagship.features.display.init();
flagship.features.proVisual.init();
flagship.features.kv.init();
flagship.features.compares.init();
};
return {
init: init
}
})();
flagship.features.initialize.init();
});
Registo de Produtos
Registo rápido e fácil de produtos.. Dicas e serviços personalizados.
N.º série / IMEI
Introduza o seu número de série/IMEI
Ler QR
Scan the QR code on your products for easy registration.
* Esta funcionalidade só é suportada em aparelhos Samsung Eletrodomésticos e monitores B2C não inteligentes.
Introduza o seu número de série/IMEI
Registo rápido e fácil de produtos.
Insira o n.º de 11 ou 15 dígitos.
O produto já está registado. Veja se tem o n.º de série ou IMEI certo.
Tipo
Subtipo
Categoria
Back view
The serial number and model name are printed on the label located on the lower left side of the device’s exterior, near the front. They are also on a second label, inside the refrigerator compartment on a side wall above the top shelf.
Back view
The serial number and model name are printed on the label located on the lower left side of the device’s exterior, near the front. They are also on a second label, inside the refrigerator compartment on a side wall above the top shelf.
O registo de produto está quase completo!!
Tem um n.º de série ou IMEI válido. Agora escolha o modelo do seu produto.