Вы столкнулись с проблемой синхронизации.Когда ваш обычный JS работает, circles
еще не определен.Это потому, что ваш бумажный скрипт находится внутри элемента <script type="text/paperscript">
.Это изначально не поддерживается браузером, поэтому он не будет запущен сразу.Скорее всего, через некоторое время после загрузки paper.js
он в конечном итоге читает ваш элемент скрипта и интерпретирует его.
Вам необходимо убедиться, что вы не пытаетесь получить доступ к circles
до его определения.Если он будет непредсказуемым, когда ваш papercript будет готов, вы можете использовать callback , чтобы уведомить внешний JS о запуске paperScript.Например, если вы добавите это в свой текст:
if (window.onCirclesReady)
window.onCirclesReady(circles);
... вы можете заключить JS в следующее:
window.onCirclesReady = circles => {
// Code here
};
Это решает две проблемы.Во-первых, вы знаете, что ваш код JS не будет работать до тех пор, пока не будет запущен paperScript.Во-вторых, вы передаете массив circles
, поэтому вам не нужно использовать глобальную переменную, чтобы сделать его доступным.Вы можете расширить обратный вызов для передачи дополнительных данных по мере необходимости.
Обновления для вашего CodePen находятся здесь