SlideShare a Scribd company logo
1 of 29
JavaScript-библиотека. 
Возможности и примеры использования. 
01
О чем доклад? 
• Архитектура библиотеки 
• Основные функции и методы 
• Обзор расширений библиотеки 
– Ajax 
– Анимация 
– Работа с LocalStorage 
– Оконная библиотека 
– Форматирование даты 
• Демонстрация примеров 
02
Предыстория создания 
• 5 лет назад в Битриксе JS-кода было очень мало 
(админка, визуальный редактор, календарь) 
• Развитие Web потребовало более продвинутых интерфейсов. 
• Количество Javascript’а стало постоянно увеличиваться. 
Код был разрозненным и часто дублировался. 
• JS-библиотека объединила все старые наработки и 
упростила разработку новых модулей. 
• Сейчас в новых модулях Битрикса Javascript-кода больше 
чем PHP-кода 
03
Зачем свой велосипед? 
• Библиотека учитывает особенности Битрикса 
• Есть совместимость со старым кодом 
• Никаких проблем с поддержкой и расширением 
функциональности 
• JS-библиотека не накладывает никаких ограничений - 
используйте совместно свой любимый фреймворк. 
04
Архитектура 
• Все файлы библиотеки находятся в папке 
/bitrix/js/main/core/ 
• core.js – ядро библиотеки 
• Ядро определяет глобальный объект BX, который 
содержит статические методы для работы с событиями, 
DOM и др. 
• core_*.js – файлы расширений 
– core_ajax.js – работа с Ajax-запросами 
– core_date.js – форматирование даты 
05
Подключение в PHP 
• CUtil::InitJSCore([array $arExtensions]) 
Подключает ядро, стили и языковые сообщения библиотеки 
$arExtensions – массив требуемых расширений библиотеки 
• Пример: 
<? 
CUtil::InitJSCore(Array("ajax", "window")); 
?> 
06
Регистрация своих расширений 
<? 
CJSCore::RegisterExt("my_extension", Array( 
"js" => "/path/to/js/my_ext.js", 
"css" => "/path/to/css/my_ext.css", 
"lang" => "/path/to/lang/".LANGUAGE_ID. "/lang.php", 
"rel" => Array("ajax", "timer", "popup", "ls") 
)); 
?> 
07
Начало работы 
•BX.ready(function(){ 
//свой код 
}); 
•BX.ready() гарантирует, что DOM-дерево доступно для 
изменения 
08
Манипуляции с DOM-объектами 
• DOMNode BX.create(tag[, data[, context]]) 
Создает узел DOM-дерева с именем тега tag. 
Описательный объект data может иметь следующие поля: 
{ 
tag: имя тега узла, 
props: { дополнительные js-свойства}, 
style: { стили узла }, 
events: {обработчики событий узла}, 
children: [массив дочерних узлов], 
text: текстовое содержимое узла, 
html: HTML-содержимое узла 
} 
• DOMNode BX.adjust(DOMNode node, object data) 
Изменяет свойства узла node. 
09
Манипуляции с DOM-объектами 
• DOMNode BX.addClass(DOMNode node, string className) 
Добавляет узлу node CSS-класс className, если он такового не имеет. 
• DOMNode BX.removeClass(DOMNode node, string className) 
Удаляет CSS-класс className, у узла node. 
• DOMNode BX.toggleClass(DOMNode node, string|array className) 
Переключить наличие/отсутствие CSS-класса className у узла node или устроить 
ротацию CSS-классов, если className – массив. 
• bool BX.hasClass(DOMNode node, string className) 
Проверяет, есть ли уже у узла node CSS-класс className. 
010
Манипуляции с DOM-объектами 
• DOMNode BX. style(DOMNode node, string property[, string value]) 
Получить текущее значение стиля property узла node или установить его в 
значение value. 
• null BX.remove(DOMNode node) 
Удалить узел DOM-структуры. 
• DOMNode BX.cleanNode(DOMNode node[, bool bSuicide]) 
Очистить DOM-узел от всех дочерних элементов. Если второй параметр равен 
true, сам узел также будет удален. 
• BX.show(DOMNode node), BX.hide(DOMNode node) 
Показать/скрыть узел. 
011
Поиск элементов в DOM 
• Array BX.findChildren(DOMNode obj, Object params, bool recursive) 
DOMNode BX.findChild(DOMNode obj, Object params, bool recursive) 
Поиск потомков 
params : { 
tagName|tag: имя тега требуемого узла, 
className|class: CSS-класс, который должен содержать требуемый узел, 
attribute: {attribute: value, attribute: value} | attribute | [attribute, attribute], - 
атрибут или коллекция атрибутов, которые должны 
присутствовать в требуемом узле 
property: { prop: value, prop: value} | prop | [prop, prop] – 
свойство или коллекция свойств, которые должны 
присутствовать в требуемом узле 
callback: функция для произвольной фильтрации 
} 
012
Поиск элементов в DOM 
• DOMNode BX(String id) 
Поиск элемента по id 
• DOMNode BX.findParent(DOMNode obj, Object params) 
Поиск родителя 
• DOMNode BX.findNextSibling(DOMNode obj, Object params) 
DOMNode BX.findPreviousSibling(DOMNode obj, Object 
params) 
Поиск соседних элементов 
013
Работа с событиями 
• void BX.bind(DOMNode element, String event, Function handler) 
Установить функцию handler в качестве обработчика события event элемента element. 
Пример: BX.bind(BX("test"), "click", function() {alert(1); }) 
• void BX.unbind(DOMNode element, String event, Function handler) 
Снять обработчик handler события event элемента element. 
• void BX.unbindAll(DOMNode element) 
Снять все зарегистрированные обработчики событий с элемента element 
• BX.eventCancelBubble(Event event) 
Запретить всплывание события 
• BX.eventReturnFalse(Event event) 
Отменить действие по умолчанию 
014
Пользовательские событиями 
• BX.addCustomEvent(Object eventObject, string eventName, Function handler) 
Назначить обработчик eventHandler кастомному событию с именем 
eventName, возникающем в объекте eventObject. 
• BX.removeCustomEvent(Object eventObject, string eventName, Function handler) 
Удалить обработчик eventHandler кастомного события с именем 
eventName. 
• BX.onCustomEvent(Object eventObject, string eventName[, Array arEventParams]) 
Вызвать все обработчики события eventName для объекта eventObject и 
передать перевым параметром arEventParams. 
015
Размеры окна и координаты 
• object BX.pos(DOMNode node) 
Возвращает координаты и размеры узла, объект с ключами top, 
right, bottom, left, width, height. 
• object BX.GetWindowScrollSize([DOMDocument doc]) 
Возвращает размеры скролла, объект с ключами scrollWidth, 
scrollHeight 
• object BX.GetWindowScrollPos([DOMDocument doc]) 
Возвращает позицию скролла, объект с ключами scrollLeft, 
scrollTop 
• object BX.GetWindowInnerSize([DOMDocument doc]) 
Возвращает размер окна, объект с ключами innerWidth, 
innerHeight 
016
Утилиты 
• BX.util – php-аналоги 
– BX.util.array_merge() 
– BX.util.array_unique() 
– BX.util.in_array() 
– BX.util.trim() 
– BX.util.htmlspecialchars() 
– BX.util.urlencode() 
• BX.browser – проверка на браузер 
– BX.browser.isIE(), BX.browser.isOpera(), BX.browser.isSafari() 
• BX.type – проверка типа объекта 
– BX.type.isArray(), BX.type.isDate() и др. 
• Демонстрация 
017
Работа с LocalStorage (core_ls.js) 
• Поддерживается всеми современными браузерами, а также 
IE7+ 
• Применение 
– Синхронизация данных между окнами браузера 
– Кеширование данных на клиенте 
– Оптимизация ajax-запросов 
• Демонстрация 
018
Работа с LocalStorage (core_ls.js) 
• BX.localStorage.set(key, value, ttl) 
Устанавливает значение записи равным value с ключом key . ttl – 
время жизни в секундах. 
• BX.localStorage.get(key) 
Получить значение по ключу key 
• BX.localStorage.remove(key) 
Удалить запись с ключом key 
• События 
– onLocalStorageSet – установка значения в LS 
– onLocalStorageRemove – удаление записи в LS 
– onLocalStorageChange – изменение значение в LS 
019
Ajax-расширение core_ajax.js 
• XMLHttpRequest BX.ajax(object params) 
Низкоуровневая функция для отправки ajax-запросов. 
params: 
{ 
url: URL запроса 
method: GET|POST 
dataType: html|json|script – данные какого типа предполагаются в ответе 
timeout: 60 – таймаут запроса в секундах 
async: true|false – должен ли запрос быть асинхронным или нет 
processData: true|false – нужно ли сразу обрабатывать данные? 
scriptsRunFirst: false|true – нужно ли выполнять все найденные скрипты 
перед тем, как отдавать содержимое обработчику 
start: true|false – отправить ли запрос сразу или он будет запущен 
вручную 
onsuccess: функция-обработчик результата 
onfailure: функция-обработчик ошибки 
} 020
Ajax-расширение core_ajax.js 
• XHRequest BX.ajax.get(string url, function callback) 
Отправка GET-запроса и передача результата обработчику callback. 
• XHRequest BX.ajax.post(string url, string|object data, function callback) 
Отправка POST-запроса и передача результата обработчику callback. Параметр 
data – это строка или ассоциативный массив POST-данных запроса. 
• XHRequest BX.ajax.insertToNode(string url, string|DOMNode node) 
Запросить url и вставить результат в контейнер node. Если node – строка, то 
параметр будет интерпретирован как идентификатор контейнера. 
• XMLHttpRequest BX.ajax.loadJSON(string url, function callback) 
Загрузить json-объект из заданного url и передать его обработчику callback 
021
Пользовательские настройки 
• BX. userOptions.save(sCategory, sName, sValName, sVal, bCommon) 
Cохранение значения пользовательской настройки. 
• BX.userOptions.del (sCategory, sName, bCommon, callback) – 
Удаление значения пользовательской настройки. 
022
Анимация 
Class BX.fx(Object options) 
options: { 
start: стартовое значение и набор значений 
finish: конечно значение и набор значений 
time: время, в течение которого должна производиться анимация 
type: linear|accelerated|decelerated – закон изменения параметров 
callback : обработчик значения параметра 
callback_start : обработчик начала анимации 
callback_complete : обработчик завершения анимации 
step: длительность промежутка анимации 
} 
BX.fx.prototype.start() – начать анимацию 
BX.fx.prototype.pause() – затормозить/запустить снова анимацию 
BX.fx.prototype.stop() – закончить анимацию 
Объект класса BX.fx вызывает обработчик callback через определенные промежутки 
времени, задаваемые параметром step, в течение периода time. 
023
Оконная библиотека (core_popup.js) 
024
Оконная библиотека 
(core_window.js) 
025
Оконная библиотека 
• Class BX.PopupWindow(id, bindElement, options) 
• Сlass BX.CDialog(params) 
• Сlass BX.CAdminDialog(params) 
• Демонстрация 
026
Форматирование даты (core_date.js) 
• BX.date.format(format, [date[, currentDate[, isUtc]]]) 
format – полный аналог формата php-функции date, за исключением 
формата "T" и "e" (символьное название таймзоны). 
date – дата в формате timestamp или объект класс Date. 
currentDate – текущая дата (timestamp|Date). 
isUTC – дата в UTC? Если необходимо работать с датами в UTC. 
• BX.date.format("d-m-Y H:i:s") // 24-01-2012 18:22:12 
BX.date.format("j F Y H:i:s") // 24 Января 2012 18:22:32 
BX.date.format("iago", new Date(2012, 0, 23)) // 2545 минут назад 
027
Документация будет! 
028
Заключение 
• JS-библиотека не накладывает никаких ограничений - 
используйте совместно свой любимый фреймворк. 
• jQuery включена в продукт для удобства разработки 
дополнений из MarketPlace. 
• <? 
CUtil::InitJSCore(Array("jquery")); 
?> 
029

More Related Content

What's hot

Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Глеб Тарасов
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
Ontico
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Ontico
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest
 
Java tricks for high-load server programming
Java tricks for high-load server programmingJava tricks for high-load server programming
Java tricks for high-load server programming
Andrei Pangin
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Глеб Тарасов
 

What's hot (20)

Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
NFX
NFXNFX
NFX
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvo
 
хранение данных
хранение данныххранение данных
хранение данных
 
Хватит писать инфраструктурный код
Хватит писать инфраструктурный кодХватит писать инфраструктурный код
Хватит писать инфраструктурный код
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
 
Javascript
JavascriptJavascript
Javascript
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Java tricks for high-load server programming
Java tricks for high-load server programmingJava tricks for high-load server programming
Java tricks for high-load server programming
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Next Gen Applications
Next Gen ApplicationsNext Gen Applications
Next Gen Applications
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 

Viewers also liked

Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поиска
Mikhail Kurnosov
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)
Mikhail Kurnosov
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Mikhail Kurnosov
 
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Mikhail Kurnosov
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
Mikhail Kurnosov
 
Лекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поискаЛекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поиска
Mikhail Kurnosov
 

Viewers also liked (11)

Формальные основы иерархической записи графов
Формальные основы иерархической записи графовФормальные основы иерархической записи графов
Формальные основы иерархической записи графов
 
Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поиска
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
 
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
Лекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поискаЛекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поиска
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 

Similar to JavaScript-библиотека

Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Andrey Listochkin
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7
Technopark
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
CodeCamp
 
Frontendlab: Фреймворк Duranda js - Виктор Сотов
Frontendlab: Фреймворк Duranda js  - Виктор СотовFrontendlab: Фреймворк Duranda js  - Виктор Сотов
Frontendlab: Фреймворк Duranda js - Виктор Сотов
GeeksLab Odessa
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3
Technopark
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7
Technopark
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
DrupalCamp Kyiv Рысь
 

Similar to JavaScript-библиотека (20)

Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
Templates kachalova 2014_new
Templates kachalova 2014_newTemplates kachalova 2014_new
Templates kachalova 2014_new
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Vba 07
Vba 07Vba 07
Vba 07
 
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
Frontendlab: Фреймворк Duranda js - Виктор Сотов
Frontendlab: Фреймворк Duranda js  - Виктор СотовFrontendlab: Фреймворк Duranda js  - Виктор Сотов
Frontendlab: Фреймворк Duranda js - Виктор Сотов
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 

More from Vasya Petrov

More from Vasya Petrov (20)

О школе
О школеО школе
О школе
 
Настройка Apache и PHP
Настройка Apache и PHPНастройка Apache и PHP
Настройка Apache и PHP
 
Создание сайта на PHP
Создание сайта на PHPСоздание сайта на PHP
Создание сайта на PHP
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHP
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHP
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Оптимизация CSS
Оптимизация CSSОптимизация CSS
Оптимизация CSS
 
633942
633942633942
633942
 
Основные теги HTML
Основные теги HTMLОсновные теги HTML
Основные теги HTML
 
Работа с текстом в HTML
Работа с текстом в HTMLРабота с текстом в HTML
Работа с текстом в HTML
 
Rabota s massivami_v_php
Rabota s massivami_v_phpRabota s massivami_v_php
Rabota s massivami_v_php
 
Rabota so strokami_v_php
Rabota so strokami_v_phpRabota so strokami_v_php
Rabota so strokami_v_php
 
Внедрение CSS в HTML документ
Внедрение CSS в HTML документВнедрение CSS в HTML документ
Внедрение CSS в HTML документ
 
Tables frames
Tables framesTables frames
Tables frames
 
CSS Язык описания представлений
CSS Язык описания представленийCSS Язык описания представлений
CSS Язык описания представлений
 
массивы Php
массивы Phpмассивы Php
массивы Php
 
Таблицы Html
Таблицы HtmlТаблицы Html
Таблицы Html
 
еще JavaScript
еще JavaScriptеще JavaScript
еще JavaScript
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Html списки
Html спискиHtml списки
Html списки
 

JavaScript-библиотека

  • 1. JavaScript-библиотека. Возможности и примеры использования. 01
  • 2. О чем доклад? • Архитектура библиотеки • Основные функции и методы • Обзор расширений библиотеки – Ajax – Анимация – Работа с LocalStorage – Оконная библиотека – Форматирование даты • Демонстрация примеров 02
  • 3. Предыстория создания • 5 лет назад в Битриксе JS-кода было очень мало (админка, визуальный редактор, календарь) • Развитие Web потребовало более продвинутых интерфейсов. • Количество Javascript’а стало постоянно увеличиваться. Код был разрозненным и часто дублировался. • JS-библиотека объединила все старые наработки и упростила разработку новых модулей. • Сейчас в новых модулях Битрикса Javascript-кода больше чем PHP-кода 03
  • 4. Зачем свой велосипед? • Библиотека учитывает особенности Битрикса • Есть совместимость со старым кодом • Никаких проблем с поддержкой и расширением функциональности • JS-библиотека не накладывает никаких ограничений - используйте совместно свой любимый фреймворк. 04
  • 5. Архитектура • Все файлы библиотеки находятся в папке /bitrix/js/main/core/ • core.js – ядро библиотеки • Ядро определяет глобальный объект BX, который содержит статические методы для работы с событиями, DOM и др. • core_*.js – файлы расширений – core_ajax.js – работа с Ajax-запросами – core_date.js – форматирование даты 05
  • 6. Подключение в PHP • CUtil::InitJSCore([array $arExtensions]) Подключает ядро, стили и языковые сообщения библиотеки $arExtensions – массив требуемых расширений библиотеки • Пример: <? CUtil::InitJSCore(Array("ajax", "window")); ?> 06
  • 7. Регистрация своих расширений <? CJSCore::RegisterExt("my_extension", Array( "js" => "/path/to/js/my_ext.js", "css" => "/path/to/css/my_ext.css", "lang" => "/path/to/lang/".LANGUAGE_ID. "/lang.php", "rel" => Array("ajax", "timer", "popup", "ls") )); ?> 07
  • 8. Начало работы •BX.ready(function(){ //свой код }); •BX.ready() гарантирует, что DOM-дерево доступно для изменения 08
  • 9. Манипуляции с DOM-объектами • DOMNode BX.create(tag[, data[, context]]) Создает узел DOM-дерева с именем тега tag. Описательный объект data может иметь следующие поля: { tag: имя тега узла, props: { дополнительные js-свойства}, style: { стили узла }, events: {обработчики событий узла}, children: [массив дочерних узлов], text: текстовое содержимое узла, html: HTML-содержимое узла } • DOMNode BX.adjust(DOMNode node, object data) Изменяет свойства узла node. 09
  • 10. Манипуляции с DOM-объектами • DOMNode BX.addClass(DOMNode node, string className) Добавляет узлу node CSS-класс className, если он такового не имеет. • DOMNode BX.removeClass(DOMNode node, string className) Удаляет CSS-класс className, у узла node. • DOMNode BX.toggleClass(DOMNode node, string|array className) Переключить наличие/отсутствие CSS-класса className у узла node или устроить ротацию CSS-классов, если className – массив. • bool BX.hasClass(DOMNode node, string className) Проверяет, есть ли уже у узла node CSS-класс className. 010
  • 11. Манипуляции с DOM-объектами • DOMNode BX. style(DOMNode node, string property[, string value]) Получить текущее значение стиля property узла node или установить его в значение value. • null BX.remove(DOMNode node) Удалить узел DOM-структуры. • DOMNode BX.cleanNode(DOMNode node[, bool bSuicide]) Очистить DOM-узел от всех дочерних элементов. Если второй параметр равен true, сам узел также будет удален. • BX.show(DOMNode node), BX.hide(DOMNode node) Показать/скрыть узел. 011
  • 12. Поиск элементов в DOM • Array BX.findChildren(DOMNode obj, Object params, bool recursive) DOMNode BX.findChild(DOMNode obj, Object params, bool recursive) Поиск потомков params : { tagName|tag: имя тега требуемого узла, className|class: CSS-класс, который должен содержать требуемый узел, attribute: {attribute: value, attribute: value} | attribute | [attribute, attribute], - атрибут или коллекция атрибутов, которые должны присутствовать в требуемом узле property: { prop: value, prop: value} | prop | [prop, prop] – свойство или коллекция свойств, которые должны присутствовать в требуемом узле callback: функция для произвольной фильтрации } 012
  • 13. Поиск элементов в DOM • DOMNode BX(String id) Поиск элемента по id • DOMNode BX.findParent(DOMNode obj, Object params) Поиск родителя • DOMNode BX.findNextSibling(DOMNode obj, Object params) DOMNode BX.findPreviousSibling(DOMNode obj, Object params) Поиск соседних элементов 013
  • 14. Работа с событиями • void BX.bind(DOMNode element, String event, Function handler) Установить функцию handler в качестве обработчика события event элемента element. Пример: BX.bind(BX("test"), "click", function() {alert(1); }) • void BX.unbind(DOMNode element, String event, Function handler) Снять обработчик handler события event элемента element. • void BX.unbindAll(DOMNode element) Снять все зарегистрированные обработчики событий с элемента element • BX.eventCancelBubble(Event event) Запретить всплывание события • BX.eventReturnFalse(Event event) Отменить действие по умолчанию 014
  • 15. Пользовательские событиями • BX.addCustomEvent(Object eventObject, string eventName, Function handler) Назначить обработчик eventHandler кастомному событию с именем eventName, возникающем в объекте eventObject. • BX.removeCustomEvent(Object eventObject, string eventName, Function handler) Удалить обработчик eventHandler кастомного события с именем eventName. • BX.onCustomEvent(Object eventObject, string eventName[, Array arEventParams]) Вызвать все обработчики события eventName для объекта eventObject и передать перевым параметром arEventParams. 015
  • 16. Размеры окна и координаты • object BX.pos(DOMNode node) Возвращает координаты и размеры узла, объект с ключами top, right, bottom, left, width, height. • object BX.GetWindowScrollSize([DOMDocument doc]) Возвращает размеры скролла, объект с ключами scrollWidth, scrollHeight • object BX.GetWindowScrollPos([DOMDocument doc]) Возвращает позицию скролла, объект с ключами scrollLeft, scrollTop • object BX.GetWindowInnerSize([DOMDocument doc]) Возвращает размер окна, объект с ключами innerWidth, innerHeight 016
  • 17. Утилиты • BX.util – php-аналоги – BX.util.array_merge() – BX.util.array_unique() – BX.util.in_array() – BX.util.trim() – BX.util.htmlspecialchars() – BX.util.urlencode() • BX.browser – проверка на браузер – BX.browser.isIE(), BX.browser.isOpera(), BX.browser.isSafari() • BX.type – проверка типа объекта – BX.type.isArray(), BX.type.isDate() и др. • Демонстрация 017
  • 18. Работа с LocalStorage (core_ls.js) • Поддерживается всеми современными браузерами, а также IE7+ • Применение – Синхронизация данных между окнами браузера – Кеширование данных на клиенте – Оптимизация ajax-запросов • Демонстрация 018
  • 19. Работа с LocalStorage (core_ls.js) • BX.localStorage.set(key, value, ttl) Устанавливает значение записи равным value с ключом key . ttl – время жизни в секундах. • BX.localStorage.get(key) Получить значение по ключу key • BX.localStorage.remove(key) Удалить запись с ключом key • События – onLocalStorageSet – установка значения в LS – onLocalStorageRemove – удаление записи в LS – onLocalStorageChange – изменение значение в LS 019
  • 20. Ajax-расширение core_ajax.js • XMLHttpRequest BX.ajax(object params) Низкоуровневая функция для отправки ajax-запросов. params: { url: URL запроса method: GET|POST dataType: html|json|script – данные какого типа предполагаются в ответе timeout: 60 – таймаут запроса в секундах async: true|false – должен ли запрос быть асинхронным или нет processData: true|false – нужно ли сразу обрабатывать данные? scriptsRunFirst: false|true – нужно ли выполнять все найденные скрипты перед тем, как отдавать содержимое обработчику start: true|false – отправить ли запрос сразу или он будет запущен вручную onsuccess: функция-обработчик результата onfailure: функция-обработчик ошибки } 020
  • 21. Ajax-расширение core_ajax.js • XHRequest BX.ajax.get(string url, function callback) Отправка GET-запроса и передача результата обработчику callback. • XHRequest BX.ajax.post(string url, string|object data, function callback) Отправка POST-запроса и передача результата обработчику callback. Параметр data – это строка или ассоциативный массив POST-данных запроса. • XHRequest BX.ajax.insertToNode(string url, string|DOMNode node) Запросить url и вставить результат в контейнер node. Если node – строка, то параметр будет интерпретирован как идентификатор контейнера. • XMLHttpRequest BX.ajax.loadJSON(string url, function callback) Загрузить json-объект из заданного url и передать его обработчику callback 021
  • 22. Пользовательские настройки • BX. userOptions.save(sCategory, sName, sValName, sVal, bCommon) Cохранение значения пользовательской настройки. • BX.userOptions.del (sCategory, sName, bCommon, callback) – Удаление значения пользовательской настройки. 022
  • 23. Анимация Class BX.fx(Object options) options: { start: стартовое значение и набор значений finish: конечно значение и набор значений time: время, в течение которого должна производиться анимация type: linear|accelerated|decelerated – закон изменения параметров callback : обработчик значения параметра callback_start : обработчик начала анимации callback_complete : обработчик завершения анимации step: длительность промежутка анимации } BX.fx.prototype.start() – начать анимацию BX.fx.prototype.pause() – затормозить/запустить снова анимацию BX.fx.prototype.stop() – закончить анимацию Объект класса BX.fx вызывает обработчик callback через определенные промежутки времени, задаваемые параметром step, в течение периода time. 023
  • 26. Оконная библиотека • Class BX.PopupWindow(id, bindElement, options) • Сlass BX.CDialog(params) • Сlass BX.CAdminDialog(params) • Демонстрация 026
  • 27. Форматирование даты (core_date.js) • BX.date.format(format, [date[, currentDate[, isUtc]]]) format – полный аналог формата php-функции date, за исключением формата "T" и "e" (символьное название таймзоны). date – дата в формате timestamp или объект класс Date. currentDate – текущая дата (timestamp|Date). isUTC – дата в UTC? Если необходимо работать с датами в UTC. • BX.date.format("d-m-Y H:i:s") // 24-01-2012 18:22:12 BX.date.format("j F Y H:i:s") // 24 Января 2012 18:22:32 BX.date.format("iago", new Date(2012, 0, 23)) // 2545 минут назад 027
  • 29. Заключение • JS-библиотека не накладывает никаких ограничений - используйте совместно свой любимый фреймворк. • jQuery включена в продукт для удобства разработки дополнений из MarketPlace. • <? CUtil::InitJSCore(Array("jquery")); ?> 029