【发布时间】:2014-12-10 06:37:22
【问题描述】:
我正在开展一个项目,我有一个页面可供同事介绍自己和他们的公司。我正在使用带有同事图像的轮播滑块,如果您单击其中一个图像,则其他 DIV 必须显示该人的特定信息,但目前我仅使用不同名称对其进行了测试人。
我已经让它工作了,但是我的代码太长了,所以我的目标是把我的代码写得更短。我正在尝试获取数组的上一个和下一个项目,我在这个问题中找到了它们:get prev and next items in array
这里有我的长版:
var collegaNaamArray = [
"#naam1",
"#naam2",
"#naam3",
"#naam4",
"#naam5"];
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[0]).show();
$(collegaNaamArray[0]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[0]).animate({
opacity: 1
}, 'slow');
$('#collega1').on('click', function (e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[0]).show();
$(collegaNaamArray[0]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[0]).animate({
opacity: 1
}, 'slow');
});
$('#collega2').on('click', function (e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[1]).show();
$(collegaNaamArray[1]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[1]).animate({
opacity: 1
}, 'slow');
});
$('#collega3').on('click', function (e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[2]).show();
$(collegaNaamArray[2]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[2]).animate({
opacity: 1
}, 'slow');
});
$('#collega4').on('click', function (e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[3]).show();
$(collegaNaamArray[3]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[3]).animate({
opacity: 1
}, 'slow');
});
$('#collega5').on('click', function (e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[4]).show();
$(collegaNaamArray[4]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[4]).animate({
opacity: 1
}, 'slow');
});
http://jsfiddle.net/sxypckn6/1/
$('#collega1').on('click', function(e) {
e.preventDefault();
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[0]).show();
$(collegaNaamArray[0]).animate({ opacity: 0 }, 0);
$(collegaNaamArray[0]).animate({ opacity: 1 }, 'slow');
});
这里是我的较短版本,不幸的是还没有工作:
var collegaNaamArray = [
"#naam1",
"#naam2",
"#naam3",
"#naam4",
"#naam5"];
$(collegaNaamArray.join(", ")).hide();
$(collegaNaamArray[0]).show();
$(collegaNaamArray[0]).animate({
opacity: 0
}, 0);
$(collegaNaamArray[0]).animate({
opacity: 1
}, 'slow');
$(".collegafoto").each(function () {
var start = '#naam1';
var prevInfo = collegaNaamArray[($.inArray(start, collegaNaamArray) - 1 + collegaNaamArray.length) % collegaNaamArray.length];
var nextInfo = collegaNaamArray[($.inArray(start, collegaNaamArray) + 1) % collegaNaamArray.length];
var prevFoto = $(this).prev();
var nextFoto = $(this).next();
$(prevFoto).on('click', function () {
$(collegaNaamArray.join(", ")).hide();
$(prevInfo).show();
$(prevInfo).animate({
opacity: 0
}, 0);
$(prevInfo).animate({
opacity: 1
}, 'slow');
});
$(nextFoto).on('click', function () {
$(collegaNaamArray.join(", ")).hide();
$(nextInfo).show();
$(nextInfo).animate({
opacity: 0
}, 0);
$(nextInfo).animate({
opacity: 1
}, 'slow');
});
});
我猜问题出在这部分的某个地方:
var prevFoto = $(this).prev();
var nextFoto = $(this).next();
我知道我没有以正确的方式选择上一张和下一张图片,但我不知道该怎么做。
非常感谢您!
【问题讨论】:
-
这个问题属于Code Review
-
@MDeSchaepmeester 如果代码不起作用,它属于这里。
-
@Barmar 同意了,但他的长版本可以工作,这需要审查。
-
您需要在点击处理程序中使用
.prev()和.next()。按照您的编写方式,每个图像都有多个单击处理程序,因为它们都是循环中其他内容的上一个和下一个图像。 -
关于如何实现DRY原则的问题很常见,我觉得这里比CR更合适。
标签: jquery arrays loops each dry