Я написал код, который сдвигает ползунок, и я хочу его улучшить, поэтому, когда пользователь держит нажатие, он продолжает перемещаться. Я написал этот код, используя различные вопросы на этом сайте. Моя проблема в том, что она попадает в бесконечный цикл.
// The right button in the slidebar moves it to the right
var mouseStillDown = false;
function shiftToRight() {
if (!mouseStillDown) { return; }
var cur = ($('#slideBar').position().left - $('#leftButton').outerWidth()) - $('.ingredient').outerWidth();
// Checks if movement will cause the slidebar out of right edge
if ($('#fixedPart').outerWidth() - cur > $('#slideBar').outerWidth()) {
cur = $('#fixedPart').outerWidth() - $('#slideBar').outerWidth();
}
$('#slideBar').animate({ left: cur}, { duration: 500 , easing: "swing" } );
if (mouseStillDown) { setTimeout(shiftToRight(), 500); }
};
$('#rightButton').mousedown(function() {
mouseStillDown = true;
shiftToRight();
}).mouseup(function() {
clearInterval(mouseStillDown);
mouseStillDown = false;
});
Я также попробовал setInterval(shiftToRight(), 500)
но результат был тот же. кажется, что изменение флага в mouseup()
не считывается функцией.
Попробуйте следующее
// The right button in the slidebar moves it to the right
function shiftToRight() {
var cur = ($('#slideBar').position().left - $('#leftButton').outerWidth()) - $('.ingredient').outerWidth();
// Checks if movement will cause the slidebar out of right edge
if ($('#fixedPart').outerWidth() - cur > $('#slideBar').outerWidth()) {
cur = $('#fixedPart').outerWidth() - $('#slideBar').outerWidth();
}
$('#slideBar').animate({ left: cur}, { duration: 500 , easing: "swing" } );
};
var rightIntervalId;
$('#rightButton').mousedown(function() {
event.preventDefault();
rightIntervalId = setInterval(shiftToRight, 500);
}).mouseup(function() {
clearInterval(rightIntervalId);
}).click(function() {
shiftToRight();
});
clearInterval
не принимает логическое значение в качестве входных данных