Javascript noob alert!
我现在必须制作一个复杂的网站,但我简化它以专注于我的问题。
基本上,它会有三个图像(由颜色表示),应该在用户按下prev和next时显示。我不能使用第三方幻灯片,我需要遵循这个逻辑,正如我之前所说,最终网站非常复杂。
我不明白为什么我的JS不起作用。我确实觉得它不合适,而且我写得比这更好(我会接受关于此的提示),但我没有看到错误。如果您稍微浏览一下,您会看到在第一张幻灯片后,上一个或下一个按钮停止工作。
感谢任何帮助。
$(document).ready(function() {
$('.first').on('click', '.next', function() {
$('body').addClass("second");
$('body').removeClass("third");
$('body').removeClass("first");
event.preventDefault();
})
});
$(document).ready(function() {
$('.first').on('click', '.prev', function() {
$('body').addClass("third");
$('body').removeClass("second");
$('body').removeClass("first");
event.preventDefault();
})
});
$(document).ready(function() {
$('.second').on('click', '.prev', function() {
$('body').removeClass("third");
$('body').addClass("first");
$('body').removeClass("second");
event.preventDefault();
})
});
$(document).ready(function() {
$('.second').on('click', '.next', function() {
$('body').addClass("third");
$('body').removeClass("first");
$('body').removeClass("second");
event.preventDefault();
})
});
$(document).ready(function() {
$('.third').on('click', '.prev', function() {
$('body').removeClass("first");
$('body').addClass("second");
event.preventDefault();
})
});
$(document).ready(function() {
$('.third').on('click', '.next', function() {
$('body').removeClass("second");
$('body').addClass("first");
$('body').removeClass("third");
event.preventDefault();
})
});

.first {
background-color: #0ff;
}
.second {
background-color: #000;
}
.third {
background-color: #ff0;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="first">
<nav class="slides-navigation">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</nav>
</body>
&#13;
答案 0 :(得分:3)
检查这个希望它对你有帮助。
$(document).ready(function() {
$(document).on('click', 'body.first .next', function() {
event.preventDefault();
$('body').addClass("second");
$('body').removeClass("third");
$('body').removeClass("first");
})
$(document).on('click', 'body.first .prev', function() {
event.preventDefault();
$('body').addClass("third");
$('body').removeClass("second");
$('body').removeClass("first");
})
$(document).on('click', 'body.second .prev', function() {
event.preventDefault();
$('body').removeClass("third");
$('body').addClass("first");
$('body').removeClass("second");
})
$(document).on('click', 'body.second .next', function() {
event.preventDefault();
$('body').addClass("third");
$('body').removeClass("first");
$('body').removeClass("second");
})
$(document).on('click', 'body.third .prev', function() {
event.preventDefault();
$('body').removeClass("first");
$('body').addClass("second");
})
$(document).on('click', 'body.third .next', function() {
event.preventDefault();
$('body').removeClass("second");
$('body').addClass("first");
$('body').removeClass("third");
})
});
&#13;
.first {
background-color: #0ff;
}
.second {
background-color: #000;
}
.third {
background-color: #ff0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="first">
<nav class="slides-navigation">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</nav>
</body>
&#13;
答案 1 :(得分:1)
对于这么简单的事情来说,真的没有必要让你的生活复杂化。
var nums = ['first', 'second', 'third'];
var curr = 0;
$('.next, .prev').on('click', function(e) {
// check which button is clicked and modify the curr value according to it
var offset = $(this).hasClass('prev') ? nums.length - 1 : 1;
curr = (curr + offset) % nums.length; // avoid being out of index
$('body').removeClass();
$('body').addClass(nums[curr]);
})
&#13;
.first {background-color: #0ff;}
.second {background-color: #000;}
.third {background-color: #ff0;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="first">
<nav class="slides-navigation">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</nav>
</body>
&#13;
您的代码没有按预期工作的原因是因为您绑定了这6个事件侦听器,但代码运行时只存在3个元素中的1个。您 使用委派的侦听器,但不是以正确的方式。为了使其工作,您需要首先选择不可更改的父元素,并且在您的情况下,这将是一个html元素或文档,因为您正在更改正文类。所以,像:
$(document)...
而不是:
$('body')...
答案 2 :(得分:0)
试试这个,您可以使用此代码容纳任意数量的类。只需将类添加到数组classArr
在javascript中
$(document).ready(function() {
var counter = 0;
var classArr = ["first", "second", "third"];
$('body').on('click', '.next, .prev', function(event) {
$(this).hasClass("next") ? counter++ : counter--;
changeClass();
event.preventDefault();
});
function changeClass(){
var indexClass = counter % classArr.length;
indexClass = Math.abs(indexClass);
$.each(classArr, function(index, value) {
if (index == indexClass) {
$('body').addClass(classArr[index]);
} else {
$('body').removeClass(classArr[index]);
}
});
}
});
请参阅js fiddle https://jsfiddle.net/95hwwt8u/2/
$(document).ready(function() {
var counter = 0;
var classArr = ["first", "second", "third"];
$('body').on('click', '.next, .prev', function(event) {
$(this).hasClass("next") ? counter++ : counter--;
changeClass();
event.preventDefault();
});
function changeClass(){
var indexClass = counter % classArr.length;
indexClass = Math.abs(indexClass);
$.each(classArr, function(index, value) {
if (index == indexClass) {
$('body').addClass(classArr[index]);
} else {
$('body').removeClass(classArr[index]);
}
});
}
});
.first{
background-color:#0ff;
background-position: center -47px
}
.second{
background-color:#000;
background-position: center -47px
}
.third{
background-color:#ff0;
background-position: center -47px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="first">
<nav class="slides-navigation">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</nav>
</body>
答案 3 :(得分:0)
$(function() {
$('#slide').on('click','.next',function(){
if($('body').hasClass("first")){
$('body').removeClass("first");
$('body').addClass("second");
event.preventDefault();
} else if($('body').hasClass("second")){
$('body').removeClass("second");
$('body').addClass("third");
event.preventDefault();
} else if($('body').hasClass("third")){
$('body').removeClass("third");
$('body').addClass("first");
event.preventDefault();
}
});
$('#slide').on('click','.prev',function(){
if($('body').hasClass("first")){
$('body').removeClass("first");
$('body').addClass("third");
event.preventDefault();
} else if($('body').hasClass("second")){
$('body').removeClass("second");
$('body').addClass("first");
event.preventDefault();
} else if($('body').hasClass("third")){
$('body').removeClass("third");
$('body').addClass("second");
event.preventDefault();
}
});
});
&#13;
.first {
background-color: #0ff;
}
.second {
background-color: #000;
}
.third {
background-color: #ff0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body id='slide' class="first">
<nav class="slides-navigation">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</nav>
</body>
&#13;