Форум программистов, компьютерный форум, киберфорум
JavaScript: API
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
37 / 35 / 7
Регистрация: 18.04.2009
Сообщений: 435
Яндекс Карты API

Не добавить на карту ListBox

30.01.2020, 21:08. Показов 1401. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!

Взял с ресурсов Яндекса пример кода работы с Яндекс картами.
Но никак не получается на карту добавить ListBox.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
    // Создание экземпляра карты и его привязка к созданному контейнеру
    var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
 
    // Установка для карты ее центра и масштаба
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
    map.setCenter(new YMaps.GeoPoint(28.35539991, 57.80714194), 16);
 
    // Создание группы объектов и добавление ее на карту
    var group = new YMaps.GeoObjectCollection();
 
    // Перебираем все объекты коллекции buildings
    for(var i = 0; i < buildings.length; i++)
    {
        //Добавляем метки на карту
        var geopoint = new YMaps.GeoPoint(buildings[i].latitude,buildings[i].longitude);
        group.add(createPlacemark(geopoint,buildings[i].name,buildings[i].description));
    }
 
    map.addOverlay(group);
 
    // Создание управляющего элемента "Путеводитель по офисам"
    map.addControl(new OfficeNavigator(group));
 
    var spdList = new YMaps.control.ListBox({
        data: {
            content: 'Узел СПД'
        },
        items:
        [
        ]
    });
    for (var i = 0; i < buildings.length; i++)
    {
        var spdListItem = new ymaps.control.ListBoxItem(buildings[i].name);
        spdListItem.events.add('click',function () {  
        });
        spdList.add(spdListItem);
    }
 
    myMap.controls.add(spdList, {float: 'left'});
});
 
// Функия создания метки
function createPlacemark (geoPoint, name, description) {
    var placemark = new YMaps.Placemark(geoPoint);
    placemark.name = name;
    placemark.description = description;
 
    return placemark;
}
 
// Управляющий элемент "Путеводитель по офисам", реализиует интерфейс YMaps.IControl
function OfficeNavigator (offices) {
    // Добавление на карту
    this.onAddToMap = function (map, position) {
            this.container = YMaps.jQuery("<ul></ul>");
            //this.container = window.document.querySelector("#spd");
            this.map = map;
            this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(10, 10));
 
            // Выставление необходимых CSS-свойств
            this.container.css({
                position: "absolute",
                zIndex: YMaps.ZIndex.CONTROL,
                background: '#fff',
                //listStyle: 'none',
                listStyle: 'square',
                padding: '10px',
                margin: 0
            });
            
            // Формирование списка офисов
            this._generateList();
            
            // Применение позиции к управляющему элементу
            this.position.apply(this.container);
            
            // Добавление на карту
            this.container.appendTo(this.map.getContainer());
    }
 
    // Удаление с карты
    this.onRemoveFromMap = function () {
        this.container.remove();
        this.container = this.map = null;
    };
 
    // Пока "летим" игнорируем клики по ссылкам
    this.isFlying = 0;
 
    // Формирование списка офисов
    this._generateList = function () {
        var _this = this;
        
        // Для каждого объекта вызываем функцию-обработчик
        offices.forEach(function (obj) {
            // Создание ссылки на объект
            var li = YMaps.jQuery("<li><a href=\"#\">" + obj.name + "</a></li>"),
                a = li.find("a"); 
            
            // Создание обработчика щелчка по ссылке
            li.bind("click", function () {
                if (!_this.isFlying) {
                    _this.isFlying = 1;
                    _this.map.panTo(obj.getGeoPoint(), {
                        flying: 1,
                        callback: function () {
                            obj.openBalloon();
                            _this.isFlying = 0;
                        }
                    });
                }
                return false;
            });
            
            // Слушатели событий на открытие и закрытие балуна у объекта
            YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
                a.css("text-decoration", "none");
            });
            
            YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
                a.css("text-decoration", "");
            });
            
            // Добавление ссылки на объект в общий список
            li.appendTo(_this.container);
        });
    };
}
JavaScript
1
2
3
4
5
6
7
8
9
10
var buildings = [
    {latitude: 37.678514,longitude: 55.758255,name: 'Москва (Самокатная)', description:'Москва, ул. Самокатная, дом 1, строение 21'},
    {latitude: 37.587398,longitude: 55.734172,name: 'Москва (Парк культуры)', description:'Москва, ул. Тимура Фрунзе, 11 и ул. Льва Толстого, 16'},
    {latitude: 60.644555,longitude: 56.845209,name: 'Екатеринбург', description:'Екатеринбург, ул. Гагарина, 8, офис 602'},
    {latitude: 30.406127143,longitude: 59.9590655815,name: 'Санкт-Петербург', description:'Санкт-Петербург, Cвердловская набережная, дом 44, бизнес-центр «Бенуа» (4-6 эт.)'},
    {latitude: 30.749512,longitude: 46.459542,name: 'Одесса', description:'Одесса, пр. Шевченко, дом 4-Д, офис 61'},
    {latitude: 30.598379,longitude: 50.45332,name: 'Киев', description:'Киев, ул. Луначарского, 4'},
    {latitude: 34.095482,longitude: 44.949507,name: 'Симферополь',description: 'Симферополь, ул. Героев Аджимушкая, 6/13, второй этаж'},
    {latitude:-122.348557,longitude: 37.578894,name: 'Burlingame',description: '3d floor, Suite 306, 330 Primrose Road Burlingame, CA 94010'}
];
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Офисы</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://api-maps.yandex.ru/1.1/index.xml" type="text/javascript"></script>
    <script src="yamaps.js" type="text/javascript"></script>
    <script src="buildings.js" type="text/javascript"></script>
</head>
 
<body>
    <div id="YMapsID" style="width:1500px;height:800px">
</body>
</html>
Помогите разобраться в чём затык?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2020, 21:08
Ответы с готовыми решениями:

Добавить элемент в ListBox, который находится в ListBox
Привет, у меня есть горизонтальный ListBox ListBox'ов. Но как добавить туда элемент. ListBox ListBox'ов &lt;ListBox...

Добавить карту в массив
Привет! Изучаю классы. Как добавить карту в колоду? using System; using System.Collections.Generic; using System.Linq; using...

Добавить карту и необходимые элементы
Здравствуйте ! Задался таким вопросом и никак не могу решить, прошу Вашей помощи. 1.Я добавил в базу этапы действий, как сделать...

1
37 / 35 / 7
Регистрация: 18.04.2009
Сообщений: 435
03.02.2020, 22:54  [ТС]
Разобрался с добавление выпадающего списка, но никак не добавить событие Click к каждому элементу.
Но при вставке кода добавления функции события Click выпадающий список не отображает.
Но если этот кусок кода убрать, то список появляется.
Подскажите как правильно добавить обработчик события?!
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
    // Создание экземпляра карты и его привязка к созданному контейнеру
    var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
 
    // Установка для карты ее центра и масштаба
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
    map.setCenter(new YMaps.GeoPoint(28.35539991, 57.80714194), 16);
 
    // Создание группы объектов и добавление ее на карту
    var group = new YMaps.GeoObjectCollection();
 
    // Перебираем все объекты коллекции buildings
    for(var i = 0; i < buildings.length; i++)
    {
        //Добавляем метки на карту
        var geopoint = new YMaps.GeoPoint(buildings[i].latitude,buildings[i].longitude);
        group.add(createPlacemark(geopoint,buildings[i].name,buildings[i].description));
    }
 
    map.addOverlay(group);
    // Создание управляющего элемента "Путеводитель по офисам"
    //map.addControl(new OfficeNavigator(group));
 
    // Создание выпадающего списка
    var spdList = new YMaps.ListBox();
    // Создаём элементы списка и добавляем их в список
    for (var i = 0; i < buildings.length; i++)
    {
        var spdListItem = new YMaps.ListBoxItem(buildings[i].name);
        spdListItem.Events.add('Click', function()
        {
            //map.setCenter([buildings[i].latitude,buildings[i].longitude]);
            alert("Работает!");
        });
        spdList.add(spdListItem);
    } 
    // Создание панели инструментов с выпадающим списком
    var toolBar = new YMaps.ToolBar(spdList);
    // Добавление панели инструментов на карту
    map.addControl(toolBar);
});
 
// Функия создания метки
function createPlacemark (geoPoint, name, description) {
    var placemark = new YMaps.Placemark(geoPoint);
    placemark.name = name;
    placemark.description = description;
 
    return placemark;
}
 
// Управляющий элемент "Путеводитель по офисам", реализиует интерфейс YMaps.IControl
function OfficeNavigator (offices) {
    // Добавление на карту
    this.onAddToMap = function (map, position) {
            //Как получить доступ к ListBox ???
            this.container = YMaps.jQuery("<ul></ul>");
            //this.container = window.document.querySelector("#spd");
            this.map = map;
            this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(10, 10));
 
            // Выставление необходимых CSS-свойств
            this.container.css({
                position: "absolute",
                zIndex: YMaps.ZIndex.CONTROL,
                background: '#fff',
                //listStyle: 'none',
                listStyle: 'square',
                padding: '10px',
                margin: 0
            });
            
            // Формирование списка офисов
            this._generateList();
            
            // Применение позиции к управляющему элементу
            this.position.apply(this.container);
            
            // Добавление на карту
            this.container.appendTo(this.map.getContainer());
    }
 
    // Удаление с карты
    this.onRemoveFromMap = function () {
        this.container.remove();
        this.container = this.map = null;
    };
 
    // Пока "летим" игнорируем клики по ссылкам
    this.isFlying = 0;
 
    // Формирование списка офисов
    this._generateList = function () {
        var _this = this;
        
        // Для каждого объекта вызываем функцию-обработчик
        offices.forEach(function (obj) {
            // Создание ссылки на объект
            var li = YMaps.jQuery("<li><a href=\"#\">" + obj.name + "</a></li>"),
                a = li.find("a"); 
            
            // Создание обработчика щелчка по ссылке
            li.bind("click", function () {
                if (!_this.isFlying) {
                    _this.isFlying = 1;
                    _this.map.panTo(obj.getGeoPoint(), {
                        flying: 1,
                        callback: function () {
                            obj.openBalloon();
                            _this.isFlying = 0;
                        }
                    });
                }
                return false;
            });
            
            // Слушатели событий на открытие и закрытие балуна у объекта
            YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
                a.css("text-decoration", "none");
            });
            
            YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
                a.css("text-decoration", "");
            });
            
            // Добавление ссылки на объект в общий список
            li.appendTo(_this.container);
        });
    };
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2020, 22:54
Помогаю со студенческими работами здесь

Добавить карту на сайт и метку
Здравтсвуйте, меня интересует такой вот вопрос: У меня есть сайт и есть база данных. В базе данных есть таблица с различными магазинами...

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

Как через listbox добавить название меню, а через listbox обработчик?
Как известно, в ListBox можно добавлять элементы любого типа. Заполните ListBox несколькими обработчиками событий. Пусть пользователь...

Добавить второй маркер в карту Гугл
Здравствуйте! Мне нужно поставить второй маркер на карте Гугл. Субдомен - http://mirta2.monreall.net/content/gde-kupit Вот код. ...

Добавить карту на сайт и изменить маркер
Что-то не получается добавить google-карту с помощью google maps api. 1-й раз столкнулся с работой api. Посмотрел несколько примеров,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru