Nota: Se você tiver o tema Dawn versão 2.5 e superior, este código não funcionará. Para código atualizado, verifique isto .
Você estreia o controle deslizante de produto do tema? Crie uma página de produto semelhante ao tema Debut.
Tenho trabalhado no controle deslizante de produto do tema Dawn e encontrei alguns problemas com ele. Uma coisa é que o contador numérico não faz sentido. Minha maneira de criar um controle deslizante de produto no tema Dawn é copiar o tema Debut.
Tenha uma página de produto de estreia em seu tema Dawn com botões de opção funcionais, zoom e controle deslizante de produto.
NOTA: Você precisa fazer login antes de ver o código.
Siga as instruções abaixo.
1. Vá para sua loja online > Temas > Ações > Editar código
2. Vá para a pasta Seção e abra main-product.liquid
3. Para simplificar as coisas, substituiremos o main-product.liquid
4. Vá para a pasta da seção e abra main-product.liquid."
5. Exclua o código dentro do arquivo, cole o código abaixo
|
{% comment %} theme-check-disable TemplateLength {% endcomment %} { |
6. Em seguida, precisamos criar um novo arquivo de ativos. Vá para a pasta Ativos e clique em “Adicionar um novo ativo”. Certifique-se de que seja um arquivo CSS. Chame-o de "controle deslizante de produto"
7. Abra o arquivo e cole o código abaixo e clique em SALVAR
| .slider-container { margem: 0 automático; largura: 90%; exibição: flexível; flex-flow: quebra de coluna; alinhar itens: centro; posição: relativa; } .imagem grande { largura: 100%; altura: 100%; posição: relativa; estouro: oculto; } .item de imagem grande { largura máxima: 100%; largura mínima: 50%; altura máxima: 100%; preenchimento: 0; posição: relativa; margem: 0 automático; } .xoomImage { posição: absoluta; superior: 0; esquerda: 0; } .item de imagem grande:not(:primeiro-filho){ exibição: nenhum !importante; } você { padding-inline-start: 0px! Importante; } componente deslizante { posição: relativa; exibição: bloco; largura:100%; } .slider-wrapper { exibição: flexível; justificar-conteúdo: centro; } .slider__slide { scroll-snap-align: iniciar; flex-encolher: 0; } .product-slider-box { flex-wrap: herdar; estouro-x: automático; scroll-snap-type: x obrigatório; comportamento de rolagem: suave; -webkit-overflow-scrolling: toque; margem inferior: 1rem; largura: 85%; exibição: flexível; índice z: 1; } .product-slider { altura: 100%; largura: 31,5%; preenchimento: 10px; display: bloco embutido; } .product-slider:not(:first-child){ margem esquerda: 1rem; } .slide-imagem { largura: 100%; ajuste ao objeto: capa; } .slider{ cor da barra de rolagem: rgb(var(--color-foreground)) rgba(var(--color-foreground), 0,04); -ms-estilo overflow: nenhum; largura da barra de rolagem: nenhuma; } .slider::-webkit-barra de rolagem { altura: 0,4rem; largura: 0,4rem; Mostrar nenhum; } .no-js.slider { -ms-estilo overflow: automático; largura da barra de rolagem: automático; } .no-js .slider::-webkit-scrollbar { exibição: inicial; } .slider::-webkit-scrollbar-thumb { cor de fundo: rgb(var(--color-foreground)); raio da borda: 0,4rem; borda: 0; } .slider::-webkit-scrollbar-track { plano de fundo: rgba(var(--color-foreground), 0,04); raio da borda: 0,4rem; } /*=== botões === */ .button-wrapper { altura: 100%; largura: 105%; posição: absoluta; exibição: flexível; justificar-conteúdo: espaço entre; alinhar itens: centro; } .slider-container::-webkit-scrollbar { Mostrar nenhum; } .botões deslizantes { exibição: flexível; alinhar itens: centro; justificar-conteúdo: centro; } .botão deslizante { cor: rgba(var(--cor-foreground), 0,75); fundo: transparente; fronteira: nenhuma; cursor: ponteiro; largura: 44px; altura: 44px; } .botão deslizante: não ([desativado]): passar o mouse { cor: rgb(var(--color-foreground)); } .botão deslizante .icon { altura: 1,2rem; } .botão deslizante[desativado] .icon { cor: rgba(var(--color-foreground), 0,3); } .botão deslizante--próximo .icon { margem direita: -0,2rem; transformar: girar (-90 graus) traduzirX (0,15rem); } .botão deslizante--anterior .icon { margem esquerda: -0,2rem; transformar: girar (90 graus) traduzirX (-0,15rem); } .botão deslizante--próximo:não([desativado]):hover .icon { transformar: girar (-90 graus) traduzirX (0,15rem) escala (1,07); } .botão deslizante--prev:not([desativado]):hover .icon { transformar: girar (90 graus) traduzirX (-0,15rem) escala (1,07); } /* botão de vídeo quando a imagem é do tipo vídeo */ .video-btn { largura: 100%; altura: 100%; posição: relativa; } .v-btn { topo: 2% !importante; esquerda: 2% !importante; } .ativo-thumb { borda: 3px branco sólido; contorno: 2px preto sólido; } /* ==== códigos personalizados na edição da página do produto ==== */ @media screen e (largura mínima: 750px) { .largura personalizada { preenchimento: 0 10% !importante; } } @media screen e (largura mínima: 990px) { .produto__media-wrapper { largura máxima: 50% !importante; largura: calc(50% - 1rem/2); } .produto__info-wrapper { preenchimento à esquerda: 5rem !importante; largura máxima: 50% !importante; largura: calc(50% - 1rem/2); } } /* ocultar modal */ #large-image > li:nth-child(1) > modal-opener > span { exibição: nenhum !importante; } #imagemgrande > li:nth-child(1) > abridor modal > botão { exibição: nenhum !importante; } #imagemgrande > li > abridor modal > div { preenchimento superior: 0 !importante; } #imagemgrande > li > abridor modal > div > img { estouro: oculto; posição: relativo! Importante; } |
8. Em seguida, precisamos ajustar o arquivo global.js na pasta Asset.
9. Ajustaremos o controle deslizante primeiro. Encontre o componente deslizante. Após " this.nextButton = this.querySelector('button[name="next"]');", cole o código abaixo. Veja a imagem e o vídeo para referência.
| this.productSlider = this.querySelector('.product-slider-box'); |
O código deve ficar assim:

10. Em seguida, precisamos encontrar e substituir a função onButtonClick(event) pelo código abaixo. Por favor, certifique-se de verificar o vídeo sobre isso para não excluir outras coisas.
| onButtonClick(evento) { event.preventDefault(); if (este.produtoSlider) { const slideScrollPosition = event.currentTarget.name === 'próximo'? this.slider.scrollLeft + (this.slider.clientWidth): this.slider.scrollLeft - (this.slider.clientWidth); this.slider.scrollTo({ esquerda: Math.floor(slideScrollPosition) }); this.currSlide = Math.round(slideScrollPosition / this.slider.clientWidth); if (this.currSlide === 0) { this.prevButton.setAttribute('desativado', verdadeiro); } outro { this.prevButton.removeAttribute('desativado'); } if (this.currSlide === this.totalPages / 3 ) { this.nextButton.setAttribute('desativado', verdadeiro); } outro { this.nextButton.removeAttribute('desativado'); } } outro { const slideScrollPosition = event.currentTarget.name === 'próximo'? this.slider.scrollLeft + this.sliderLastItem.clientWidth: this.slider.scrollLeft - this.sliderLastItem.clientWidth; this.slider.scrollTo({ esquerda: Math.floor(slideScrollPosition) }); } } |
O código deve ficar assim:

12. Último. Encontre VariantSelects e adicione o código em updateMedia(), antes de "window.setTimeout(()". Veja a imagem abaixo e o vídeo para obter instruções.
| const novoId = newMedia.dataset.mediaId; const newThumb = document.querySelector(`[data-thumb-id="${newId}"]`); const thumbLocate = newThumb["offsetLeft"]; document.querySelectorAll('.slide-image').forEach(thumb => polegar. classList.remove('active-thumb')); document.querySelector(`[data-thumb-id="${newId}"] > img`).classList.add('active-thumb'); const sliderBox = document.querySelector(".product-slider-box"); sliderBox.scrollTo({esquerda: polegarLocate}); ampliação(); |

É isso! Espero que não tenha sido muito difícil. Se sim, siga o vídeo. (",)
Atualização 08/11/21: Corrija o problema no Mozilla com a exibição da barra de rolagem. Acabei de excluir o CSS overflow no contêiner deslizante. Adicionado código para ocultar os botões sempre que as imagens variantes forem menores que três.
12 comentários
@NUNYA BIDNESS
Please be aware that this does not work on Dawn version 2.5 or higher as mentioned above. We have encountered that error before this due to the app installed. Please check your app that interfer with the cart.
This ruined add to cart option on my product page, now when i try to add to cart i get:
Required parameter missing or invalid: items
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!————-
DON’T USE IF YOU HAVE DAWN THEME
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!————-
THIS IS A LIFE-SAVER!! So happy I came across your tutorial
If you replace the OnButtonClick coding with yours, the mobile menu button becomes disabled…i had to revert to the original….
For me the image doesn’t switch when I select a different color in the variant selector?
Please also make a video on how to make thumbnail sliders vertical on the side of product
your code on this page is not showing correctly, this tutorial is not useful like this.
Hi,
@KEVIN MCCULLAGH. Sorry, you need to explain more on your problem.
@SIMONE You might have done the steps wrong.
@Laura I think you need to elaborate also.
I hope you guys are doing well. Take note though, this code is good for a new DAWN theme. If you made alterations to the code or added an app, this code might not be the best for you, since those codes may alter the cart code and the code provided above is not made to accommodate with the changes you’ve made.
Hi, when I “Add media from URL” it shows up on product slider with an image on the top, then with the video down below it directly. This doesn’t occur with the actual Debut theme. Do you have any idea how to resolve. It only happens when on mobile display also.
I have a problem with the variants when I select them the photo does not change by itself and also the arrows to change the photo do not work