Preciso construir um carrossel com 12 itens que simulam uma roda 3D girando infinitamente. Para ser claro, preciso criar precisamente esse efeito:
https://codepen.io/SitePoint/pen/yXWXaw (encontrado aqui )
mas com esses recursos adicionais (especialmente no computador e no celular):
- os slides devem seguir passo a passo o furto, ou seja, os slides devem se mover enquanto deslizam (como o Swiper).
- Com um toque rápido, ele deve rolar muitos slides com impulso (como o Swiper faz com
freeScroll
). - Então, quando a roda para de girar, ela se encaixa no slide dianteiro (como o Swiper faz com
freeModeSticky
ecenteredSlides
) que é o escolhido pelo usuário. - Eu preciso de um retorno de chamada sempre que uma alteração de slide (como um evento
slideChanged
) (como o Swiper faz).
Por todas essas razões, pensei no Swiper 5.3.0 seria um bom ponto de partida.
Tentei várias soluções alternativas, a melhor é com essa configuração, mas a loop: true
solução alternativa é terrível e causa problemas (verifique os comentários):
var swiper = new Swiper(el_class, {
slidesPerView: 1.5,
spaceBetween: 25,
centeredSlides: true,
grabCursor: true,
speed: 550,
loop: true, // <== repeat infinitely the 12 items. with fast scroll at the end of a cycle it waits a while before render the next cycle. Awful
loopAdditionalSlides: 10,
// Free mode
freeMode: true, // <== free scrolling. Good
freeModeMomentumRatio: 1,
freeModeMomentumVelocityRatio: 1.5,
freeModeMomentumBounceRatio: 1,
freeModeMinimumVelocity: 0.02,
freeModeSticky: true, // <== snap to the slides. Good
// Touch Resistance
resistanceRatio: 0.85,
// Prevent blurry texts
roundLengths: true,
});
Definitivamente não é o caminho certo.
Eu acho que o caminho certo é desenvolver um Swiper personalizado effect
(como o built-in cubeEffect
, coverflowEffect
...) que simula a roda, sem o uso de loop:true
que as questões de causas. Por exemplo, aqui um cara cria seu próprio efeito personalizado que define no effect
atributo Swiper:
https://codepen.io/paralleluniv3rse/pen/yGQjMv
...
effect: "myCustomTransition",
...
Como desenvolver um efeito personalizado como a roda 3D de que preciso?
fonte
coverflowEffect
como ponto de partida e "hackear" seus parâmetros, mas é apenas uma solução alternativa e não consigo obter o efeito do primeiro codepen. Os slides simplesmente não serão colocados em uma superfície circular.Respostas:
Eu acho que é isso que você deseja: https://codepen.io/mukyuu/pen/GRgPYqG .
Quase preencheu suas condições, exceto pelo fato de não estar usando o Swiper 5 e o snap.
Então, quando a roda pára de girar, ela se encaixa em um slide (como o Swiper faz).ontouch
função, há um retorno de chamada.HTML:
S (CSS):
JS:
Testado nos navegadores Android 9 e Windows 10.
fonte
slideChanged
(como o Swiper faz). Por todas essas razões, pensei que o Swiper seria um bom ponto de partida ...