Просто предположение, но я не вижу, чтобы вы сохраняли текущий угол. Это означает, что вы говорите им начинать с 0 каждый раз и повторять исходный массив. Вы должны иметь какое-то смещение, хранящееся вне функции. Примерно так может работать:
var fin = -1;
$('a.box').click(function() {
var menu_items = Array("#box_8", "#box_7", "#box_6", "#box_5", "#box_4", "#box_3", "#box_2", "#box_1");
fin++;
var startAngle = 180 + fin * 45;
var endAngle = 135 + fin * 45;
var topLock = "154px";
var leftLock = "260px";
//$(this).addClass('selected');
for (var i=0; i < menu_items.length; i++) {
startAngle += 45;
endAngle += 45;
$(menu_items[i]).animate({
path: new $.path.arc({
center: [154, 154],
radius: 106,
start: startAngle,
end: endAngle,
dir: -1
}),
opacity: '1'
},400);
};
});
Я также думаю, что ваш конечный угол и начальный угол выключены. Похоже, что циферблат переключает номера для анимации, что означает, что он, вероятно, перемещает вещи назад, а затем анимирует их в их текущие позиции. Вероятно, это можно решить, установив fin (новая переменная выше) в 0 в качестве исходного значения.
В качестве помощника: вы
- Возможно, вы захотите сохранить menu_items вне обработчика кликов.
- Вы также сохраняете menu_items.length как переменную вне цикла.
Тогда вы можете определить угол diff. как 360 / menu_items.length и затем иметь:
var angleDiff = 360 / menuLength;
var startAngle = 180 + fin * angleDiff;
var endAngle = 135 + fin * angleDiff;
а также (внутри цикла):
startAngle += angleDiff;
endAngle += angleDiff;