如何在 Swiper 滑块的边缘设置幻灯片样式
How to style slides on the edges in Swiper slider
我正在使用 Swiper 滑块插件 (https://swiperjs.com). And I need to add opacity 0.5 to slides on the edges of visible viewport. https://i.stack.imgur.com/A6nr5.png
我发现我可以 select 使用此 select 或者,当可见幻灯片的数量发生变化时,我可以使用媒体查询更改它:
.swiper-slide-active + * + * + * {
opacity: 0.5;
}
但是这个技巧对从左侧开始的幻灯片不起作用。我想没有只有 CSS 解决方案,我必须使用 JS 来检测可见幻灯片?
const specialSlider = new Swiper('.special-slider', {
loop: true,
speed: 1000,
slidesPerView: 'auto',
spaceBetween: 30,
centeredSlides: true,
navigation: {
nextEl: '.special-slider__next',
prevEl: '.special-slider__prev',
},
watchOverflow: true,
grabCursor: true,
});
这是我找到的解决方案:
const specialSlider = new Swiper('.special-slider', {
loop: true,
speed: 1000,
slidesPerView: 'auto',
spaceBetween: 0,
centeredSlides: true,
navigation: {
nextEl: '.special-slider__next',
prevEl: '.special-slider__prev',
},
watchOverflow: true,
grabCursor: true,
on: {
init: makeSlidesTransparent,
slideChangeTransitionStart: makeSlidesTransparent,
}
});
function makeSlidesTransparent() {
//Hide old slides
const oldSlides = d.getAll('.special-slider__item.js-visible');
for (let i = 0; i < oldSlides.length; i++) {
oldSlides[i].classList.remove('js-visible')
}
const width = window.innerWidth;
if (width >= 0 && width < 960) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
activeSlide.classList.add('js-visible');
}
if (width >= 960 && width < 1700) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
const prev1 = activeSlide.previousElementSibling;
const next1 = activeSlide.nextElementSibling;
prev1.classList.add('js-visible');
activeSlide.classList.add('js-visible');
next1.classList.add('js-visible');
}
if (width >= 1700) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
const prev1 = activeSlide.previousElementSibling;
const prev2 = prev1.previousElementSibling;
const next1 = activeSlide.nextElementSibling;
const next2 = next1.nextElementSibling;
prev1.classList.add('js-visible');
prev2.classList.add('js-visible');
activeSlide.classList.add('js-visible');
next1.classList.add('js-visible');
next2.classList.add('js-visible');
}
}
和样式:
.special-slider {
&__item {
padding-left: 15px;
padding-right: 15px;
width: 330px;
box-sizing: border-box;
height: auto;
opacity: 0.5;
transition: all $transition-style-slow;
&.js-visible{
opacity: 1;
}
.product-item {
background-color: rgba(218, 215, 205, 0.2);
}
}
}
这很简单,swiper 会帮你完成繁重的工作。只需在您的刷卡器设置中添加:
// Deprecated
// watchSlidesVisibility: true
// 7.0.0 +
watchSlidesProgress: true
现在您可以使用 class swiper-slide-visible
设置可见幻灯片的样式。
例如:
.swiper-slide {
opacity: .25;
}
.swiper-slide-visible {
opacity: 1;
}
请记住,更改每个 class:
的名称空间很容易
slideClass: 'myslider__slide',
slideVisibleClass: 'myslider__slide--visible'
更新
更新 2
我正在使用 Swiper 滑块插件 (https://swiperjs.com). And I need to add opacity 0.5 to slides on the edges of visible viewport. https://i.stack.imgur.com/A6nr5.png
我发现我可以 select 使用此 select 或者,当可见幻灯片的数量发生变化时,我可以使用媒体查询更改它:
.swiper-slide-active + * + * + * {
opacity: 0.5;
}
但是这个技巧对从左侧开始的幻灯片不起作用。我想没有只有 CSS 解决方案,我必须使用 JS 来检测可见幻灯片?
const specialSlider = new Swiper('.special-slider', {
loop: true,
speed: 1000,
slidesPerView: 'auto',
spaceBetween: 30,
centeredSlides: true,
navigation: {
nextEl: '.special-slider__next',
prevEl: '.special-slider__prev',
},
watchOverflow: true,
grabCursor: true,
});
这是我找到的解决方案:
const specialSlider = new Swiper('.special-slider', {
loop: true,
speed: 1000,
slidesPerView: 'auto',
spaceBetween: 0,
centeredSlides: true,
navigation: {
nextEl: '.special-slider__next',
prevEl: '.special-slider__prev',
},
watchOverflow: true,
grabCursor: true,
on: {
init: makeSlidesTransparent,
slideChangeTransitionStart: makeSlidesTransparent,
}
});
function makeSlidesTransparent() {
//Hide old slides
const oldSlides = d.getAll('.special-slider__item.js-visible');
for (let i = 0; i < oldSlides.length; i++) {
oldSlides[i].classList.remove('js-visible')
}
const width = window.innerWidth;
if (width >= 0 && width < 960) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
activeSlide.classList.add('js-visible');
}
if (width >= 960 && width < 1700) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
const prev1 = activeSlide.previousElementSibling;
const next1 = activeSlide.nextElementSibling;
prev1.classList.add('js-visible');
activeSlide.classList.add('js-visible');
next1.classList.add('js-visible');
}
if (width >= 1700) {
//Make visible new slides
const activeSlide = d.get('.special-slider__item.swiper-slide-active');
const prev1 = activeSlide.previousElementSibling;
const prev2 = prev1.previousElementSibling;
const next1 = activeSlide.nextElementSibling;
const next2 = next1.nextElementSibling;
prev1.classList.add('js-visible');
prev2.classList.add('js-visible');
activeSlide.classList.add('js-visible');
next1.classList.add('js-visible');
next2.classList.add('js-visible');
}
}
和样式:
.special-slider {
&__item {
padding-left: 15px;
padding-right: 15px;
width: 330px;
box-sizing: border-box;
height: auto;
opacity: 0.5;
transition: all $transition-style-slow;
&.js-visible{
opacity: 1;
}
.product-item {
background-color: rgba(218, 215, 205, 0.2);
}
}
}
这很简单,swiper 会帮你完成繁重的工作。只需在您的刷卡器设置中添加:
// Deprecated
// watchSlidesVisibility: true
// 7.0.0 +
watchSlidesProgress: true
现在您可以使用 class swiper-slide-visible
设置可见幻灯片的样式。
例如:
.swiper-slide {
opacity: .25;
}
.swiper-slide-visible {
opacity: 1;
}
请记住,更改每个 class:
的名称空间很容易slideClass: 'myslider__slide',
slideVisibleClass: 'myslider__slide--visible'