Necesito construir un carrusel con 12 elementos que simulan una rueda 3d que gira infinitamente. Para ser claro, necesito crear precisamente este efecto:
https://codepen.io/SitePoint/pen/yXWXaw (encontrado aquí )
pero con estas características adicionales (especialmente en computadoras de escritorio y dispositivos móviles):
- las diapositivas deben seguir paso a paso el deslizamiento, es decir, las diapositivas deben moverse mientras se desliza (como lo hace Swiper).
- Con un deslizamiento rápido, debe desplazar muchas diapositivas con impulso (como lo hace Swiper con
freeScroll
). - Luego, cuando la rueda deja de girar, se ajusta a la corredera delantera (como lo hace Swiper con
freeModeSticky
ycenteredSlides
) que es la elegida por el usuario. - Necesito una devolución de llamada cada vez que un cambio de diapositiva (como evento
slideChanged
) (como lo hace Swiper).
Por todas estas razones, pensé que Swiper 5.3.0 sería un buen punto de partida.
Intenté varias soluciones, la mejor es con esta configuración, pero loop: true
es una solución horrible y causa problemas (verifique los comentarios):
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 no es la forma correcta.
Creo que el camino correcto es el desarrollo de una costumbre Swiper effect
(como el incorporado en cubeEffect
, coverflowEffect
, ...) que simula la rueda, sin necesidad de utilizar loop:true
que las cuestiones causas. Por ejemplo, aquí un chico crea su propio efecto personalizado que luego establece en el effect
atributo de Swiper:
https://codepen.io/paralleluniv3rse/pen/yGQjMv
...
effect: "myCustomTransition",
...
¿Cómo desarrollar un efecto personalizado como la rueda 3d que necesito?
fuente
coverflowEffect
como punto de partida y "piratear" sus parámetros, pero es solo una solución y no puedo obtener el efecto del primer codepen. Las diapositivas simplemente no se colocarán en una superficie circular.Respuestas:
Creo que esto es lo que quieres: https://codepen.io/mukyuu/pen/GRgPYqG .
Casi cumplió con sus condiciones, excepto que no está usando Swiper 5 y snap.
Luego, cuando la rueda deja de girar, se ajusta a un tobogán (como lo hace Swiper).ontouch
función hay una devolución de llamada.HTML:
S (CSS):
JS:
Probado en los navegadores Android 9 y Windows 10.
fuente
slideChanged
(como lo hace Swiper). Por todas estas razones, pensé que Swiper sería un buen punto de partida ...