Commit b18fdfbaf2492a17d723aeb640b449ae3de5da5b
1 parent
8634eac35b
Exists in
master
Скрипт js по поводу карты
Showing 3 changed files with 163 additions and 4 deletions Side-by-side Diff
app/Http/Controllers/MainController.php
... | ... | @@ -270,7 +270,11 @@ class MainController extends Controller |
270 | 270 | * Избранное |
271 | 271 | */ |
272 | 272 | public function Favorite(Request $request) { |
273 | - $Arr = json_decode($_COOKIE['favorite_house'], true); | |
273 | + if (empty($_COOKIE['favorite_house'])) { | |
274 | + $Arr = Array(); | |
275 | + } else { | |
276 | + $Arr = json_decode($_COOKIE['favorite_house'], true); | |
277 | + } | |
274 | 278 | if (!empty($Arr) && is_array($Arr)) { |
275 | 279 | $houses = House::with('areas')->whereIn('id', $Arr); |
276 | 280 |
public/js/main.js
... | ... | @@ -29,7 +29,7 @@ class App { |
29 | 29 | this.sendForm('.js_popup_sending_form_', '[data-popup="success"]'); |
30 | 30 | //this.sendOffer(); //отправка предложения по e-mail; |
31 | 31 | |
32 | - this.setGeneralMap(); // карта на странице карт; | |
32 | + //this.setGeneralMap(); // карта на странице карт; | |
33 | 33 | this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК'; |
34 | 34 | this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение'; |
35 | 35 | this.setCatalogSorts(); // сортировка на странице 'каталог'; |
... | ... | @@ -1206,7 +1206,7 @@ class App { |
1206 | 1206 | |
1207 | 1207 | // карта на странице карт; |
1208 | 1208 | setGeneralMap() { |
1209 | - | |
1209 | +/* | |
1210 | 1210 | if (document.querySelector('#general-map')) { |
1211 | 1211 | |
1212 | 1212 | ymaps.ready(init); // Дождёмся загрузки API и готовности DOM; |
... | ... | @@ -1358,7 +1358,7 @@ class App { |
1358 | 1358 | } |
1359 | 1359 | |
1360 | 1360 | }; |
1361 | - | |
1361 | +*/ | |
1362 | 1362 | |
1363 | 1363 | // аккордеон в футере |
1364 | 1364 | setFooterSpoilers() { |
resources/views/mapsobj.blade.php
... | ... | @@ -6,6 +6,161 @@ |
6 | 6 | |
7 | 7 | @section('custom_js') |
8 | 8 | @include('js.filter_value') |
9 | + <script> | |
10 | + setGeneralMap() { | |
11 | + | |
12 | + if (document.querySelector('#general-map')) { | |
13 | + | |
14 | + ymaps.ready(init); // Дождёмся загрузки API и готовности DOM; | |
15 | + | |
16 | + function init() { | |
17 | + | |
18 | + const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id; | |
19 | + center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования; | |
20 | + zoom: 10, | |
21 | + controls: [] // Скрываем элементы управления на карте; | |
22 | + }); | |
23 | + | |
24 | + // Создаём макет содержимого. | |
25 | + const MyIconContentLayout = ymaps.templateLayoutFactory.createClass( | |
26 | + '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>' | |
27 | + ); | |
28 | + | |
29 | + let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива); | |
30 | + // preset: 'islands#yellowIcon' | |
31 | + }); | |
32 | + | |
33 | + let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте); | |
34 | + [55.867783219108354, 37.392867499999916], | |
35 | + [55.728043075486504, 37.73937949999994], | |
36 | + [55.72624100423305, 37.476078499999964], | |
37 | + [55.80751105044832, 37.449622999999974], | |
38 | + [55.601783098948836, 37.36700499999998], | |
39 | + [55.86086502152225, 37.540348999999964], | |
40 | + [55.784961528728715, 37.56188599999996], | |
41 | + [55.63910010399773, 37.319407999999996], | |
42 | + [55.55819256767507, 37.55711549999994], | |
43 | + [55.79829252928473, 37.52063549999999], | |
44 | + ]; | |
45 | + | |
46 | + for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию; | |
47 | + collection.add(new ymaps.Placemark(collectionCoords[i])); | |
48 | + collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent'; | |
49 | + } | |
50 | + | |
51 | + myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту; | |
52 | + | |
53 | + collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета; | |
54 | + collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки; | |
55 | + collection.options.set('iconImageSize', [52, 67]); // Размеры метки; | |
56 | + collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); | |
57 | + collection.options.set('iconContentOffset', [0, 17]); | |
58 | + collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); | |
59 | + | |
60 | + const pageMapBar = document.querySelector('.js_page_map_bar'); | |
61 | + const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn'); | |
62 | + const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list'); | |
63 | + const pageMapBarCards = pageMapBar.querySelectorAll('.card-news'); | |
64 | + | |
65 | + const showCard = (i) => { | |
66 | + | |
67 | + pageMapBarCards.forEach((card, k) => { | |
68 | + | |
69 | + card.classList.remove('active'); | |
70 | + | |
71 | + if (i == k) { | |
72 | + card.classList.add('active'); | |
73 | + } | |
74 | + | |
75 | + }); | |
76 | + | |
77 | + }; | |
78 | + | |
79 | + const hidecard = () => { | |
80 | + | |
81 | + pageMapBarCards.forEach(card => { | |
82 | + card.classList.remove('active'); | |
83 | + }); | |
84 | + | |
85 | + } | |
86 | + | |
87 | + let pageMapBarItems; | |
88 | + | |
89 | + pageMapBarBtn.addEventListener('click', () => { | |
90 | + pageMapBar.classList.toggle('active'); | |
91 | + }); | |
92 | + | |
93 | + pageMapBarList.addEventListener('click', (e) => { | |
94 | + | |
95 | + if (e.target.closest('.page-map-bar__item')) { | |
96 | + | |
97 | + pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); | |
98 | + | |
99 | + pageMapBarItems.forEach((item, i) => { | |
100 | + | |
101 | + if (e.target == item && e.target.classList.contains('active')) { | |
102 | + | |
103 | + item.classList.remove('active'); | |
104 | + | |
105 | + hidecard(); | |
106 | + | |
107 | + } else if (e.target == item) { | |
108 | + | |
109 | + pageMapBarItems.forEach(item => { | |
110 | + item.classList.remove('active'); | |
111 | + }); | |
112 | + | |
113 | + item.classList.add('active'); | |
114 | + | |
115 | + let offsetCoords = collection.get(i).geometry.getCoordinates(); | |
116 | + | |
117 | + offsetCoords = [ | |
118 | + offsetCoords[0] - 0.0025, | |
119 | + offsetCoords[1] | |
120 | + ]; | |
121 | + | |
122 | + myMap.setZoom(16); | |
123 | + // myMap.setCenter(collection.get(i).geometry.getCoordinates()); | |
124 | + myMap.setCenter(offsetCoords); | |
125 | + | |
126 | + showCard(i); | |
127 | + | |
128 | + } | |
129 | + | |
130 | + }); | |
131 | + } | |
132 | + | |
133 | + }); | |
134 | + | |
135 | + collection.events.add('click', function (e) { | |
136 | + | |
137 | + for (let i = 0, l = collection.getLength(); i < l; i++) { | |
138 | + | |
139 | + if (e.get('target') == collection.get(i)) { | |
140 | + | |
141 | + pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); | |
142 | + | |
143 | + pageMapBarItems.forEach((item) => { | |
144 | + pageMapBar.classList.add('active'); | |
145 | + item.classList.remove('active'); | |
146 | + }); | |
147 | + | |
148 | + pageMapBarItems[i].classList.add('active'); | |
149 | + | |
150 | + showCard(i); | |
151 | + | |
152 | + } | |
153 | + | |
154 | + } | |
155 | + | |
156 | + }); | |
157 | + | |
158 | + } | |
159 | + | |
160 | + } | |
161 | + | |
162 | + }; | |
163 | + </script> | |
9 | 164 | @endsection |
10 | 165 | |
11 | 166 | @section('content') |