Использование api Яндекс.Карт

84
1

Upload: fdconf

Post on 14-Nov-2014

2.359 views

Category:

Technology


16 download

DESCRIPTION

Всеволод Шмыров​​ «Использование API Яндекс.Карт» Frontend Dev Conf'14 www.fdconf.by

TRANSCRIPT

Page 1: Использование API Яндекс.Карт

1

Page 2: Использование API Яндекс.Карт

2

Использование

API Яндекс.Карт.

Особенности версии 2.1

Всеволод Шмыров

Page 3: Использование API Яндекс.Карт

3

API Яндекс.Карт

Page 4: Использование API Яндекс.Карт

4

Поддержка актуальных браузеров

Page 5: Использование API Яндекс.Карт

5

Обратная совместимость

Page 6: Использование API Яндекс.Карт

6

Версии API

… 2.0.33 2.0.34

2.1-b 2.1.1 2.1.2 … 2.1.3

2.0.35 2.0.36 2.0.37 … 2.0.38

Page 7: Использование API Яндекс.Карт

7

Page 8: Использование API Яндекс.Карт

8

Версия 2.1

Page 9: Использование API Яндекс.Карт

9

Отличительные особенности 2.1:

• Отказ от поддержки устаревших

браузеров (особенно от IE 6 и 7)

• Частичное изменение программного

интерфейса со сломом обратной

совместимости

• Ориентирование на различные типы

устройств

Page 10: Использование API Яндекс.Карт

10 Пример http://example...

Page 11: Использование API Яндекс.Карт

11

Контролы в 2.0

Пример http://bit.ly/1q8lO6O

Page 12: Использование API Яндекс.Карт

12

Контролы в 2.1

Пример http://bit.ly/1qcVV7N

Page 13: Использование API Яндекс.Карт

13 Пример http://bit.ly/1fXXiAG

Page 14: Использование API Яндекс.Карт

14

Три состояния размера контролов

Large

Medium

Small

Page 15: Использование API Яндекс.Карт

15 Пример http://bit.ly/1fXXiAG

Page 16: Использование API Яндекс.Карт

16 Пример http://bit.ly/1fXXiAG

Page 17: Использование API Яндекс.Карт

17 Пример http://bit.ly/1fXXiAG

Page 18: Использование API Яндекс.Карт

18

Page 19: Использование API Яндекс.Карт

19

Опция size контролов

button.options.set(‘size’, ‘small’);

// значение по умолчанию “auto”

Page 20: Использование API Яндекс.Карт

20

Своя кнопка в 2.1

Large

Medium

Small

Пример http://jsfiddle.net/6Zv3X/1/

Page 21: Использование API Яндекс.Карт

21

Своя кнопка в 2.1

new ymaps.control.Button({

data: {

content: 'Моя кнопка',

image: 'http://site/img.button.svg'

}

});

Пример http://jsfiddle.net/6Zv3X/1/

Page 22: Использование API Яндекс.Карт

22

2.0 2.1

Page 23: Использование API Яндекс.Карт

23

Другие изменения в

контролах

Page 24: Использование API Яндекс.Карт

24

Позиционирование контролов в 2.0

50px

50px

Page 25: Использование API Яндекс.Карт

25

Абсолютное позиционирование в 2.0

map.controls.add(button1,

{top: 50, left: 50});

map.controls.add(button2,

{top: 50, left: 105});

map.controls.add(button3,

{top: 50, left: 160});

Page 26: Использование API Яндекс.Карт

26

var group = new ymaps.control.Group({

items: [ button1, button2, button3 ]

});

Плавающее позиционирование в 2.0

Page 27: Использование API Яндекс.Карт

27

Позиционирование контролов в 2.1

map.controls.add(button3, {float: 'right', floatIndex: 1});

map.controls.add(button4, {position: {top: 50, right: 50}});

Пример http://bit.ly/PAGSrA

Page 28: Использование API Яндекс.Карт

28

Элемент управления «Fullscreen»

Пример http://bit.ly/1eiVG3J

Page 29: Использование API Яндекс.Карт

29

Элемент управления «Fullscreen»

Пример http://bit.ly/1eiVG3J

Page 30: Использование API Яндекс.Карт

30

Наборы контролов

Page 31: Использование API Яндекс.Карт

31

var map = new ymaps.Map('map', {

center:

[53.90473, 27.551899],

zoom: 10

});

map.controls

.add('zoomControl')

.add('typeSelector')

.add('trafficControl')

.add('mapTools');

var map = new ymaps.Map('map', {

center:

[53.90473, 27.551899],

zoom: 10

//, controls: []

});

Пример http://bit.ly/1h4lVzT

Page 32: Использование API Яндекс.Карт

32

Набор контролов для большой карты

map.controls.add(‘largeMapDefaultSet’);

Page 33: Использование API Яндекс.Карт

33

Набор контролов для средней карты

map.controls.add(‘mediumMapDefaultSet’);

Page 34: Использование API Яндекс.Карт

34

Набор контролов для маленькой карты

map.controls.add(‘smallMapDefaultSet’);

Page 35: Использование API Яндекс.Карт

35

Балун

Page 36: Использование API Яндекс.Карт

36

Балун в 2.1

Пример http://bit.ly/1so6Ygt

Page 37: Использование API Яндекс.Карт

37

Балун в маленькой карте (2.0)

Page 38: Использование API Яндекс.Карт

38

Балун в маленькой карте (2.1)

Пример http://bit.ly/1so6Ygt

Page 39: Использование API Яндекс.Карт

39

Создание балуна геообъекта

var placemark = new ymaps.Placemark(

map.getCenter(), {

balloonContentBody: ‘Информация в балуне’

}

);

Пример http://bit.ly/1so6Ygt

Page 40: Использование API Яндекс.Карт

40

Новые метки

Page 41: Использование API Яндекс.Карт

41

Метки в 2.0

Пример http://bit.ly/1jlcrQa

Page 42: Использование API Яндекс.Карт

42

SVG Метки 2.1

• Меньший объем загружаемых

данных

• Хорошо отображаются на retina

дисплеях

• Новые возможности для

разработчиков

Page 43: Использование API Яндекс.Карт

43

Метки на Retina дисплеях

x1

x1

x5

x5

Page 44: Использование API Яндекс.Карт

44

Стандартные макеты меток в 2.1

Page 45: Использование API Яндекс.Карт

45

Стандартный макет метки в 2.1

new ymaps.Placemark(

geoPosition, {}, {

iconColor: '#5f3fcd'

}

);

Пример http://bit.ly/1e2bDRo

Page 46: Использование API Яндекс.Карт

46

Новый язык

шаблонов макетов

Page 47: Использование API Яндекс.Карт

47

Создание своего HTML-макета

var layout =

ymaps.templateLayoutFactory.createClass(

'<div class=customButton>123</div>'

);

Page 48: Использование API Яндекс.Карт

48

Пример создания своей HTML метки

layout =

ym.templateLayoutFactory.createClass(

'<div class=placemark></div>'

),

placemark = new ym.Placemark(

map.getCenter(), {}, {

iconLayout: layout

});

Пример http://bit.ly/1jlcPOJ

Page 49: Использование API Яндекс.Карт

49

Новый язык шаблонов макетов

[if !data.message]

Нет ни одной записи

[else]

$[[data.message]]

$[data.sublayout]

[endif]

{% if !data.message %}

Нет ни одной записи

{% else %}

{{ data.message }}

{% include data.sublayout %}

{% endif %}

Page 50: Использование API Яндекс.Карт

50

Итерация в шаблоне макета

var balloonLayout =

ymaps.templateLayoutFactory.createClass(

'<ul>' +

'{% for listItem in properties.wishList %}' +

'<li>{{ listItem }}</li>' +

'{% endfor %}' +

'</ul>'

);

var placemark = new ymaps.Placemark(

map.getCenter(),

{ wishList: [ 'Дорогая машина', 'Дом на

побережье', 'Portal gun' ] },

{ balloonContentLayout: balloonLayout }

);

Пример http://bit.ly/1q8jsom

Page 51: Использование API Яндекс.Карт

51

Подключение API

Page 52: Использование API Яндекс.Карт

52

Пакеты в версии 2.0

<script src="http://api-maps.yandex.ru/2.0/?load=package.map,

package.controls&lang=ru-RU" type="text/javascript"></script>

package.map Layer

LayerCollection

Map

MapEvent

MapType

Monitor

package.controls control.Button

control.Group

control.ListBox

control.ListBoxItem

control.MapTools

control.RollupButton

Page 53: Использование API Яндекс.Карт

53

Подключение API 2.0

<script src="http://api-

maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"

type="text/javascript"></script>

package.full package.map

package.controls

package.search

package.geoObjects

package.clusters

package.overlays

Page 54: Использование API Яндекс.Карт

54

Подключение API 2.1

<script src="http://api-maps.yandex.ru/2.1-dev/?lang=ru-RU"

type="text/javascript"></script>

package.full Map

GeoObject

Clusterer

Layer

GeoObjectCollection

control.Button

Page 55: Использование API Яндекс.Карт

55

Сокращение размера package.full

332

190

0 50 100 150 200 250 300 350

Версия 2.0

Версия 2.1

Размер package.full (кб)

Page 56: Использование API Яндекс.Карт

56

Дозагрузка компонентов

Page 57: Использование API Яндекс.Карт

57

Подключение API 2.1

Placemark

Clusterer Map

<script src="http://api-maps.yandex.ru/2.1-

dev/?load=Map,Placemark,Clusterer&lang=ru-RU"

type="text/javascript"></script>

Page 58: Использование API Яндекс.Карт

58

Интерфейс

асинхронных

операций

Page 59: Использование API Яндекс.Карт

59

Асинхронный интерфейс в 2.0

myMap.setBounds([[60,-40], [20,60]], {

checkZoomRange: true,

callback: function(err) {

if (err) {

// Не удалось показать заданный регион

// ...

}

}

});

Page 60: Использование API Яндекс.Карт

60

Асинхронный интерфейс в 2.0

var promise = ymaps.route([ 'Королев', 'Химки']);

promise.then(

function (route) {

map.geoObjects.add(route);

}

);

Page 61: Использование API Яндекс.Карт

61

Объект-обещание (Promise)

Source

Listener 1

Listener 2

Listener 3

Promise

Page 62: Использование API Яндекс.Карт

62

Интерфейс Promise

promise.fulfill(value); // resolve

promise.reject(error);

promise.then(

function onFulfill (value) { … },

function onReject(error) { … }

);

Page 63: Использование API Яндекс.Карт

63

Асинхронный интерфейс в 2.1

• Vow;

o https://github.com/dfilatov/vow

• Реализует Promises/A+;

o http://dom.spec.whatwg.org/#promises

Page 64: Использование API Яндекс.Карт

64

Основные особенности Vow

• Асинхронное получение значения;

• Deferred object.

Page 65: Использование API Яндекс.Карт

65

Асинхронное получение значения

var promise = load(..);

promise.then(

function (route) {

console.log('2');

}

);

console.log('1');

Page 66: Использование API Яндекс.Карт

66

Синхронный Promise в jQuery

function animate(duration) {

$('div').animate({opacite: 0}, duration).promise()

.then(function () {

console.log('2');

});

console.log('1');

}

animate(0); // 2 1

console.log('--');

animate(1); // 1 2

Пример http://bit.ly/1mUwrKi

Page 67: Использование API Яндекс.Карт

67

Объект-обещание (Promise)

Source

Listener 1

Listener 2

Listener 3

Promise

Page 68: Использование API Яндекс.Карт

68

Deferred Object

Source

Listener 1

Listener 2

Listener 3

Promise

Deferred

Object

Page 69: Использование API Яндекс.Карт

69

Методы Vow

Promise API • fulfill

• reject

• notify

• isFulfilled

• isRejected

• isResolved

• valueOf

• then

• fail

• always

• progress

• spread

• done

• delay

• timeout

• sync

Vow API • isPromise

• when

• fail

• always

• progress

• spread

• done

• isFulfilled

• isRejected

• isResolved

• fulfill

• reject

• resolve

• invoke

• all

• allResolved

• any

• delay

• timeout

Пример http://bit.ly/1jldyQ3

Page 70: Использование API Яндекс.Карт

70

Использование API

на мобильных

устройствах

Page 71: Использование API Яндекс.Карт

71

Маппинг событий

Touch Events

Pointer Events

mousedown

mouseup

mousemove

click

dbclick

touchstart

touchend

touchmove

pointerdown

pointerup

pointermove

Page 72: Использование API Яндекс.Карт

72

geoObject.events

.add(‘click’, callback);

map.events

.add(‘mouseenter’, callback);

Page 73: Использование API Яндекс.Карт

73

События multitouch*

Для обработки множественных

прикосновений

• multitouchstart

• multitouchmove

• multitouchend

Page 74: Использование API Яндекс.Карт

74

Мультитач поведение

Page 75: Использование API Яндекс.Карт

75

ymaps.domEvent.manager

.add(

htmlElement,

[‘click’, ‘mouseenter’],

callback

);

Пример http://bit.ly/1eq14lT

Page 76: Использование API Яндекс.Карт

76

ymaps.domEvent.manager

.add(

htmlElement,

'multitouchstart',

function (event) {

// ...

event.callMethod('preventDefault');

}

);

Page 77: Использование API Яндекс.Карт

77

Гибридные устройства

Page 78: Использование API Яндекс.Карт

78

Тайлы для устройств с повышенной плотностью

пикселей

devicePixelRatio = 1

devicePixelRatio = 2

Page 79: Использование API Яндекс.Карт

79

<meta name="viewport"

content="width=device-width" />

Page 80: Использование API Яндекс.Карт

80

Использование API в PhoneGap

• Нельзя создавать локальную копию API

Яндекс.Карт

• Нужно передавать HTTP заголовок Referer

вида

«http://идентификатор_приложения_в_сторе.y

mapapp»

Page 81: Использование API Яндекс.Карт

81

Page 82: Использование API Яндекс.Карт

82

Ссылки

Официальная группа в Facebook

https://www.facebook.com/ymapsapi

Официальная группа в ВК

http://vk.com/ymapsapi

Клуб разработчиков API Яндекс.Карт

http://clubs.ya.ru/mapsapi/

Документация версии 2.1

http://api.yandex.ru/maps/doc/jsapi/beta/ref/concepts/About.xml

Page 83: Использование API Яндекс.Карт

83

Спасибо за внимание!