【发布时间】:2014-12-20 18:38:02
【问题描述】:
我正在构建一个计数器,当我按下鼠标时,它应该递增到 maxValue 并且递减不超过 0。我还可以选择将计数器重置为其初始值:0。此外,如果 maxValue 是一个偶数,它应该计数到那个数字。但是,如果 maxValue 是一个奇数,它应该计数到 number-1。
计数器似乎工作正常。但有时它往往会停留在两个值之间。我很确定当我在其中一个按钮上按下鼠标然后立即在另一个按钮上按下鼠标时会发生这种情况。有没有办法防止这种情况发生?我还想知道我的代码是否正确,是否有更简单的方法(可能有循环)?
这里是我的代码:
$(document).ready(function(){
var maxValue = 3;
var count = 0;
// intervals used to regulate how fast the value will change on mousedown
var upInterval;
var downInterval;
$('#counter').html("<p>" + parseInt(count) + "</p>");
$('#up').mousedown(function(){
// if the maxValue is an even number
if(maxValue % 2 == 0) {
upInterval = setInterval(function(){
if(count < maxValue) {
count++;
$('#counter').html("<p>" + parseInt(count) + "</p>");
}
},180);
}
// if it's an odd number, subtract one
else {
upInterval = setInterval(function(){
if(count < maxValue-1) {
count++;
$('#counter').html("<p>" + parseInt(count) + "</p>");
}
},180);
}
}).mouseup(function() {
clearInterval(upInterval);
});
$('#down').mousedown(function(){
downInterval = setInterval(function(){
if(count > 0) {
count--;
$('#counter').html("<p>" + parseInt(count) + "</p>");
}
},180);
}).mouseup(function() {
clearInterval(downInterval);
});
$('#reset').click(function(){
count = 0;
$('#counter').html("<p>" + parseInt(count) + "</p>");
});
});
请记住,间隔是为了调节当我按下鼠标时数字应该以多快的速度变化,并阻止它增加或减少。
这是fiddle
谢谢!
【问题讨论】:
-
为什么不简单地增加 even 个数字 (2)?
-
如果它是偶数,我需要它增加所有数字直到 maxValue,奇数也一样,除了 maxValue 应该被解释为少一。例如:如果 maxValue = 13,那么它将最多计数 12 (1,2,3,4...12)。如果我理解正确,那么它只会按偶数计算,所以 (2,4,6...) 这不是我想要的。
-
哦,我明白了。秒来建立一个例子。
-
在偶数的情况下,您将在存储/返回时除以 2。
-
嗯不 - 他没有。请注意函数上方的变量