Swiper中文论坛
标题:
swiper嵌套,遇到嵌套内的动画第二屏不执行问题
[打印本页]
作者:
Giauque
时间:
2018-3-6 16:54
标题:
swiper嵌套,遇到嵌套内的动画第二屏不执行问题
使用swiper做垂直切换,每屏都增加了动画,在其中一屏插入水平切换,并且每屏也都是有动画,现在遇到这么个问题:
垂直切换动画无问题,当切换到水平swiper的时候,水平动画第一屏动画正常显示,横滑切换到第二个画面,动画消失,直接fade出现的。第三屏正常。然后向下切换后在回来,又出现该问题了。
html如下:
<div class="swiper-container swiper-container-h">
<div class="swiper-wrapper">
<section class="swiper-slide">1</section>
<section class="swiper-slide">
<div class="swiper-container swiper-container-v">
<div class="swiper-wrapper">
<section class="swiper-slide"><div class="pro_tit font_hei ani" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.3s" swiper-animate-delay="0.3s">动画A</div></section>
<section class="swiper-slide"><div class="pro_tit font_hei ani" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.3s" swiper-animate-delay="0.3s">动画B</div></section>
<section class="swiper-slide"><div class="pro_tit font_hei ani" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.3s" swiper-animate-delay="0.3s">动画C</div></section>
</div>
</div>
</section>
<section class="swiper-slide">3</section>
</div>
</div>
js代码如下:
<script type="text/javascript">
var swiperH = new Swiper('.swiper-container-h',{
on:{
init: function(){
swiperAnimateCache(this);
swiperAnimate(this);
},
slideChangeTransitionEnd: function(){
swiperAnimate(this);
}
},
direction:"vertical",
navigation:{
nextEl:'.nextPage',
},
effect : 'fade',
});
var swiperV = new Swiper('.swiper-container-v', {
on:{
init: function(){
swiperAnimateCache(this);
swiperAnimate(this);
},
slideChangeTransitionEnd: function(){
swiperAnimate(this);
}
},
pagination: {
el: '.swiper-pagination-v',
},
effect : 'fade',
});
</script>
作者:
westiger
时间:
2018-3-22 16:25
我也遇到了,发现当第一屏动画没有执行完就滑到第二屏,动画可以加载,说明等第一屏动画加载完第二屏其实也加载完了
作者:
blove
时间:
2020-3-10 22:56
我也遇到了这样的问题,父swiper中动画执行的同时将子swiper中的动画加载完成了
作者:
hyqiyf
时间:
2021-9-25 18:26
楼主这个问题解决了么?我也遇到了这个问题
作者:
yafeng001
时间:
2022-2-19 20:28
我的嵌套代码
作者:
yafeng001
时间:
2022-2-19 20:31
参考方案:
//外面大的 swiper初始化
const mySwiper = new Swiper ('#pageSwiper', {
width: window.innerWidth,
height: window.innerHeight,
initialSlide,
direction : 'vertical',
effect : 'coverflow',
lazy: {
loadPrevNext: true,
loadOnTransitionStart: true,
},
noSwiping : true,
noSwipingClass : 'stop-swiping',
on: {
init: function(){
swiperAnimateCache(this); //隐藏动画元素
swiperAnimate(this); //初始化完成开始动画
},
slideChange: function(){
if(this.activeIndex === 1) {
swiperAnimate(gallerySwiper); // 重点部分,这样嵌入的就可以初始化 完美展示动画了
} else {
swiperAnimate(this);
}
},
}
});
// 第二页嵌入的 swiper
const gallerySwiper = new Swiper ('#gallerySwiper', {
initialSlide: 0,
loop : true,
effect : 'fade',
lazy: {
loadPrevNext: true,
loadOnTransitionStart: true,
},
nested:true,
on:{
slideChange: function(){
//每个slide切换结束时也运行当前slide动画
swiperAnimate(this);
},
},
pagination: {
el: '.gallery-pagination',
type : 'custom',
renderCustom: function (swiper, current, total) {
const html = `<div class="swiper-dots">
<span class="swiper-dot ${current === 1 && 'active'}"></span>
<span class="swiper-dot ${current === 2 && 'active'}"></span>
</div>`;
return html;
}
}
});
欢迎光临 Swiper中文论坛 (http://bbs.swiper.com.cn/)
Powered by Discuz! X3.2