我正在努力从函数中获取最终值,我有两个可点击的按钮,一个是前一个,另一个是下一个。点击这两个,我得到幻灯片计数。得到这个结果我使用以下代码。它工作得更好,但直到我发现它,可能有一个单行解决方案..
任何人都可以更正此代码以最小化吗?
var tdLength = 7;
var num = 0;
$('a.buttons').click(function(){
num = ($(this).attr('id') == "next-arrow") ? num +=1 : num -=1;
num = ( num > tdLength) ? 1 : num;
num = (num < 1) ? tdLength : num;
alert(num);
})
提前感谢..
答案 0 :(得分:3)
我的镜头:
var num = 0;
function add(amount) {
num = (num + tdLength - 1 + amount) % tdLength + 1
alert(num);
}
$('#next-arrow').click(function(){add(1)});
$('#prev-arrow').click(function(){add(-1)});
邪恶的人:
num = (num + tdLength - 1 + amount) % tdLength + 1
对于合理的[1..tdLength]
值,始终以amount
(包括)生成值。由@Jon回答。
答案 1 :(得分:2)
一个想法是你可以替换这个
num = (num > tdLength) ? 1 : num;
num = (num < 1) ? tdLength : num;
使用下面的行,也可以保证在时间间隔[0 .. (tdLength-1)]
中提供结果:
num = (num + tdLength) % tdLength;
这里的区别在于您的代码使用基于1的索引,而%导致基于0的索引。
您还可以缩短第一行:
num = ($(this).attr('id') == "next-arrow") ? num +=1 : num -=1;
由于您已掌控,请在链接中添加data-skip
(或类似)属性(例如<a id="prev-arrow" data-skip="-1">...</a>
),这样您就可以执行此操作:
num += parseInt($(this).data('skip'));
所以这一切都给出了:
var tdLength = 7;
var num = 0; // "first" is preselected
$('a.buttons').click(function(){
num = (num + parseInt($(this).data('skip')) + tdLength) % tdLength;
alert(num);
})