不相互控制的多个自定义轮播
multiple custom carousels that dont control each other
我是 JQuery / JavaScript 的新手,但我为网站制作了轮播,我想知道如何让按钮控制各自的轮播。
这是一个 JSFiddle - https://jsfiddle.net/z6q6bgzq/
HTML -
<div>
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
<div>
SLIDE 3
</div>
<div>
SLIDE 4
</div>
<div>
SLIDE 5
</div>
</div>
<div style="position: relative; top:20px;">
<button class="arrow left"><---</button>
<button class="arrow right">---></button>
</div>
</div>
<div style="position: relative; top:20px;">
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
</div>
<div style="position: relative; top:20px;">
<button class="left"><---</button>
<button class="right">---></button>
</div>
</div>
jquery:
$(document).ready(function(){
$(".right").click(function(){
var $next = $(".focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first",".carousel-slide").addClass("focus");
}
});
$(".left").click(function){
var $prev = $(".focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last",".carousel-slide").addClass("focus");
}
});
});
你可以这样做:
$(document).ready(function(e){
$(".right").click(function(e){
var $next = $(this).parent().prev().find(".focus").removeClass("focus").next("div");
if ($next.length){
$next.addClass("focus");
}else{
$(this).parent().prev().children().first().addClass("focus");
}
});
$(".left").click(function(e){
var $prev = $(this).parent().prev().find(".focus").removeClass("focus").prev("div");
if ($prev.length){
$prev.addClass("focus");
}else{
$(this).parent().prev().children().last().addClass("focus");
}
});
});
.carousel-slide > div{
transition: opacity 400ms;
opacity: 0;
position: absolute;
}
.carousel-slide > .focus{
opacity: 1;
position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="carousel-slide"> <!--previous -->
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
<div>
SLIDE 3
</div>
<div>
SLIDE 4
</div>
<div>
SLIDE 5
</div>
</div>
<div style="position: relative; top:20px;"> <!--parent-->
<button class="arrow left"><---</button>
<button class="arrow right">---></button>
</div>
<div style="position: relative; top:20px;">
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
</div>
<div style="position: relative; top:20px;">
<button class="left"><---</button>
<button class="right">---></button>
</div>
</div>
因此,您必须相应地更改选择器 ($prev/$next vars) 和其他一些东西。为了便于理解,我在 HTML 中做了评论。您必须遍历 DOM,才能找到父按钮 div 和上一个兄弟按钮。 Now, when selectors are not 'greedy' (you aren't targeting all divs with .carousel-slide class on page), all should work fine.
P.S。如果您保持当前 HTML 结构,您可以通过这种方式添加更多轮播。
所以基本上,您需要一些东西来识别轮播 1 和轮播 2?这就是 ID 的用武之地。
$(document).ready(function(e){
$("#C1Right").click(function(e){
var $next = $("#carousel1 .focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first","#carousel1 .carousel slide").addClass("focus");
}
});
$("#C1Left").click(function(e){
var $prev = $("#carousel1 .focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last","#carousel1 .carousel-slide").addClass("focus");
}
});
$("#C2Right").click(function(e){
var $next = $("#carousel2 .focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first","#carousel2 .carousel-slide").addClass("focus");
}
});
$("#C2Left").click(function(e){
var $prev = $("#carousel2 .focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last","#carousel2 .carousel-slide").addClass("focus");
}
});
});
我是 JQuery / JavaScript 的新手,但我为网站制作了轮播,我想知道如何让按钮控制各自的轮播。
这是一个 JSFiddle - https://jsfiddle.net/z6q6bgzq/
HTML -
<div>
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
<div>
SLIDE 3
</div>
<div>
SLIDE 4
</div>
<div>
SLIDE 5
</div>
</div>
<div style="position: relative; top:20px;">
<button class="arrow left"><---</button>
<button class="arrow right">---></button>
</div>
</div>
<div style="position: relative; top:20px;">
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
</div>
<div style="position: relative; top:20px;">
<button class="left"><---</button>
<button class="right">---></button>
</div>
</div>
jquery:
$(document).ready(function(){
$(".right").click(function(){
var $next = $(".focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first",".carousel-slide").addClass("focus");
}
});
$(".left").click(function){
var $prev = $(".focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last",".carousel-slide").addClass("focus");
}
});
});
你可以这样做:
$(document).ready(function(e){
$(".right").click(function(e){
var $next = $(this).parent().prev().find(".focus").removeClass("focus").next("div");
if ($next.length){
$next.addClass("focus");
}else{
$(this).parent().prev().children().first().addClass("focus");
}
});
$(".left").click(function(e){
var $prev = $(this).parent().prev().find(".focus").removeClass("focus").prev("div");
if ($prev.length){
$prev.addClass("focus");
}else{
$(this).parent().prev().children().last().addClass("focus");
}
});
});
.carousel-slide > div{
transition: opacity 400ms;
opacity: 0;
position: absolute;
}
.carousel-slide > .focus{
opacity: 1;
position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="carousel-slide"> <!--previous -->
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
<div>
SLIDE 3
</div>
<div>
SLIDE 4
</div>
<div>
SLIDE 5
</div>
</div>
<div style="position: relative; top:20px;"> <!--parent-->
<button class="arrow left"><---</button>
<button class="arrow right">---></button>
</div>
<div style="position: relative; top:20px;">
<div class="carousel-slide">
<div class="focus">
SLIDE 1
</div>
<div>
SLIDE 2
</div>
</div>
<div style="position: relative; top:20px;">
<button class="left"><---</button>
<button class="right">---></button>
</div>
</div>
因此,您必须相应地更改选择器 ($prev/$next vars) 和其他一些东西。为了便于理解,我在 HTML 中做了评论。您必须遍历 DOM,才能找到父按钮 div 和上一个兄弟按钮。 Now, when selectors are not 'greedy' (you aren't targeting all divs with .carousel-slide class on page), all should work fine.
P.S。如果您保持当前 HTML 结构,您可以通过这种方式添加更多轮播。
所以基本上,您需要一些东西来识别轮播 1 和轮播 2?这就是 ID 的用武之地。
$(document).ready(function(e){
$("#C1Right").click(function(e){
var $next = $("#carousel1 .focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first","#carousel1 .carousel slide").addClass("focus");
}
});
$("#C1Left").click(function(e){
var $prev = $("#carousel1 .focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last","#carousel1 .carousel-slide").addClass("focus");
}
});
$("#C2Right").click(function(e){
var $next = $("#carousel2 .focus").removeClass("focus").next("div",".carousel-slide");
if ($next.length){
$next.addClass("focus");
}else{
$("div:first","#carousel2 .carousel-slide").addClass("focus");
}
});
$("#C2Left").click(function(e){
var $prev = $("#carousel2 .focus").removeClass("focus").prev("div",".carousel-slide");
if ($prev.length){
$prev.addClass("focus");
}else{
$("div:last","#carousel2 .carousel-slide").addClass("focus");
}
});
});