Прокрутка анимации jQuery назад и вперед

Редактировать Неправильный ответ, не решить проблему, заданную ОП (см. Комментарий)
Старый ответ (до редактирования) Вы можете видеть, что это Проблема (как и большинство проблем на деревьях) может быть решена с помощью рекурсивного подхода. Это потому, что sum value узла зависит только от sum values и соответствующих ranks его дочерних элементов.

Вот псевдокод, описывающий решение.

get_sum(my_node, result_arr):
    my_sum = 0
    for child in my_node.children():
        get_sum(child, result_arr)        // we compute the sum value of the children
        if rank(child) >= rank(my_node):  // if child node is big enough add its sum
            my_sum += result_arr[child]
     result_arr[my_node] = my_sum         // store the result somewhere

Это алгоритм, основанный на BFS, который должен работать в O(n) с n количеством узлов в вашем дереве. Чтобы получить значения для всех узлов, вызовите эту рекурсивную функцию для корневого узла вашего дерева.

5
задан Rahul Gupta 10 August 2017 в 12:27
поделиться

2 ответа

Перед запусками анимации, как насчет того, чтобы сохранить стартовую позицию?

startpostion = $(playerdiv).position(); //Or offset, I keep forgetting which
$(playerdiv).data("startTop",startposition.top);
$(playerdiv).data("startLeft",startposition.left);

Позже можно получить его использование

left = $(playerdiv).data("startTop")

и т.д.

Можно всегда предоставлять обратный вызов анимациям с помощью опции шага, этот способ, которым можно обновить ползунок соответственно.

$(playerdiv).animate({ 
    top : targetTop,
    left : targetLeft, 
    step, function(){ magic happens here
})
3
ответ дан 15 December 2019 в 06:35
поделиться

Я сделал бы это этот путь:

  1. Если пользователь нажимает "Play", начните анимировать отделения от их текущей позиции до их места назначения. Можно легко вычислить остающееся время и позицию отделений в зависимости от положения ползунка:

    • startingDivTop = initialDivTop + (finalDivTop - initialDivTop) * sliderPosition;
    • startingDivLeft = initialDivLeft + (finalDivLeft - initialDivLeft) * sliderPosition;
    • startingTime = totalDuration * sliderPosition;

    (или что-то как этот, где sliderPosition - что-то между 0 и 1),

  2. Если пользователь щелкает еще раз по ползунку, назовите .stop () методом на всех отделениях: тем путем они прекратят анимировать, и Вы сможете установить их статически: вычислите положение, в котором отделения должны быть и переместить их статически в ту точку.

  3. Если пользователь "отбрасывает" ползунок, и "Игра" все еще активируется, то анимация должна продолжиться вперед от точки, ползунок был отброшен.

Это походит на хороший проект, Вы продолжаете работать :)

0
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: