В данном примере драггер используется для перетаскивания HTML-элемента "#marker".
Этот HTML-элемент был передан как значение опции autoStartElement.
Драггер автоматически запускается по событию mousedown элемента autoStartElement.
Есть возможность инициализировать работу драггера вручную при помощи метода start().
Драггер прекращает работу по событию mouseup документа, но можно досрочно прекратить работу драггера методом stop().
Все события драггера содержат поля 'position' и 'delta',
которые позволяют узнать текущее положение курсора и смещение текущего положения относительно последнего события драггера.
В примере по событию stop происходит перевод положения маркера в геокоординаты,
если драггер прекратил работу над картой.
\r\n","dragger.js":"jQuery(function () {\r\n ymaps.ready(init);\r\n});\r\n\r\nfunction init () {\r\n var map = new ymaps.Map('map', {\r\n center: [55.819543, 37.611619],\r\n zoom: 10\r\n }, {\r\n searchControlProvider: 'yandex#search'\r\n }),\r\n markerElement = jQuery('#marker'),\r\n dragger = new ymaps.util.Dragger({\r\n // Драггер будет автоматически запускаться при нажатии на элемент 'marker'.\r\n autoStartElement: markerElement[0]\r\n }),\r\n // Смещение маркера относительно курсора.\r\n markerOffset,\r\n markerPosition;\r\n\r\n dragger.events\r\n .add('start', onDraggerStart)\r\n .add('move', onDraggerMove)\r\n .add('stop', onDraggerEnd);\r\n\r\n function onDraggerStart(event) { \r\n var offset = markerElement.offset(),\r\n position = event.get('position');\r\n // Сохраняем смещение маркера относительно точки начала драга.\t\r\n markerOffset = [\r\n position[0] - offset.left,\r\n position[1] - offset.top\r\n ];\r\n markerPosition = [\r\n position[0] - markerOffset[0],\r\n position[1] - markerOffset[1]\r\n ];\r\n\r\n applyMarkerPosition();\r\n }\r\n\r\n function onDraggerMove(event) {\r\n applyDelta(event);\r\n }\r\n\r\n function onDraggerEnd(event) {\r\n applyDelta(event);\r\n markerPosition[0] += markerOffset[0];\r\n markerPosition[1] += markerOffset[1];\r\n // Переводим координаты страницы в глобальные пиксельные координаты.\r\n var markerGlobalPosition = map.converter.pageToGlobal(markerPosition),\r\n // Получаем центр карты в глобальных пиксельных координатах.\r\n mapGlobalPixelCenter = map.getGlobalPixelCenter(),\r\n // Получением размер контейнера карты на странице.\r\n mapContainerSize = map.container.getSize(),\r\n mapContainerHalfSize = [mapContainerSize[0] / 2, mapContainerSize[1] / 2],\r\n // Вычисляем границы карты в глобальных пиксельных координатах.\r\n mapGlobalPixelBounds = [\r\n [mapGlobalPixelCenter[0] - mapContainerHalfSize[0], mapGlobalPixelCenter[1] - mapContainerHalfSize[1]],\r\n [mapGlobalPixelCenter[0] + mapContainerHalfSize[0], mapGlobalPixelCenter[1] + mapContainerHalfSize[1]]\r\n ];\r\n // Проверяем, что завершение работы драггера произошло в видимой области карты.\r\n if (containsPoint(mapGlobalPixelBounds, markerGlobalPosition)) {\r\n // Теперь переводим глобальные пиксельные координаты в геокоординаты с учетом текущего уровня масштабирования карты.\r\n var geoPosition = map.options.get('projection').fromGlobalPixels(markerGlobalPosition, map.getZoom()),\r\n // Получаем уровень зума карты.\r\n zoom = map.getZoom(),\r\n // Получаем координаты тайла.\r\n tileCoordinates = getTileCoordinate(markerGlobalPosition, zoom, 256);\r\n alert([\r\n 'Координаты: ' + geoPosition,\r\n 'Уровень зума: ' + zoom,\r\n 'Глобальные пиксельные координаты: ' + markerGlobalPosition,\r\n 'Координаты тайла: ' + tileCoordinates\r\n ].join(' '));\r\n }\r\n }\r\n\r\n function applyDelta (event) {\r\n // Поле 'delta' содержит разницу между положениями текущего и предыдущего события драггера.\r\n var delta = event.get('delta');\r\n markerPosition[0] += delta[0];\r\n markerPosition[1] += delta[1];\r\n applyMarkerPosition();\r\n }\r\n\r\n function applyMarkerPosition () {\r\n markerElement.css({\r\n left: markerPosition[0],\r\n top: markerPosition[1]\r\n });\r\n }\r\n\r\n function containsPoint (bounds, point) {\r\n return point[0] >= bounds[0][0] && point[0] <= bounds[1][0] &&\r\n point[1] >= bounds[0][1] && point[1] <= bounds[1][1];\r\n }\r\n\r\n function getTileCoordinate(coords, zoom, tileSize){\r\n return [\r\n Math.floor(coords[0] * zoom / tileSize),\r\n Math.floor(coords[1] * zoom / tileSize)\r\n ];\r\n }\r\n}"},"resources":["images/pin_food.png"],"directory":"https://sandbox.api.maps.yandex.net/examples/ru/2.1/dragger/"}
В данном примере драггер используется для перетаскивания HTML-элемента "#marker". Этот HTML-элемент был передан как значение опции autoStartElement. Драггер автоматически запускается по событию mousedown элемента autoStartElement. Есть возможность инициализировать работу драггера вручную при помощи метода start(). Драггер прекращает работу по событию mouseup документа, но можно досрочно прекратить работу драггера методом stop().
Все события драггера содержат поля 'position' и 'delta', которые позволяют узнать текущее положение курсора и смещение текущего положения относительно последнего события драггера. В примере по событию stop происходит перевод положения маркера в геокоординаты, если драггер прекратил работу над картой.