Как убрать элементы навигации с панорам (маркеры и стрелки)
Тестирую функционал API панорам. Возникло желание выводить на весь экран чистую панораму без маркеров с адресами домов и стрелок.
Искал решения, нашел одно в архиве обращений: https://yandex.ru/blog/mapsapi/kak-spryatat-u-panoramy-strelki-perekhodov#59784b9f670a7100272f7fdd.
Однако пока это не решает задачу. Пользуясь интерактивным курсором, можно переходить на другие ближайшие панорамы и при переходе все установки переопределения методов сбрасываются, маркеры и стрелки снова видны.
Пробовал решить следующим способом:
Есть функция get_ypano
, которая получает на вход координаты широты/долготы и функция put_pano_in_player
, которая берет на входе панораму, очищает div с объектом player
, и вкладывает в него объект новый player
. При щелчке интерактивным курсором по новой локации определяется новая панорама и функция put_pano_in_player
вызывает себя изнутри в сигнале panoramachange
, но уже с новой панорамой. Однако это не помогло, в консоли ошибки и маркеры со стрелками видны.
function get_ypano(x, y){
ymaps.panorama.locate([y, x]).done(
function(pano_list){
if (pano_list.length >0){
var panorama = pano_list[0];
console.log(panorama)
panorama.getMarkers = function () { return []; };
panorama.getConnectionArrows = function () { return []; };
panorama.getGraph = function () { return null; }
panorama.getConnectionMarkers = function () { return []; };
put_pano_in_player(panorama)
}else{
console.log('no pano here')
}
}
)
}
function put_pano_in_player(panorama){
document.getElementById('player1').innerHTML = "";
player = new ymaps.panorama.Player(
'player1',
panorama,
{
direction: [0, 0],
span:[80, 80],
controls: []
}
);
player.events.add('directionchange', function () {
get_hs(player)
});
player.events.add('spanchange', function () {
get_hs(player)
});
player.events.add('panoramachange', function () {
panorama = player.getPanorama()
put_pano_in_player(panorama)
});
$('[class*=panorama-control]').css({"display":"none"})
}
Может есть какой-то рабочий и более простой метод?
Ответы (2 шт):
Уже созданные панорамы от Яндекса невозможно изменить и скрыть маркеры и адреса, для них также нельзя задать собственный стиль, который может перекрывать адрес. Поэтому лучшим решением для вашей идеи будет создание собственной панорамы, на которой вы скроете ненужные элементы.
2024-11-21 16:58:44, Pavel Pereverzev <>:
Тестирую функционал API панорам. Возникло желание выводить на весь экран чистую панораму без маркеров с адресами домов и стрелок.
Искал решения, нашел одно в архиве обращений: https://yandex.ru/blog/mapsapi/kak-spryatat-u-panoramy-strelki-perekhodov#59784b9f670a7100272f7fdd.
Однако пока это не решает задачу. Пользуясь интерактивным курсором, можно переходить на другие ближайшие панорамы и при переходе все установки переопределения методов сбрасываются, маркеры и стрелки снова видны.
Пробовал решить следующим способом: Есть функция
get_ypano
, которая получает на вход координаты широты/долготы и функцияput_pano_in_player
, которая берет на входе панораму, очищает div с объектомplayer
, и вкладывает в него объект новыйplayer
. При щелчке интерактивным курсором по новой локации определяется новая панорама и функцияput_pano_in_player
вызывает себя изнутри в сигналеpanoramachange
, но уже с новой панорамой. Однако это не помогло, в консоли ошибки и маркеры со стрелками видны.function get_ypano(x, y){ ymaps.panorama.locate([y, x]).done( function(pano_list){ if (pano_list.length >0){ var panorama = pano_list[0]; console.log(panorama) panorama.getMarkers = function () { return []; }; panorama.getConnectionArrows = function () { return []; }; panorama.getGraph = function () { return null; } panorama.getConnectionMarkers = function () { return []; }; put_pano_in_player(panorama) }else{ console.log('no pano here') } } ) } function put_pano_in_player(panorama){ document.getElementById('player1').innerHTML = ""; player = new ymaps.panorama.Player( 'player1', panorama, { direction: [0, 0], span:[80, 80], controls: [] } ); player.events.add('directionchange', function () { get_hs(player) }); player.events.add('spanchange', function () { get_hs(player) }); player.events.add('panoramachange', function () { panorama = player.getPanorama() put_pano_in_player(panorama) }); $('[class*=panorama-control]').css({"display":"none"}) }
Может есть какой-то рабочий и более простой метод?
Вместо блока с player.events.add ...
, где вы навешиваете обработчики на player, используйте следующее:
const enginePrototype = Object.getPrototypeOf(player._engine);
enginePrototype._onThoroughfareLoad = function (e) {
e._markers = [];
e._connectionArrows = [];
this.setPanorama(e);
};
enginePrototype._onJumpLoad = function (e) {
e._markers = [];
e._connectionArrows = [];
this.setPanorama(e);
};