Хобрук: Ваш путь к мастерству в программировании

Трекбол Three.js управляет событием перетаскивания, не работающим в модальном режиме UIkit

Ситуация такова: у меня есть полноэкранный холст Three.js, где все работает отлично, но я должен показать предварительный просмотр в модальном окне UIkit. Там элементы управления работают только частично: масштабирование работает, панорамирование — нет.

JS: визуализатор и элементы управления

renderer = new THREE.WebGLRenderer({
  alpha: true
});
// renderer size
if (typeof size === "object") {
  renderer.setSize(size.width, size.height);
} else {
  renderer.setSize(window.innerWidth, window.innerHeight);
}
$(canvas).append(renderer.domElement);

renderer.gammaInput = true;
renderer.gammaOutput = true;

renderer.shadowMap.enabled = true;
renderer.shadowMap.cullFace = THREE.CullFaceBack;

controls = new THREE.TrackballControls(camera, renderer.domElement);
controls.rotateSpeed = 10;
controls.zoomSpeed = 1.2;
controls.panSpeed = 0.8;

controls.noZoom = false;
controls.noPan = false;
controls.dynamicDampingFactor = 0.3;

controls.keys = [65, 83, 68];

controls.addEventListener("change", render);

Как вы можете видеть в приведенном выше примере кода, я создаю элементы управления после средства визуализации, избегая ситуации, описанной в этой теме и решенной этим ответом . Также объект управления явно привязывается к элементу DOM средства визуализации, чтобы избежать блокировки других событий.

Похоже, модальное окно UIkit каким-то образом перехватывает все события перетаскивания.

Я воспроизвел сценарий в этой скрипте.

Кто-нибудь из вас сталкивался с подобной ситуацией и нашел решение или хотя бы обходной путь?


  • Ваша текущая скрипка неправильно связывает TrackballControls.js. Вот исправленная версия. 20.05.2016
  • Спасибо, @LeJeuneRenard. Соответственно отредактировал вопрос. 20.05.2016

Ответы:


1

Модальное окно UIkit не перехватывает события перетаскивания. Ваша проблема в том, что TrackballControls вычисляет размер domElement, пока элемент скрыт, поэтому имеет нулевые размеры.

Что вам нужно сделать, так это обновить представление элемента управления о размере domElement после открытия модального окна, и, следовательно, domElement является правильным размером:

$('#modal').on('show.uk.modal', function(){
  var cachedControl = controlsMap['#dialog-canvas']
  cachedControl.handleResize(); // Recalculate size
});

Вот скрипка с изменением.

Вот документация по модальным событиям набора пользовательского интерфейса.

20.05.2016
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..