近期在网站开发过程中遇到了一个需要组合轮播图片的页面,页面布局如下:
先来讲一下具体功能是:点击左侧公司资质或者产品证书,右边切换到相应的轮播模块。中间的图片可以左右拖动切换,同时带动右边名称的选中状态切换,右边的名称点击能切换中间的图片,使对应的图片能居中放大显示,也是就是中间的当前图片与右边的名称是一一对应的。
下面再来讲一下页面布局结构如下:
honor
荣誉资质
5
公司资质
16
产品证书
高新技术企业证书
高新技术企业
<!--如果需要导航按钮-->
data-delay=.2data-effect=fadeInUpSmall
医疗器械注册证(NGS10基因)
data-delay=.2data-effect=fadeInRight
医疗器械注册证(NGS10基因)
<!--如果需要导航按钮-->
除了以上的html代码外,实现上述的功能还需要下面的js代码,这些代码看起来虽然比较复杂,但使用方法却是比较傻瓜式,直接粘贴到页面上就可以用,所以看不懂以下的JS代码也没关系,但对于一些关键的类名,例如上面的html代码写的hon_con_box1,hon_name_box1,swip_tab2等类名还是要跟JS代码对应起来,不然就实现不了多组合轮播功能,JS代码如下:
if($(body).hasClass(swip_box)){
//资质荣誉
if($(.imgbox2).hasClass(swip_tab2)){
varsib,sib2,sib3;
if(wind_w780){
sib=vertical;
sib2=4;
sib3=false;
}else{
sib=horizontal;
sib2=auto;
sib3=true;
}
varserSwiper1=newSwiper('.hon_con_box
1.swiper-container',{
slideActiveClass:'active',
speed:1000,
spaceBetween:10,
autoplayDisableOnInteraction:false,
autoplay:{
delay:5000,
stopOnLastSlide:false,
disableOnInteraction:false,
},
on:{
progress:function(progress){
vari;
varmodify;
vartranslate;
varscale;
varzIndex;
for(i=0;ithis.slides.length;i++){
varslide=this.slides.eq(i);
varslideProgress=this.slides[i].progress;
modify=1;
if(Math.abs(slideProgress)1){
modify=(Math.abs(slideProgress)-1)*0.3+1;
}
translate=slideProgress*modify*sib+'px';
scale=1-Math.abs(slideProgress)/5;
zIndex=999-Math.abs(Math.round(10*slideProgress));
slide.transform('translateX('+translate+')scale('+scale+')');
slide.css('zIndex',zIndex);
slide.css('opacity',1);
if(Math.abs(slideProgress)3){
slide.css('opacity',0);
}
}
},
slideChangeTransitionStart:function(){
updateNavPosition0();
}
},
navigation:{
nextEl:'.hon_name_box
1.swiper-button-next',
prevEl:'.hon_name_box
1.swiper-button-prev',
},
observer:true,
observeParents:true,
});
varserPageSwiper1=newSwiper('.hon_name_box
1.swiper-container',{
direction:sib,
slidesPerView:sib2,
allowTouchMove:false,
observer:true,
observeParents:true,
});
$('.hon_name_box
1.swiper-slide').on('click',function(){
varindex=$(this).index();
//同步运行其它swiper
serSwiper
1.slideTo(index);
});
functionupdateNavPosition0(){
$('.hon_name_box
1.active-nav').removeClass('active-nav');
varactiveNav=$('.hon_name_box
1.swiper-slide').eq(serSwiper
1.activeIndex).addClass('active-nav');
if(!activeNav.hasClass('swiper-slide-visible')){
if(activeNav.index()serPageSwiper
1.activeIndex){
varthumbsPerNav=Math.floor(serPageSwiper
1.width/activeNav.width());
serPageSwiper
1.slideTo(activeNav.index()-thumbsPerNav);
}else{
serPageSwiper
1.slideTo(activeNav.index());
}
}
}
varserSwiper2=newSwiper('.hon_con_box
2.swiper-container',{
slideActiveClass:'active',
speed:1000,
spaceBetween:10,
autoplayDisableOnInteraction:false,
navigation:{
nextEl:'.hon_name_box
2.swiper-button-next',
prevEl:'.hon_name_box
2.swiper-button-prev',
},
observer:true,
observeParents:true,
});
varserPageSwiper2=newSwiper('.hon_name_box
2.swiper-container',{
direction:sib,
slidesPerView:sib2,
allowTouchMove:false,
observer:true,
observeParents:true,
preventClicks:false,//默认true
});
$('.hon_name_box
2.swiper-slide').on('click',function(){
varindex=$(this).index();
//同步运行其它swiper
serSwiper
2.slideTo(index);
});
serSwiper
2.on('slideChangeTransitionStart',function(){
updateNavPosition1();
//Dostuffhere
});
serSwiper
2.on('progress',function(){
vari;
varmodify;
vartranslate;
varscale;
varzIndex;
for(i=0;ithis.slides.length;i++){
varslide=this.slides.eq(i);
varslideProgress=this.slides[i].progress;
modify=1;
if(Math.abs(slideProgress)1){
modify=(Math.abs(slideProgress)-1)*0.3+1;
}
translate=slideProgress*modify*sib+'px';
scale=1-Math.abs(slideProgress)/5;
zIndex=999-Math.abs(Math.round(10*slideProgress));
slide.transform('translateX('+translate+')scale('+scale+')');
slide.css('zIndex',zIndex);
slide.css('opacity',1);
if(Math.abs(slideProgress)3){
slide.css('opacity',0);
}
}
});
functionupdateNavPosition1(){
$('.hon_name_box
2.active-nav').removeClass('active-nav');
varactiveNav=$('.hon_name_box
2.swiper-slide').eq(serSwiper
2.activeIndex).addClass('active-nav');
if(!activeNav.hasClass('swiper-slide-visible')){
if(activeNav.index()serPageSwiper
2.activeIndex){
varthumbsPerNav=Math.floor(serPageSwiper
2.width/activeNav.width());
serPageSwiper
2.slideTo(activeNav.index()-thumbsPerNav);
}else{
serPageSwiper
2.slideTo(activeNav.index());
}
}
}
serSwiper
2.autoplay.stop();
$('.hon_tab_nav_boxp').on('click',function(){
serSwiper
1.autoplay.stop();
serSwiper
2.autoplay.stop();
$(this).addClass('on').siblings(p).removeClass('on');
varthisIndex=$(this).index();
$(.hon_con_casep).eq(thisIndex).show().siblings(p).hide();
switch(thisIndex)
{
case0:
serSwiper
1.autoplay.start();
break;
case1:
serSwiper
2.autoplay.start();
break;
}
});
}
}
以上功能是基于swiper.js插件最新版本实现的。由于swiper插件对ie的兼容性不是很到位,所以这里的轮播不兼容ie低版本,也就是IE8以下的版本均不支持该效果,不过现在用IE8以下的浏览器比较少了,除了windowxp系统和少部分的win7系统外。