Как я могу расширить Leaflet.Polyline.SnakeAnim Ивана Санчеса для поддержки событий 'snakepause' и 'snakeplay' - PullRequest
0 голосов
/ 15 октября 2018

Я ценю его работу, однако у нас нет контроля, чтобы приостановить анимацию и воспроизвести ее.Я хочу расширить функциональные возможности для поддержки функции воспроизведения и паузы для анимации Polyline на листочке.Есть ли способ добавить паузу и воспроизведение анимации по нажатию кнопки?пожалуйста, укажите в направлении.Если есть лучший способ сделать это, пожалуйста, дайте мне знать.

Я проверил код и обнаружил, что анимация останавливается, когда значение переменной _snakingVertices становится _snakeLatLngs.length-1, но не может его использовать.Это уникальный вызов.

Код JavaScript можно найти здесь Leaflet.SnakeAnim

1 Ответ

0 голосов
/ 16 октября 2018

Сохраните возвращаемое значение от вызова до L.Util.requestAnimFrame(), что происходит здесь .

Добавьте новый метод с именем snakePause или snakeStop или что-то в этом роде и вызовите L.Util.cancelAnimFrame со значением, сохраненным ранее.При необходимости добавьте проверки работоспособности (проверьте, действительно ли сохранено значение и т. Д.).

Добавьте другой метод с именем snakeResume или что-то в этом роде и вызовите L.Util.requestAnimFrame(), чтобы перезапустить отложенные вызовы на this._snake(),Добавьте проверки работоспособности, чтобы несколько вызовов на snakeResume не оказывали вредного воздействия (убедитесь, что нет сохраненного возвращаемого значения из предыдущего requestAnimFrame и т. Д.).


Приостановка и возобновление - это проблема чисто таймеров.и к нему следует обращаться только с requestAnimFrame и cancelAnimFrame, обращая внимание на любые возможные условия гонки.Нет никакой необходимости связываться с данными, кроме строго необходимых (сохраненные значения для отложенных вызовов и сохраненное значение performance.now для определения времени роста линии).

...