Skip to content

360º de exclusividade. 360º de identidade.

Log in Cart
00 items

Language

  • pt-PT
  • fr
  • en
  • es

Currency

USD EUR GBP CHF
Fitness360º
  • Produtos
  • <tc>Free weight</tc>
  • Functional training
  • <tc>Sports</tc>
Cart
00 items
Fitness360º
Log in
Cart
00 items
Home Account

Sign in

Reset your password

We will send you an email to reset your password
Cancel

Login

Please enter your email and password below to access your account
Lost your password?

Register

Please register below to create an account

Fitness360.shop | Tudo para o teu treino. Em casa, no ginásio, em qualquer lado.

Fitness360.shop | Tudo para o teu treino. Em casa, no ginásio, em qualquer lado.

Pagamento à cobrança

30 dias de devolução

Pagamento seguro

Pagamento fracionado com seQura

Pagamento à cobrança

30 dias de devolução

Pagamento seguro

Pagamento fracionado com seQura

Pagamento à cobrança

30 dias de devolução

Pagamento seguro

Pagamento fracionado com seQura

Contactos

Fitness360º

Rua José Afonso, 5A, Laranjeiras, 1600-130 Lisboa

geralfitness360@gmail.com

Apoio ao cliente

  • Who we are
  • Contacts
  • Shipping and Returns
  • Refund Policy
  • Privacy Policy
  • Service Terms
  • Complaint book
  • Pagamento Fraccionado com SeQura

Categorias

  • Cardio
  • Musculação
  • Acessórios

Subscreve a newsletter

Assine e receba o nosso e-book "15 melhores ginásios em casa (para sua inspiração)".

  • Início
  • Pesquisar
  • Conta
  • Carrinho
    00 items
  • Colecções
  • Choosing a selection results in a full page refresh.

Thanks for subscribing!

This email has been registered!

Shop the look

Choose Options

Edit Option
Back In Stock Notification
this is just a warning
Login
Forgot your password? Create account
Shopping Cart
0 items
Close
Search
Menu
Sign In Create an Account
/** * SOLUÇÃO DEFINITIVA: Shopify + Ella + Customily * Foca em Observação de URL e Sincronização de Slider */ (function() { const CONFIG = { selectors: { mainImg: '.product-single__photo img, .featured-image', thumbnails: '.product-single__thumb img, .slider-nav img', canvas: '#customily-canvas', swatches: '.swatch-element, .single-option-selector' }, debounceTime: 100 }; function getVariantFromUrl() { const urlParams = new URLSearchParams(window.location.search); const variantId = urlParams.get('variant'); if (!variantId || !window.product) return null; return window.product.variants.find(v => v.id == variantId); } function hasCustomilyDesign() { const canvasContainer = document.querySelector(CONFIG.selectors.canvas); // Verifica se o Customily injetou algo além do placeholder return canvasContainer && canvasContainer.children.length > 0; } function syncEllaSlider(imageUrl) { if (!imageUrl) return; // Remove parâmetros de redimensionamento do Shopify para comparação limpa const cleanUrl = (url) => url.split('?')[0].replace(/(_\d+x\d+|_master|_small)/g, ''); const targetBase = cleanUrl(imageUrl); const thumbnails = document.querySelectorAll(CONFIG.selectors.thumbnails); for (let thumb of thumbnails) { const thumbSrc = thumb.getAttribute('src') || thumb.getAttribute('data-src'); if (thumbSrc && cleanUrl(thumbSrc).includes(targetBase)) { // Em vez de só trocar o SRC, simulamos o clique para o Ella mover o Slider (Slick/Swiper) thumb.click(); return true; } } return false; } const updateUI = debounce(() => { if (hasCustomilyDesign()) return; const variant = getVariantFromUrl(); if (!variant || !variant.featured_image) return; // 1. Atualiza Imagem Principal (Fallback caso o slider falhe) const mainImg = document.querySelector(CONFIG.selectors.mainImg); if (mainImg) mainImg.src = variant.featured_image.src; // 2. Sincroniza Slider/Thumbs syncEllaSlider(variant.featured_image.src); }, CONFIG.debounceTime); // --- OBSERVADORES --- // 1. Monitora mudanças na URL (Troca de variante via Swatches ou Selects) let lastUrl = location.href; const urlObserver = new MutationObserver(() => { if (location.href !== lastUrl) { lastUrl = location.href; updateUI(); } }); urlObserver.observe(document.querySelector('body'), { childList: true, subtree: true }); // 2. Monitora o Customily (Aparecimento/Desaparecimento do Design) const canvasElement = document.querySelector(CONFIG.selectors.canvas); if (canvasElement) { const customilyObserver = new MutationObserver(() => { // Se o design sumiu, restauramos a variante if (!hasCustomilyDesign()) updateUI(); }); customilyObserver.observe(canvasElement, { childList: true, subtree: true }); } // Helper: Debounce function debounce(fn, ms) { let timeout; return () => { clearTimeout(timeout); timeout = setTimeout(() => fn.apply(this, arguments), ms); }; } // Execução inicial setTimeout(updateUI, 500); })();
Cannot place order, conditions not met:
OK