多个光滑滑块问题
Multiple Slick Sliders Issue
我正在使用 Slick.js 插件及其滑块同步功能。我遇到的问题是,如果我在单个页面上使用多个滑块,则通过单击下一个或上一个按钮插件对页面上的所有滑块执行操作。我想知道我可以用 JQuery 做些什么来让页面上的每个滑块的下一个和上一个工作不是全部?提前致谢。
HTML
<div class="slider">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
光滑运行脚本
$('.slider').slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: '.slider-nav'
});
$('.slider-nav').slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: '.slider',
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
在 id
上给你的 jquery 打电话,而不是 class
。
by clicking next or prev buttons plugin performs the action for all sliders on page
这是因为您在 class 名称上调用 jQuery,因此它将影响具有相应 class.
的所有元素
HTML
<div class="slider" id="slider_1">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav" id="slider_nav_1">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider" id="slider_2">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav" id="slider_nav_2">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
jQuery
var sliders = {
1: {slider : '#slider_1', nav: '#slider_nav_1'},
2: {slider : '#slider_2', nav: '#slider_nav_2'},
3: {slider : '#slider_3', nav: '#slider_nav_3'}
};
$.each(sliders, function() {
$(this.slider).slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: this.nav
});
$(this.nav).slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: this.slider,
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
});
这是另一个解决方案,每个循环使用 class="slider-for"
遍历所有元素,并动态地将 id
分配给所有 .slider-for
元素及其各自的 .slider-nav
元素.
但有一个问题,它们应该按完美顺序放置。
jQuery
$('.slider-for').each(function(key, item) {
var sliderIdName = 'slider' + key;
var sliderNavIdName = 'sliderNav' + key;
this.id = sliderIdName;
$('.slider-nav')[key].id = sliderNavIdName;
var sliderId = '#' + sliderIdName;
var sliderNavId = '#' + sliderNavIdName;
$(sliderId).slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: sliderNavId
});
$(sliderNavId).slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: sliderId,
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
});
我也经常使用这个代码:
$(function () {
$('.slider-for').each(function(num, elem) {
elem = $(elem);
elem.slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
draggable: false,
fade: true,
asNavFor: '.slider-nav'
});
elem.next('.slider-nav-thumbnails').slick({
slidesToShow: 3,
slidesToScroll: 1,
asNavFor: '.slider-for',
dots: false,
arrows: false,
vertical: true,
draggable: false,
centerMode: false,
focusOnSelect: true,
responsive: [
{
breakpoint: 769,
settings: {
vertical: false
}
}
]
});
});
});
有简单的解决方案
用每个函数调用所有滑块 class 并执行此操作
$('.slider').each(function(){
$(this).slick({
slidesToShow: 2,
slidesToScroll: 1,
centerMode: true,
prevArrow: $(this).parent().find('.arrow-left'),
nextArrow: $(this).parent().find('.arrow-right')
});
});
我身边的作品都很好。
我正在使用 Slick.js 插件及其滑块同步功能。我遇到的问题是,如果我在单个页面上使用多个滑块,则通过单击下一个或上一个按钮插件对页面上的所有滑块执行操作。我想知道我可以用 JQuery 做些什么来让页面上的每个滑块的下一个和上一个工作不是全部?提前致谢。
HTML
<div class="slider">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
光滑运行脚本
$('.slider').slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: '.slider-nav'
});
$('.slider-nav').slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: '.slider',
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
在 id
上给你的 jquery 打电话,而不是 class
。
by clicking next or prev buttons plugin performs the action for all sliders on page
这是因为您在 class 名称上调用 jQuery,因此它将影响具有相应 class.
的所有元素HTML
<div class="slider" id="slider_1">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav" id="slider_nav_1">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider" id="slider_2">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div class="slider-nav" id="slider_nav_2">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
jQuery
var sliders = {
1: {slider : '#slider_1', nav: '#slider_nav_1'},
2: {slider : '#slider_2', nav: '#slider_nav_2'},
3: {slider : '#slider_3', nav: '#slider_nav_3'}
};
$.each(sliders, function() {
$(this.slider).slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: this.nav
});
$(this.nav).slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: this.slider,
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
});
这是另一个解决方案,每个循环使用 class="slider-for"
遍历所有元素,并动态地将 id
分配给所有 .slider-for
元素及其各自的 .slider-nav
元素.
但有一个问题,它们应该按完美顺序放置。
jQuery
$('.slider-for').each(function(key, item) {
var sliderIdName = 'slider' + key;
var sliderNavIdName = 'sliderNav' + key;
this.id = sliderIdName;
$('.slider-nav')[key].id = sliderNavIdName;
var sliderId = '#' + sliderIdName;
var sliderNavId = '#' + sliderNavIdName;
$(sliderId).slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: sliderNavId
});
$(sliderNavId).slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: sliderId,
dots: true,
arrows: true,
centerMode: false,
focusOnSelect: true
});
});
我也经常使用这个代码:
$(function () {
$('.slider-for').each(function(num, elem) {
elem = $(elem);
elem.slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
draggable: false,
fade: true,
asNavFor: '.slider-nav'
});
elem.next('.slider-nav-thumbnails').slick({
slidesToShow: 3,
slidesToScroll: 1,
asNavFor: '.slider-for',
dots: false,
arrows: false,
vertical: true,
draggable: false,
centerMode: false,
focusOnSelect: true,
responsive: [
{
breakpoint: 769,
settings: {
vertical: false
}
}
]
});
});
});
有简单的解决方案
用每个函数调用所有滑块 class 并执行此操作
$('.slider').each(function(){
$(this).slick({
slidesToShow: 2,
slidesToScroll: 1,
centerMode: true,
prevArrow: $(this).parent().find('.arrow-left'),
nextArrow: $(this).parent().find('.arrow-right')
});
});
我身边的作品都很好。