Клуб API Карт

Как спрятать у панорамы стрелки переходов?

Пост в архиве.

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

14 комментариев
kirill.s.dmitrenko
25 июля 2017, 20:12
> спрятать отображение стрелок переходов


Официально сейчас такой возможности нет, но есть workaround. Надо у объекта панорамы переопределить метод getConnectionArrows() так, чтоб он всегда возвращал пустой массив.


> делаю автоматичскую смену направления взгляда


Можно чуть подробнее, что именно вы делаете? Просто setDirection при открытии панорамы?


> И возможно ли сделать предзагрузку тайлов и кеширование чтобы сразу отображались картинки высокого качества и не грузились заново при повторном повороте на тоже направление?


Это в работе.
Обновлено 25 июля 2017, 20:13
kirill.s.dmitrenko,

Задала пустой массив для стрелок, для первой панорамы срабатывает, для связанных нет, хотя я всем связанным панорамам прописала также и консоль выводит, что данное свойство объекта текущей панорамы содержит пустой массив...в чем причина не пойму..
var panorama = player.getPanorama();
panorama._connectionArrows = Array();
Сам метод getConnectionArrows() я тоже переопределяла
kirill.s.dmitrenko
26 июля 2017, 10:58
yndx-tnc38,
После того, как панорама попала в плеер, поздно :)  Нужно "ловить" панораму до. Например, используя ymaps.panorama.locate вместо ymaps.panorama.createPlayer:


ymaps.panorama.locate(/* ... */).then(function (panoramas) {
    var panorama = panoramas[0];
    panorama.getConnectionArrows = function () { return []; };
    var player = new ymaps.panorama.Player('elem', panorama);
});


Что касается переходов, то ситуация становится сложнее :( После убирания стрелок остается еще граф быстрых переходов. Проще всего его, наверное, будет убрать просто:


panorama.getGraph = function () { return null; }


Либо прийдется расковыривать интерфейс графа, обходить в нём все ноды и в каждой переопредлять метод getConnectedPanorama так, чтоб перехватывать новую панораму до того, как оно попадет в плеер.
Обновлено 26 июля 2017, 10:58
kirill.s.dmitrenko,

автоматическая смена направления - 
да вызываю в цикле setDirection от одного угла до другого,с таймаутом. Спасибо за ответ.
kirill.s.dmitrenko
26 июля 2017, 10:49
yndx-tnc38,
А есть ссылка на страницу, где можно увидеть проблему?
kirill.s.dmitrenko,
 нет только, ссылка на гитхаб с кодом https://github.com/Karine91/oceanarium/blob/master/app/js/main.js
kirill.s.dmitrenko
26 июля 2017, 11:20
yndx-tnc38,
20ms — это мало. Попробуйте 50 или даже 100.
Обновлено 26 июля 2017, 11:21
kirill.s.dmitrenko,
100ms выглядит заторможено и все равно после поворота, часть тайлов остается плохого качества
http://joxi.ru/J2b4DK9t4GMxWr
Обновлено 26 июля 2017, 11:37
kirill.s.dmitrenko,
и во время 12 сек задержки после поворота, тайлы низкого качества не сменяются на тайлы высокого...
kirill.s.dmitrenko,
когда панорама сменяется тайлы высокого качества грузятся, а при смене направления нет, может можно вызвать релоад тайлов как-то?
kirill.s.dmitrenko
26 июля 2017, 14:43
yndx-tnc38,
В общем, это баг:) Зачинен, в обозримом будущем окажется в продакшне.  Но так раз в 20ms его менять все равно не стоит, лучше 40-50.
kirill.s.dmitrenko,
Ясно, спасибо.
kirill.s.dmitrenko,

Можно еще как-то отследить загрузку тайлов высокого качества? 
kirill.s.dmitrenko
26 июля 2017, 10:49
yndx-tnc38,
Пока никак.