#javascript #html #three.js
#javascript #HTML #three.js
Вопрос:
Новичок в Javascript и HTML здесь:
Я пытаюсь отобразить 3D-модель (файл .gltf) на веб-сайте с элементами управления (панорамирование, масштабирование и т.д.), Используя javascript three.js Модуль OrbitControls. Несмотря на использование <script type="module">
тегов в HTML для загрузки OrbitControls, когда я пытаюсь загрузить страницу, я получаю Uncaught ReferenceError: OrbitControls is not defined
от firefox. Я могу успешно отобразить изображение, если я не включу оператор, определяющий элементы управления, но включу тег импорта.
Краткий код:
—HTML:
<head>
<!-- Imports for three.js and GLTFLoader.js, both seem to be working -->
<script type="module">
import { OrbitControls } from "https://unpkg.com/three/examples/jsm/controls/OrbitControls.js";
</script>
<script src="script.js" defer="defer"></script>
</head>
—Javascript (из script.js ):
"use strict";
function main() {
//Create render and camera objects; both work when not using controls
const controls = new OrbitControls( camera, renderer.domElement );
// create scene, GLTFLoader, run animate function
}
const obj_returned = main();
Я попробовал несколько разных стилей команды script:
<script type="module"> import { OrbitControls } from "https://unpkg.com/three/examples/jsm/controls/OrbitControls.js"; </script>
Это приводит к Uncaught ReferenceError: OrbitControls is not defined
ошибке,
<script type="module" src="https://unpkg.com/three/examples/jsm/controls/OrbitControls.js">
выдает ту же ошибку, и
<script src="https://unpkg.com/three/examples/jsm/controls/OrbitControls.js"></script>
На самом деле это дает ту же ошибку плюс Uncaught SyntaxError: import declarations may only appear at top level of a module
, я думаю, из-за отсутствия type="module"
флага.
Все локальные файлы находятся в одном каталоге.
Я просмотрел несколько других примеров подобного рода, чтобы увидеть, чего мне не хватает (например, здесь, здесь, здесь, three.js документация, исходный код OrbitControls и некоторые другие).
Я очень новичок в JS и HTML, поэтому 1) это, вероятно, что-то очень очевидное и 2) если это не тривиально / опечатка, я был бы признателен за небольшое объяснение того, почему это не работает, чтобы я мог избежать подобных ошибок в будущем. Спасибо!
Комментарии:
1. Добро пожаловать в SO! Если вы хотите использовать любой менеджер пакетов js (просто привяжите файл js к своей странице) — используйте папки ‘js’ в дистрибутиве threejs, а не ‘jsm’. папки ‘Jsm’ содержат модуль для использования с webpack или другими менеджерами.
2. @SalientBrain Спасибо за ваш ответ! Если я правильно понимаю, ваше предложение состоит в том, чтобы просто изменить URL-адрес импорта, чтобы быть
/js/controls/OrbitControls.js
? Это дает мнеSyntaxError: import not found
ошибку для OrbitControls в дополнение к ссылочной ошибке, упомянутой в моем вопросе (хотя этот адрес кажется правильным). Есть ли просто лучший способ сделать этот импорт в целом?3. @LvP вы решили это? У меня точно такая же проблема