滑动滑块...删除箭头
Swiper Slider...removing the arrows
我想删除 iDangerous Swiper Slider 上的箭头,除非需要这些箭头。例如,我目前有 4 张并排的图片,如果用户使用移动设备(或较小的计算机屏幕)并且显示的图片少于 4 张,那么我希望箭头显示出来以便用户可以滚动。但是,如果所有 4 个图像都显示,那么我不希望出现箭头。
我试着用 jQuery 来做这个,但是我有的东西不起作用。
<script>
var swiper = new Swiper('.swiper-container', {
slidesPerView: 4,
slidesPerGroup: 4,
loopedSlides: 4,
centeredSlides: false,
spaceBetween: 0,
grabCursor: true,
loop:false,
pagination: '.swiper-pagination',
paginationClickable: true,
breakpoints: {
1200: {
slidesPerView: 4,
loopedSlides: 4,
spaceBetween: 10
},
1024: {
slidesPerView: 3,
loopedSlides: 3,
spaceBetween: 10
},
768: {
slidesPerView: 2,
loopedSlides: 2,
spaceBetween: 10
},
675: {
slidesPerView: 1,
loopedSlides: 1,
spaceBetween: 20
}
}
});
document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {
e.preventDefault();
swiper.prependSlide([
'<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>',
'<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>'
]);
});
document.querySelector('.prepend-slide').addEventListener('click', function (e) {
e.preventDefault();
swiper.prependSlide('<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>');
});
document.querySelector('.append-slide').addEventListener('click', function (e) {
e.preventDefault();
swiper.appendSlide('<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>');
});
document.querySelector('.append-2-slides').addEventListener('click', function (e) {
e.preventDefault();
swiper.appendSlide([
'<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>',
'<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>'
]);
});
var slides = document.querySelectorAll('.swiper-wrapper .swiper-slide');
var arrowPrev = document.querySelector('.swiper-button-prev');
var arrowNext = document.querySelector('.swiper-button-prev');
if (slides.length < 4) {
arrowPrev.style.display = 'none';
arrowNext.style.display = 'none';
}
</script>
那没有用,事实上,它弄乱了滑块(我没有 4 个单独的图像,而是在屏幕上有一个图像。然后我用以下代码替换了最后一部分,它也改变了它到屏幕上的一张图片,箭头仍然在那里。
var swiper__slidecount = mySwiper.slides.length;
if (swiper__slidecount > 3) {
$('.swiper-button-prev,.swiper-button-next').remove();
}
这是一个link to the website
这是一个 JS Fiddle link. 奇怪的是,在我的网站上有效的代码在 JS 上不起作用 Fiddle,这让我更加困惑。
我的第一个想法是
console.log(slides);
并查看它在 运行 时的编号。
同时修复控制台错误:
Uncaught TypeError: Cannot read property 'addEventListener' of null
at (index):449
似乎未找到此元素:
document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {
你能检查一下吗?我已经为你创建了一个片段,我会解释我已经创建了一个函数,当视口 小于 1024 即 3 slides 然后箭头会出现一次 大于 1024 然后箭头会消失只要它 4张幻灯片随心所欲。
Fiddle https://jsfiddle.net/61LLnfh7/6/
var mySwiper = new Swiper('.swiper-container', {
slidesPerView: 4,
slidesPerGroup: 4,
loopedSlides: 4,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
breakpoints: {
1200: {
slidesPerView: 4,
loopedSlides: 4,
spaceBetween: 10
},
1024: {
slidesPerView: 3,
loopedSlides: 3,
spaceBetween: 10
},
768: {
slidesPerView: 2,
loopedSlides: 2,
spaceBetween: 10
},
675: {
slidesPerView: 1,
loopedSlides: 1,
spaceBetween: 20,
}
},
on: {
init: function() {
checkArrow();
},
resize: function () {
checkArrow();
}
}
});
function checkArrow() {
var swiperPrev = document.querySelector('.swiper-button-prev');
var swiperNext = document.querySelector('.swiper-button-next');
if ( window.innerWidth < 1024 ) {
console.log('Success', window.innerWidth);
swiperPrev.style.display = 'block';
swiperNext.style.display = 'block';
} else {
swiperPrev.style.display = 'none';
swiperNext.style.display = 'none';
}
}
.swiper-wrapper .swiper-slide {
background-color: #eee;
height: 250px;
display: flex;
align-items: center;
justify-content: center;
}
.swiper-button-prev,
.swiper-button-next {
display: none;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/css/swiper.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/js/swiper.min.js"></script>
<!-- Slider main container -->
<div class="swiper-container">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
不过我设法用另一种方式让它工作。
我只是想在它们不是 'disabled'.
时显示导航箭头
在 Swiper API 上,我们有 disabledClass,这是 class 在箭头被禁用时应用(没有导航要完成,即滑块的开始或结束)。
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
disabledClass: 'disabled_swiper_button'
},
然后在 css 方面只是简单地:
.disabled_swiper_button {
opacity: 0;
cursor: auto;
pointer-events: none;
}
我也在找答案所以就放在这里了。
如果网站在移动设备上,我的要求是隐藏箭头
我使用以下代码使其工作 ->
CSS ->
.swiper-button-next,
.swiper-button-prev{
visibility: hidden;
}
HTML ->
<div class="swiper-button-next" ></div>
<div class="swiper-button-prev" ></div>
我想删除 iDangerous Swiper Slider 上的箭头,除非需要这些箭头。例如,我目前有 4 张并排的图片,如果用户使用移动设备(或较小的计算机屏幕)并且显示的图片少于 4 张,那么我希望箭头显示出来以便用户可以滚动。但是,如果所有 4 个图像都显示,那么我不希望出现箭头。
我试着用 jQuery 来做这个,但是我有的东西不起作用。
<script>
var swiper = new Swiper('.swiper-container', {
slidesPerView: 4,
slidesPerGroup: 4,
loopedSlides: 4,
centeredSlides: false,
spaceBetween: 0,
grabCursor: true,
loop:false,
pagination: '.swiper-pagination',
paginationClickable: true,
breakpoints: {
1200: {
slidesPerView: 4,
loopedSlides: 4,
spaceBetween: 10
},
1024: {
slidesPerView: 3,
loopedSlides: 3,
spaceBetween: 10
},
768: {
slidesPerView: 2,
loopedSlides: 2,
spaceBetween: 10
},
675: {
slidesPerView: 1,
loopedSlides: 1,
spaceBetween: 20
}
}
});
document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {
e.preventDefault();
swiper.prependSlide([
'<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>',
'<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>'
]);
});
document.querySelector('.prepend-slide').addEventListener('click', function (e) {
e.preventDefault();
swiper.prependSlide('<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>');
});
document.querySelector('.append-slide').addEventListener('click', function (e) {
e.preventDefault();
swiper.appendSlide('<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>');
});
document.querySelector('.append-2-slides').addEventListener('click', function (e) {
e.preventDefault();
swiper.appendSlide([
'<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>',
'<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>'
]);
});
var slides = document.querySelectorAll('.swiper-wrapper .swiper-slide');
var arrowPrev = document.querySelector('.swiper-button-prev');
var arrowNext = document.querySelector('.swiper-button-prev');
if (slides.length < 4) {
arrowPrev.style.display = 'none';
arrowNext.style.display = 'none';
}
</script>
那没有用,事实上,它弄乱了滑块(我没有 4 个单独的图像,而是在屏幕上有一个图像。然后我用以下代码替换了最后一部分,它也改变了它到屏幕上的一张图片,箭头仍然在那里。
var swiper__slidecount = mySwiper.slides.length;
if (swiper__slidecount > 3) {
$('.swiper-button-prev,.swiper-button-next').remove();
}
这是一个link to the website 这是一个 JS Fiddle link. 奇怪的是,在我的网站上有效的代码在 JS 上不起作用 Fiddle,这让我更加困惑。
我的第一个想法是
console.log(slides);
并查看它在 运行 时的编号。
同时修复控制台错误:
Uncaught TypeError: Cannot read property 'addEventListener' of null
at (index):449
似乎未找到此元素:
document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {
你能检查一下吗?我已经为你创建了一个片段,我会解释我已经创建了一个函数,当视口 小于 1024 即 3 slides 然后箭头会出现一次 大于 1024 然后箭头会消失只要它 4张幻灯片随心所欲。
Fiddle https://jsfiddle.net/61LLnfh7/6/
var mySwiper = new Swiper('.swiper-container', {
slidesPerView: 4,
slidesPerGroup: 4,
loopedSlides: 4,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
breakpoints: {
1200: {
slidesPerView: 4,
loopedSlides: 4,
spaceBetween: 10
},
1024: {
slidesPerView: 3,
loopedSlides: 3,
spaceBetween: 10
},
768: {
slidesPerView: 2,
loopedSlides: 2,
spaceBetween: 10
},
675: {
slidesPerView: 1,
loopedSlides: 1,
spaceBetween: 20,
}
},
on: {
init: function() {
checkArrow();
},
resize: function () {
checkArrow();
}
}
});
function checkArrow() {
var swiperPrev = document.querySelector('.swiper-button-prev');
var swiperNext = document.querySelector('.swiper-button-next');
if ( window.innerWidth < 1024 ) {
console.log('Success', window.innerWidth);
swiperPrev.style.display = 'block';
swiperNext.style.display = 'block';
} else {
swiperPrev.style.display = 'none';
swiperNext.style.display = 'none';
}
}
.swiper-wrapper .swiper-slide {
background-color: #eee;
height: 250px;
display: flex;
align-items: center;
justify-content: center;
}
.swiper-button-prev,
.swiper-button-next {
display: none;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/css/swiper.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/js/swiper.min.js"></script>
<!-- Slider main container -->
<div class="swiper-container">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
不过我设法用另一种方式让它工作。 我只是想在它们不是 'disabled'.
时显示导航箭头在 Swiper API 上,我们有 disabledClass,这是 class 在箭头被禁用时应用(没有导航要完成,即滑块的开始或结束)。
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
disabledClass: 'disabled_swiper_button'
},
然后在 css 方面只是简单地:
.disabled_swiper_button {
opacity: 0;
cursor: auto;
pointer-events: none;
}
我也在找答案所以就放在这里了。 如果网站在移动设备上,我的要求是隐藏箭头 我使用以下代码使其工作 ->
CSS ->
.swiper-button-next,
.swiper-button-prev{
visibility: hidden;
}
HTML ->
<div class="swiper-button-next" ></div>
<div class="swiper-button-prev" ></div>