Домой › Форумы › Для программистов › Несколько открытых аннотаций сразу
- В этой теме 1 ответ, 2 участника, последнее обновление 5 лет назад сделано
Ivan Lyubovnikov.
-
АвторСообщения
-
22 февраля, 2020 в 22:18 #15428
egarshan
УчастникЗдравствуйте. Столкнулся с необходимостью отображать несколько открытых аннотаций сразу, то есть при открытии новой аннотации объекта, открытые ранее не должны исчезать. Ни в одном из файлов .js, а также с помощью отладчика не смог найти функцию, отвечающую за обработку открытых аннтоаций.
Как можно осуществить данную задачу?На изображении 1 желаемый результат. По дефолту при открытии новой аннотации, ранее открытая аннотация исчезает и остается только имя аннотации.
Вложения:
Вы должны войти для просмотра вложений.10 марта, 2020 в 17:40 #15516Ivan Lyubovnikov
StaffЗдравствуйте, извините за запоздалый ответ.
Ни в одном из файлов .js, а также с помощью отладчика не смог найти функцию, отвечающую за обработку открытых аннтоаций.
Это все находится внутри самого движка v3d.js, который минифицирован. Кроме того, в аннотациях это поведение вшито, поэтому просто поменять не получится.
Но фактически там только меняется стиль visibility у соответствующих элементов, поэтому можно переопределить CSS у всех аннотаций в сцене, после того как она была загружена, например в функции runCode стандартного шаблона приложения:
function annotationOverrideVisibility(obj) { // классы с "visibility: hidden!important;" и // "visibility: visible!important;" var FORCE_VISIBLE_CLASS = 'v3d-annotation-dialog--visible'; var FORCE_HIDDEN_CLASS = 'v3d-annotation-dialog--hidden'; // при старте форсируем hidden!important obj.annotationDialog.classList.add(FORCE_HIDDEN_CLASS); obj.annotation.addEventListener('click', function() { // при клике переключаем между hidden!important и visible!important obj.annotationDialog.classList.toggle(FORCE_VISIBLE_CLASS); obj.annotationDialog.classList.toggle(FORCE_HIDDEN_CLASS); }); } function runCode(app) { // бежим по всей сцене app.scene.traverse(function(obj) { if (obj.isAnnotation) { // обрабатываем каждую аннотацию annotationOverrideVisibility(obj); } }); }
Ключевой момент в том, чтобы использовать стили с important для visibility, чтобы переопределить скрытие аннотаций автоматом, например добавив в CSS:
.v3d-annotation-dialog--hidden { visibility: hidden!important; } .v3d-annotation-dialog--visible { visibility: visible!important; }
Co-founder and lead developer at Soft8Soft.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.