38
Произвольная смена дизайна системного скроллбара Кузнецов Дмитрий, разработчик интерфейсов, 2GIS Online

«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

  • Upload
    2-

  • View
    530

  • Download
    0

Embed Size (px)

DESCRIPTION

Как создать scrollbar со свойствами как у системного, но с оригинальный дизайном.

Citation preview

Page 1: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Произвольная смена дизайнасистемного скроллбара

Кузнецов Дмитрий, разработчик интерфейсов, 2GIS Online

Page 2: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Структура доклада1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

2

Page 3: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Зачем кастомизировать скроллбар?• Видение дизайнера

• Стратегическая возможность

• Одностраничные приложения

3

Page 4: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

4

Page 5: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

5

Page 6: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

6

Page 7: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

7

Page 8: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

CSS• Только webkit

• Ограничения по расположению скроллбара

• Непростой синтаксис

::-webkit-scrollbar-button:horizontal:decrement:hover {

}

01.

02.

8

Page 9: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

ECMAScript: эмуляция скролла• 40+ готовых решений

• Поддержка всех браузеров

• Подмена механизма скролла

• Трата ресурсов на эмуляцию

9

Page 10: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

ECMAScript: только замена скроллбара• 3 готовых решения

• Большой размер + проблемы с производительностью

• Модификация DOM и манипуляция стилями

• Ограничения по положению скроллбара

10

Page 11: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

11

Page 12: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Расчитываем ширину нативногоскроллбара

DHTML: offsetWidth

Δ = offsetWidth - clientWidth

12

Page 13: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Прячем нативный рисуем свой

13

Page 14: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Максимально свободная кастомизация<div class="clipper">

<div class="scroller">

Content

</div>

</div>

01.

02.

03.

04.

05.

14

Page 15: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Минимальное вмешательство в DOM• Атрибуты data-*

• Самые необходимые инлайн-стили

• Максимизация управления UI через CSS

15

Page 16: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Максимальное использование CSS• Барон знает о:

DOM-элементах; CSS-классах; событиях; координатах

• Барон ничего не знает о:

opacity; linear-gradient; box-shadow; position

...и других свойствах CSS

16

Page 17: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Оптимизация кодаwidth = scroller.offsetWidth

height = scroller.offsetHeight

offset = ['offsetWidth', 'offsetHeight']

size = scroller[offset[direction]]

01.

02.

03.

04.

17

Page 18: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Независимость$: function(selector, context) {

return bonzo(qwery(selector, context));

},

event: function(elem, event, func, mode) {

if (mode == 'trigger') mode = 'fire';

bean[mode || 'on'](elem, event, func);

}

01.

02.

03.

04.

05.

06.

07.

18

Page 19: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Расширяемость плагинами$('.clipper').

baron().fix().pull().controls().test().

dispose();

01.

02.

03.

19

Page 20: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

20

Page 21: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Плагин fix

scroller: '.scroller',

bar: '.scroller__bar',

barOnCls: 'baron'

elements: '.header__title',

outside: 'header__title_state_fixed',

before: 'header__title_position_top',

after: 'header__title_position_bottom'

});

.header__title_state_fixed {

position: absolute;

z-index: 1;

}

The title was quite common

in most European countries

often in a slightly modified

form. In Italian, the word

used was Barone. The

corresponding title in the

Holy Roman Empire was

Freiherr.

21

html Sticky footer

$('.clipper_fix').baron({

}).fix({

CSS

Page 22: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Плагин controls

scroller: '.scroller',

bar: '.scroller__bar',

barOnCls: 'baron'

elements: '.header__title',

outside: 'header__title_state_fixed',

before: 'header__title_position_top',

after: 'header__title_position_bottom'

track: '.scroller__track',

forward: '.scroller__up',

backward: '.scroller__down'

});

22

CSS

html

$('.clipper_fix').baron({

}).fix({

}).controls({

Page 23: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Плагин test

scroller: '.scroller',

bar: '.scroller__bar',

barOnCls: 'baron'

elements: '.header__title',

outside: 'header__title_state_fixed',

before: 'header__title_position_top',

after: 'header__title_position_bottom'

track: '.scroller__track',

forward: '.scroller__up',

backward: '.scroller__down'

23

$('.clipper_fix').baron({

}).fix({

}).controls({

}).test()

Page 24: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Плагин pull

scroller: '.scroller',

bar: '.scroller__bar',

barOnCls: 'baron'

elements: '.header__title',

outside: 'header__title_state_fixed',

before: 'header__title_position_top',

after: 'header__title_position_bottom'

track: '.scroller__track',

forward: '.scroller__up',

backward: '.scroller__down'

24

}).test()

}).pull({

$('.clipper_fix').baron({

}).fix({

}).controls({

Page 25: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

25

Page 26: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Baron vs jScrollPane

Baron is a title of nobility. In the

kingdom of England, the medieval Latin

word baro, baronis was used originally

to denote a tenant-in-chief of the early

Norman kings who held his lands by the

feudal tenure of "barony" (in Latin per

baroniam), and who was entitled to

attend the Great Council which by the

13th century had developed into the

Parliament of England.

The title was quite common in most

European countries often in a slightly

modified form. In Italian, the word used

was Barone. The corresponding title in

the Holy Roman Empire was Freiherr.

The word baron comes from the Old French

baron, from a Late Latin baro "man;

servant, soldier, mercenary" (so used in

Baron is a title of nobility. In the

kingdom of England, the medieval

Latin word baro, baronis was used

originally to denote a tenant-in-

chief of the early Norman kings who

held his lands by the feudal tenure

of "barony" (in Latin per baroniam),

and who was entitled to attend the

Great Council which by the 13th

century had developed into the

Parliament of England.

The title was quite common in most

European countries often in a

slightly modified form. In Italian,

the word used was Barone. The

corresponding title in the Holy Roman

Empire was Freiherr.

The word baron comes from the Old

26

Baron

Etymology

Baron

Etymology

Page 27: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

На самом деле нет

27

Page 28: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Что можно сравнитьBaron jScrollPane

Общий размер (gzip, kB) 2.11 + 4.47 4.52 + 30.1

DOM 0 +9

Расположение скроллбара Свободное Фиксированное

Механизм Нативный Эмуляция

Поддержка overflow: scroll все браузеры

Быстрый старт Сложнее Просто

28

Page 29: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

1. Зачем кастомизировать скроллбар?

2. Способы кастомизации

3. Барон: идея и принципы построения

4. Плагины барона

5. Сравнение барона с альтернативой

6. Туториал по использованию

29

Page 30: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

HTML<div class="clipper">

<div class="scroller">

Content

</div>

</div>

<div class="scroller__bar"></div>

01.

02.

03.

04.

05.

06.

30

Page 31: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

CSS.clipper {

overflow: hidden;

position: relative;

}

.scroller {

overflow-y: scroll;

}

.scroller::-webkit-scrollbar {

width: 0;

}

.scroller__bar {

position: absolute;

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

31

Page 32: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Код$('.profit').baron({

scroller: '.scroller',

bar: $('.profit .scroller__bar'),

barOnCls: 'baron'

});

01.

02.

03.

04.

05.

32

Page 33: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Profit

Baron is a title of nobility. In the kingdom of England, the

medieval Latin word baro, baronis was used originally to denote a

tenant-in-chief of the early Norman kings who held his lands by the

feudal tenure of "barony" (in Latin per baroniam), and who was

entitled to attend the Great Council which by the 13th century had

developed into the Parliament of England.

The title was quite common in most European countries often in a

slightly modified form. In Italian, the word used was Barone. The

corresponding title in the Holy Roman Empire was Freiherr.

The word baron comes from the Old French baron, from a Late Latin

baro "man; servant, soldier, mercenary" (so used in Salic Law;

Alemannic Law has barus in the same sense). Isidore in the 7th

century thought the word was from Greek βαρύς "heavy" (because ofthe "heavy work" done by mercenaries), but the word is presumably of

Old Frankish origin, cognate with Old English beorn meaning

"warrior, nobleman"). Cornutus in the first century already reports

a word barones which he took to be of Gaulish origin. He glosses it

as meaning servos militum and explains it as meaning "stupid", by

33

Baron

Etymology

Page 34: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Итого• Свободная CSS-кастомизация скроллбара

• Автоматическая поддержка всего где есть overflow: scroll

• Fallback - нативный скроллбар

• Размер с зависимостями: от 6 кБ в gzip

• Система плагинов + 4 плагина в коробке

34

Page 35: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Работает на API 2GISЛицензионное соглашение

Видимые на карте рейтинг Открыто

Учителей, 6Пив & Ко, сеть магазинов разливного пива

34 филиала

8 отзывов

Серафимы Дерябиной, 43аЖивое Разливное, магазин разливного пива

1 отзыв

Луначарского, 81Пивная лавка, сеть магазинов

10 филиалов

3 отзыва

Ляпустина, 8Beerlife, сеть магазинов живого пива

6 филиалов

3 отзыва

Пальмиро Тольятти, 19Пивная коллекция, магазин разливного пива

2 филиала

4 отзыва

Сыромолотова, 16BeerHall, сеть магазинов разливного пива

15 филиалов

Организации 506 Расширенный поиск

Справочник Проезд

пиво

35

Page 36: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

В планах• Плагин для мега-быстрого старта

• Плагин для ликвидации зависимостей

• Ваши идеи?

• Автоматическое тестирование

36

Page 37: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

Автотесты (Phantom JS)

37

• Прогон всех тестов при коммите

• Отнимает 3-5 секунд + 5 минут просмотра тестов в реальных

браузерах

• Невозможно просмотреть или забыть тест

Page 38: «Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов

About

Кузнецов Дмитрий, разработчик интерфейсов 2GIS Online

[email protected]

github.com/Diokuz/baron

habrahabr.ru/company/2gis

38