SlideShare a Scribd company logo
1 of 34
Download to read offline
Темы лекции: Работа с cookie и графикой.
Практическое задание: Работа с cookie и графикой.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 7
http://www.slideshare.net/IgorShkulipa 2
Cookies
Cookie - это небольшая порция текстовой информации, которую сервер
передает браузеру. Браузер будет хранить эту информацию и
передавать ее серверу с каждым запросом как часть HTTP заголовка.
Одни значения cookie могут храниться только в течение одной сессии,
они удаляются после закрытия браузера. Другие, установленные на
некоторый период времени, записываются в файл.
Сами по себе cookies не могут делать ничего, это только лишь некоторая
текстовая информация. Однако сервер может считывать
содержащуюся в cookies информацию и на основании ее анализа
совершать те или иные действия.
Например, в случае авторизованного доступа к чему либо через WWW в
cookies сохраняется login и password в течение сессии, что позволяет
пользователю не вводить их снова при запросах каждого документа,
защищенного паролем.
На использовании cookies также часто строят функции оформления
заказов в онлайновых магазинах и т.д.
http://www.slideshare.net/IgorShkulipa 3
document.cookie
Для чтения и записи cookie используется свойство document.cookie.
Однако, оно представляет собой не объект, а строку в специальном
формате, для удобной манипуляций с которой нужны дополнительные
функции.
Эта строка состоит из пар ключ=значение, которые перечисляются
через точку с запятой с пробелом “; “.
Значит, чтобы прочитать cookie, достаточно разбить строку по ; , и
затем найти нужный ключ. Это можно делать либо через split и работу
с массивом, либо через регулярное выражение.
http://www.slideshare.net/IgorShkulipa 4
Запись в document.cookie
В document.cookie можно писать. При этом запись не перезаписывает
существующие cookie, а дополняет к ним.
У cookie также есть ряд важных настроек, которые желательно указать, так как
значения по умолчанию у них неудобны.
Эти настройки указываются после пары ключ=значение, каждое — после точки с
запятой:
• path=/ - путь, внутри которого будет доступ к cookie. Если не указать, то
имеется в виду текущий путь и все пути ниже него. Как правило,
используется path=/, то есть cookie доступно со всех страниц сайта.
• domain=site.com - домен, на котором доступно cookie. Если не указать, то
текущий домен. Допустимо указывать текущий домен site.com и его
поддомены, например forum.site.com.
• expires=Tue, 19 Jan 2038 03:14:07 GMT - дата истечения куки в формате
GMT. Получить нужную дату можно, используя объект Date. Его можно
установить в любое время, а потом вызвать toUTCString(). Если дату не
указать, то cookie будет считаться «сессионным». Такое cookie удаляется
при закрытии браузера. Если дата в прошлом, то cookie будет удален.
• secure - cookie можно передавать только по HTTPS.
http://www.slideshare.net/IgorShkulipa 5
Полезные функции для работы с cookie
В JavaScript нет способа просто работать с cookie без дополнительных
функций.
Поэтому следующие функции или их аналоги просто необходимы:
• function getCookie(name)
• function setCookie(name, value, expdays)
• function deleteCookie(name)
http://www.slideshare.net/IgorShkulipa 6
function getCookie
// возвращает cookie
function getCookie(name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^s+|s+$/g, "");
if (x == name) {
return unescape(y);
}
}
}
http://www.slideshare.net/IgorShkulipa 7
function setCookie
// уcтанавливает cookie
function setCookie(name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" :
"; expires=" + exdate.toUTCString());
document.cookie = name + "=" + c_value;
}
http://www.slideshare.net/IgorShkulipa 8
function deleteCookie
// удаляет cookie
function deleteCookie(name) {
setCookie(name, null, -1);
}
http://www.slideshare.net/IgorShkulipa 9
Аргументы функций
• name - название cookie
• value - значение cookie (строка)
• expires - количество дней до истечения cookie.
http://www.slideshare.net/IgorShkulipa 10
Сторонние cookie
При работе с cookie есть важная тонкость, которая касается внешних
ресурсов.
Теоретически, любой ресурс, который загружает браузер, может
поставить cookie.
Cookie, которые не принадлежат основной странице, называются
«сторонними» (3rd party) cookies. Не все браузеры их разрешают.
Как правило, в настройках браузера можно поставить «Блокировать
данные и файлы cookie сторонних сайтов».
Цель этого запрета — защитить посетителей от слежки со стороны
рекламодателей, которые вместе с картинкой-баннером присылают и
куки, таким образом помечая посетителей.
http://www.slideshare.net/IgorShkulipa 11
Ограничения cookie
На Cookie наложены ограничения:
• Имя и значение вместе не должны превышать 4кб.
• Общее количество cookie на домен ограничено 30-50, в
зависимости от браузера.
• Разные домены 2го уровня полностью изолированы. Но в пределах
доменов 3го уровня куки можно ставить свободно с указанием
domain.
• Сервер может поставить cookie с дополнительным флагом
HttpOnly. Cookie с таким параметром передаётся только в
заголовках, оно никак не доступно из JavaScript.
Иногда посетители отключают cookie. Отловить это можно проверкой
свойства navigator.cookieEnabled
http://www.slideshare.net/IgorShkulipa 12
Альтернативы cookie
• sessionStorage
• globalStorage
• userData
• Client-side Database
• Local SharedObject
http://www.slideshare.net/IgorShkulipa 13
sessionStorage
Этот метод поддерживается Firefox начиная со второй версии. Это
глобальный обьект, который хранится в текущей сессии документа и
хранится пока документ открыт, перегружается или
восстанавливается, но открытие нового окна или вкладки с тем же
адресом породит новую сессию.
Пример:
sessionStorage.text = «Hello, World!»;
alert(sessionStorage.text);
Недостатком такого подхода является то что он не может
распространяться на другие страницы либо окна, а работает
только в пределе своей сессии.
http://www.slideshare.net/IgorShkulipa 14
globalStorage
В связи с тем что HTML5 пока еще развивается, в Firefox присутствует
глобальный объект globalStorage, который позволяет хранить
данные в браузере в течении долгого промежутка времени не
привязываясь к сессии, что позволяет пользоваться и манипулировать
сохраненными данными при открытия нового окна, вкладки,
закрытия/открытия браузера. Привязка хранилища такого рода
осуществляется по домену.
Пример:
// Инициализируем хранилище
storage = globalStorage[“somedomain.com”];
// Записываем значение
storage[“hello”] = “Hello, World!”;
// Выводим значение
alert(storage[“hello”]);
// При необходимости удаляем
delete storage[“hello”];
Такой подход дает возможность сохранить до 5 мегабайт информации на
клиенте в определенном домене, и использовать хранилище в
пределах домена и его субдоменов.
http://www.slideshare.net/IgorShkulipa 15
Client-side Database
Разработчики WebKit (Safari) вплотную приблизились к рекомендациям
HTML5 и дали возможность создавать на клиенте базу данных.
http://www.slideshare.net/IgorShkulipa 16
Работа с графикой
Тег canvas - это элемент HTML 5, который предназначен для создания
растрового изображения при помощи JavaScript.
<canvas height=‘250' width=‘250' id='example'></canvas>
http://www.slideshare.net/IgorShkulipa 17
Элементы работы с canvas
• Прямоугольники. Самой элементарной фигурой которую можно рисовать
является прямоугольник. Предусмотрено три функции для отрисовки
прямоугольников.
• strokeRect(x, y, ширина, высота) - рисует прямоугольник
• fillRect(x, y, ширина, высота) - рисует закрашенный прямоугольник
• clearRect(x, y, ширина, высота) - очищает область размером с
прямоугольник заданного размера
• Линии и дуги. Рисование фигур составленных из линий выполняется
последовательно в несколько шагов: beginPath(); closePath(); stroke();
fill();
• beginPath используется что бы начать серию действий описывающих
отрисовку фигуры. Каждый новый вызов этого метода сбрасывает все
действия предыдущего и начинает рисовать заново.
• closePath является не обязательным действием и по сути оно пытается
завершить рисование проведя линию от текущей позиции к позиции с
которой начали рисовать.
• Завершающий шаг это вызовом метода stroke или fill. Первый обводит
фигуру линиями, а второй заливает фигуру сплошным цветом.
http://www.slideshare.net/IgorShkulipa 18
Элементы работы с canvas
• Кривые Бернштейна-Безье
quadraticCurveTo(Px, Py, x, y)
bezierCurveTo(P1x, P1y, P2x, P2y, x, y)
x и y это точки в которые необходимо перейти, а координаты P(Px,
Py) в квадратичной кривой это дополнительные точки которые
используются для построения кривой. В кубической кривой
соответственно две дополнительные точки.
http://www.slideshare.net/IgorShkulipa 19
Ссылки
http://xiper.net/manuals/canvas/
http://www.html5canvas.ru/
http://www.slideshare.net/IgorShkulipa 20
SVG.js
SVG (от англ. Scalable Vector Graphics — масштабируемая векторная
графика) — язык разметки масштабируемой векторной графики,
созданный Консорциумом Всемирной паутины (W3C) и входящий в
подмножество расширяемого языка разметки XML, предназначен для
описания двумерной векторной и смешанной векторно-растровой
графики в формате XML.
SVG.js - легковесная библиотека для управления и анимации SVG.
• Анимация размеров, позиции, трансформации (translation, rotation,
skew, scale, matrix), цвета
• Masking и Clipping элементов
• Модульная структура, простота написания расширений
• Text paths (с поддержкой анимации)
• Группировка элементов
• Динамичные градиенты
• События
• Понятная документация
https://github.com/wout/svg.js
http://www.slideshare.net/IgorShkulipa 21
Пример. HTML
<!DOCTYPE html> <html> <head>
<title>JavaScript Canvas and Cookie Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/site.css" type="text/css" />
<script type="text/javascript" src="js/functions.js"> </script>
<script type="text/javascript" src="js/secundomer.js"> </script>
<body>
<div id="page">
<div id="head">
<div id="logo">
<img src="img/logo.png" height="94" width="100" alt="logo">
</div>
<div id="title">JavaScript Canvas and Cookie Example</div>
</div>
<div class="main">
<div class="innermain">
<div id="menu" class="menu">
<a href="#" id="mi1" class="menuitem">Secundomer</a>
</div>
<div id="content" class="content">
<canvas height="250" width="250" id="maincanvas"></canvas>
</div> </div> </div>
<div id="foot">
<p onmouseover="this.className = 'pmouseover'"
onmouseout="this.className = 'pmouseout'">
Move Closer to Change the Style</p>
</div> </div>
http://www.slideshare.net/IgorShkulipa 22
Пример. HTML
<script type="text/javascript">
var mi1 = document.getElementById("mi1");
var canv = document.getElementById("maincanvas");
mi1.addEventListener("click", StartSecundomer, false);
canv.addEventListener("click", CanvasClicker, false);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 23
Пример. functions.js
Добавлены функции для работы с cookie:
• function getCookie(name)
• function setCookie(name, value, expdays)
• function deleteCookie(name)
http://www.slideshare.net/IgorShkulipa 24
Пример. secundomer.js
var Canvas;
var Interval = new Object();
Secundomer = {
//Initial State
secondSize: 1000,
slowness: 10,
zeroAngle: Math.PI,
xCenter: 0,
yCenter: 0,
radius: 80,
backColor: "rgb(255,255,255)",
arrowColor: "rgb(255,0,0)",
currentColor: "",
ciferbladPath: "./img/ciferblat.png",
canvas: Object(),
//Cookies
currentAngle: Math.PI,
currentSecond: 0
}
http://www.slideshare.net/IgorShkulipa 25
Пример. Рисуем циферблат
Secundomer.DrawInitial = function () {
var img = new Image();
img.src = Secundomer.ciferbladPath;
var context = Canvas.getContext("2d");
context.width = Canvas.clientWidth;
context.height = Canvas.clientHeight;
Secundomer.xCenter = Math.floor(context.width / 2);
Secundomer.yCenter = Math.floor(context.height / 2);
Secundomer.radius = Math.floor(context.width * 0.25);
context.drawImage(img, 0, 0, context.width, context.height);
context.stroke();
}
http://www.slideshare.net/IgorShkulipa 26
Пример. Рисуем стрелку
Secundomer.DrawArrow = function (canvas) {
Secundomer.currentAngle -=
Math.PI / (60 * Secundomer.slowness);
Secundomer.ChangeColor();
var x = Math.floor(Secundomer.xCenter +
Secundomer.radius * Math.sin(Secundomer.currentAngle));
var y = Math.floor(Secundomer.yCenter +
Secundomer.radius * Math.cos(Secundomer.currentAngle));
//Drawing on Canvas
var context = Canvas.getContext("2d");
context.strokeStyle = Secundomer.currentColor;
context.beginPath();
context.moveTo(Secundomer.xCenter, Secundomer.yCenter);
context.lineTo(x, y);
context.stroke();
}
http://www.slideshare.net/IgorShkulipa 27
Пример. Смена цвета стрелки
Secundomer.ChangeColor = function () {
if (Secundomer.currentAngle <=
(Secundomer.zeroAngle - 2 * Math.PI)) {
Secundomer.currentAngle = Secundomer.zeroAngle;
Secundomer.currentSecond = 1 - Secundomer.currentSecond;
if (Secundomer.currentSecond == 0) {
Secundomer.currentColor = Secundomer.arrowColor;
} else {
Secundomer.currentColor = Secundomer.backColor;
}
}
}
http://www.slideshare.net/IgorShkulipa 28
Пример. Инициализация на основе cookie
Secundomer.InitializeSecundomer = function () {
var cs = getCookie("currentSecond");
var ca = getCookie("currentAngle");
if (cs != undefined) {
Secundomer.currentSecond = +cs;
} else Secundomer.currentSecond = 0;
if (ca != undefined) {
Secundomer.currentAngle = +ca;
} else Secundomer.currentAngle = Secundomer.zeroAngle;
Canvas = document.getElementById("maincanvas");
}
http://www.slideshare.net/IgorShkulipa 29
Пример. Сохранение состояния в cookie
Secundomer.SaveSecundomer = function () {
setCookie("currentAngle", Secundomer.currentAngle, 1);
setCookie("currentSecond", Secundomer.currentSecond, 1);
}
http://www.slideshare.net/IgorShkulipa 30
Пример. Обнуление параметров
Secundomer.ResetSecundomer = function () {
Secundomer.currentColor = Secundomer.arrowColor;
Secundomer.currentSecond = 0;
Secundomer.currentAngle = Secundomer.zeroAngle;
Canvas = document.getElementById("maincanvas");
}
http://www.slideshare.net/IgorShkulipa 31
Пример. Запуск, остановка, возобновление таймера
function StartSecundomer() {
Secundomer.ResetSecundomer();
Secundomer.DrawInitial();
Interval =
window.setInterval(Secundomer.DrawArrow,
Secundomer.secondSize / Secundomer.slowness);
}
function ResumeSecundomer() {
Secundomer.InitializeSecundomer();
Interval =
window.setInterval(Secundomer.DrawArrow,
Secundomer.secondSize / Secundomer.slowness);
}
function StopSecundomer() {
Secundomer.SaveSecundomer();
window.clearInterval(Interval);
}
http://www.slideshare.net/IgorShkulipa 32
Пример. Обработчики меню и клика по canvas
function SecundomerMenuClick() {
StartSecundomer();
}
var stop = true;
function CanvasClicker() {
if (stop) {
StopSecundomer();
stop = false;
}
else {
ResumeSecundomer();
stop = true;
}
}
http://www.slideshare.net/IgorShkulipa 33
Пример. Результат
http://www.slideshare.net/IgorShkulipa 34
Лабораторная работа №4.
Нарисовать игру из Лабораторной работы №3 на canvas с возможностью
сохранения текущего состояния игры в cookie.

More Related Content

What's hot

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOMRoman Dvornov
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016Anastasia Goryacheva
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 

What's hot (20)

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOM
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 

Viewers also liked

C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.Igor Shkulipa
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογιαMANOLIS MORAITIS
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Ida Morán
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesiadyahsudorowreti
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Janet de Acevedo Macdonald
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcionIda Morán
 
amazing animals
amazing animalsamazing animals
amazing animalssosome
 
Debian Installer Step by Step
Debian Installer Step by StepDebian Installer Step by Step
Debian Installer Step by StepAF
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 

Viewers also liked (20)

C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογια
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesia
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
BIG BEN
BIG BENBIG BEN
BIG BEN
 
Simon Elliott
Simon ElliottSimon Elliott
Simon Elliott
 
Challenge 11
Challenge 11Challenge 11
Challenge 11
 
Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"
 
Print Brochure 3NM v6
Print Brochure 3NM v6Print Brochure 3NM v6
Print Brochure 3NM v6
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
5 niveles de prevension
5  niveles de prevension5  niveles de prevension
5 niveles de prevension
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
 
amazing animals
amazing animalsamazing animals
amazing animals
 
SAEEDcv.
SAEEDcv.SAEEDcv.
SAEEDcv.
 
Debian Installer Step by Step
Debian Installer Step by StepDebian Installer Step by Step
Debian Installer Step by Step
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 

Similar to JavaScript Базовый. Занятие 07.

Язык Javascript language Кантор Часть 3.pdf
Язык Javascript language Кантор Часть 3.pdfЯзык Javascript language Кантор Часть 3.pdf
Язык Javascript language Кантор Часть 3.pdfMarcAureleEmmanuel
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview ReleaseDenis Shestakov
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерRoman Dvornov
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)xasima
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейEatDog
 
Cache2012 administrationbasics
Cache2012 administrationbasicsCache2012 administrationbasics
Cache2012 administrationbasicsDenis Pavlov
 

Similar to JavaScript Базовый. Занятие 07. (20)

Язык Javascript language Кантор Часть 3.pdf
Язык Javascript language Кантор Часть 3.pdfЯзык Javascript language Кантор Часть 3.pdf
Язык Javascript language Кантор Часть 3.pdf
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
Cache2012 administrationbasics
Cache2012 administrationbasicsCache2012 administrationbasics
Cache2012 administrationbasics
 
Module 4
Module 4Module 4
Module 4
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 

JavaScript Базовый. Занятие 07.

  • 1. Темы лекции: Работа с cookie и графикой. Практическое задание: Работа с cookie и графикой. Тренер: Игорь Шкулипа, к.т.н. JavaScript. Базовый курс Занятие 7
  • 2. http://www.slideshare.net/IgorShkulipa 2 Cookies Cookie - это небольшая порция текстовой информации, которую сервер передает браузеру. Браузер будет хранить эту информацию и передавать ее серверу с каждым запросом как часть HTTP заголовка. Одни значения cookie могут храниться только в течение одной сессии, они удаляются после закрытия браузера. Другие, установленные на некоторый период времени, записываются в файл. Сами по себе cookies не могут делать ничего, это только лишь некоторая текстовая информация. Однако сервер может считывать содержащуюся в cookies информацию и на основании ее анализа совершать те или иные действия. Например, в случае авторизованного доступа к чему либо через WWW в cookies сохраняется login и password в течение сессии, что позволяет пользователю не вводить их снова при запросах каждого документа, защищенного паролем. На использовании cookies также часто строят функции оформления заказов в онлайновых магазинах и т.д.
  • 3. http://www.slideshare.net/IgorShkulipa 3 document.cookie Для чтения и записи cookie используется свойство document.cookie. Однако, оно представляет собой не объект, а строку в специальном формате, для удобной манипуляций с которой нужны дополнительные функции. Эта строка состоит из пар ключ=значение, которые перечисляются через точку с запятой с пробелом “; “. Значит, чтобы прочитать cookie, достаточно разбить строку по ; , и затем найти нужный ключ. Это можно делать либо через split и работу с массивом, либо через регулярное выражение.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Запись в document.cookie В document.cookie можно писать. При этом запись не перезаписывает существующие cookie, а дополняет к ним. У cookie также есть ряд важных настроек, которые желательно указать, так как значения по умолчанию у них неудобны. Эти настройки указываются после пары ключ=значение, каждое — после точки с запятой: • path=/ - путь, внутри которого будет доступ к cookie. Если не указать, то имеется в виду текущий путь и все пути ниже него. Как правило, используется path=/, то есть cookie доступно со всех страниц сайта. • domain=site.com - домен, на котором доступно cookie. Если не указать, то текущий домен. Допустимо указывать текущий домен site.com и его поддомены, например forum.site.com. • expires=Tue, 19 Jan 2038 03:14:07 GMT - дата истечения куки в формате GMT. Получить нужную дату можно, используя объект Date. Его можно установить в любое время, а потом вызвать toUTCString(). Если дату не указать, то cookie будет считаться «сессионным». Такое cookie удаляется при закрытии браузера. Если дата в прошлом, то cookie будет удален. • secure - cookie можно передавать только по HTTPS.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Полезные функции для работы с cookie В JavaScript нет способа просто работать с cookie без дополнительных функций. Поэтому следующие функции или их аналоги просто необходимы: • function getCookie(name) • function setCookie(name, value, expdays) • function deleteCookie(name)
  • 6. http://www.slideshare.net/IgorShkulipa 6 function getCookie // возвращает cookie function getCookie(name) { var i, x, y, ARRcookies = document.cookie.split(";"); for (i = 0; i < ARRcookies.length; i++) { x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); x = x.replace(/^s+|s+$/g, ""); if (x == name) { return unescape(y); } } }
  • 7. http://www.slideshare.net/IgorShkulipa 7 function setCookie // уcтанавливает cookie function setCookie(name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); document.cookie = name + "=" + c_value; }
  • 8. http://www.slideshare.net/IgorShkulipa 8 function deleteCookie // удаляет cookie function deleteCookie(name) { setCookie(name, null, -1); }
  • 9. http://www.slideshare.net/IgorShkulipa 9 Аргументы функций • name - название cookie • value - значение cookie (строка) • expires - количество дней до истечения cookie.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Сторонние cookie При работе с cookie есть важная тонкость, которая касается внешних ресурсов. Теоретически, любой ресурс, который загружает браузер, может поставить cookie. Cookie, которые не принадлежат основной странице, называются «сторонними» (3rd party) cookies. Не все браузеры их разрешают. Как правило, в настройках браузера можно поставить «Блокировать данные и файлы cookie сторонних сайтов». Цель этого запрета — защитить посетителей от слежки со стороны рекламодателей, которые вместе с картинкой-баннером присылают и куки, таким образом помечая посетителей.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Ограничения cookie На Cookie наложены ограничения: • Имя и значение вместе не должны превышать 4кб. • Общее количество cookie на домен ограничено 30-50, в зависимости от браузера. • Разные домены 2го уровня полностью изолированы. Но в пределах доменов 3го уровня куки можно ставить свободно с указанием domain. • Сервер может поставить cookie с дополнительным флагом HttpOnly. Cookie с таким параметром передаётся только в заголовках, оно никак не доступно из JavaScript. Иногда посетители отключают cookie. Отловить это можно проверкой свойства navigator.cookieEnabled
  • 12. http://www.slideshare.net/IgorShkulipa 12 Альтернативы cookie • sessionStorage • globalStorage • userData • Client-side Database • Local SharedObject
  • 13. http://www.slideshare.net/IgorShkulipa 13 sessionStorage Этот метод поддерживается Firefox начиная со второй версии. Это глобальный обьект, который хранится в текущей сессии документа и хранится пока документ открыт, перегружается или восстанавливается, но открытие нового окна или вкладки с тем же адресом породит новую сессию. Пример: sessionStorage.text = «Hello, World!»; alert(sessionStorage.text); Недостатком такого подхода является то что он не может распространяться на другие страницы либо окна, а работает только в пределе своей сессии.
  • 14. http://www.slideshare.net/IgorShkulipa 14 globalStorage В связи с тем что HTML5 пока еще развивается, в Firefox присутствует глобальный объект globalStorage, который позволяет хранить данные в браузере в течении долгого промежутка времени не привязываясь к сессии, что позволяет пользоваться и манипулировать сохраненными данными при открытия нового окна, вкладки, закрытия/открытия браузера. Привязка хранилища такого рода осуществляется по домену. Пример: // Инициализируем хранилище storage = globalStorage[“somedomain.com”]; // Записываем значение storage[“hello”] = “Hello, World!”; // Выводим значение alert(storage[“hello”]); // При необходимости удаляем delete storage[“hello”]; Такой подход дает возможность сохранить до 5 мегабайт информации на клиенте в определенном домене, и использовать хранилище в пределах домена и его субдоменов.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Client-side Database Разработчики WebKit (Safari) вплотную приблизились к рекомендациям HTML5 и дали возможность создавать на клиенте базу данных.
  • 16. http://www.slideshare.net/IgorShkulipa 16 Работа с графикой Тег canvas - это элемент HTML 5, который предназначен для создания растрового изображения при помощи JavaScript. <canvas height=‘250' width=‘250' id='example'></canvas>
  • 17. http://www.slideshare.net/IgorShkulipa 17 Элементы работы с canvas • Прямоугольники. Самой элементарной фигурой которую можно рисовать является прямоугольник. Предусмотрено три функции для отрисовки прямоугольников. • strokeRect(x, y, ширина, высота) - рисует прямоугольник • fillRect(x, y, ширина, высота) - рисует закрашенный прямоугольник • clearRect(x, y, ширина, высота) - очищает область размером с прямоугольник заданного размера • Линии и дуги. Рисование фигур составленных из линий выполняется последовательно в несколько шагов: beginPath(); closePath(); stroke(); fill(); • beginPath используется что бы начать серию действий описывающих отрисовку фигуры. Каждый новый вызов этого метода сбрасывает все действия предыдущего и начинает рисовать заново. • closePath является не обязательным действием и по сути оно пытается завершить рисование проведя линию от текущей позиции к позиции с которой начали рисовать. • Завершающий шаг это вызовом метода stroke или fill. Первый обводит фигуру линиями, а второй заливает фигуру сплошным цветом.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Элементы работы с canvas • Кривые Бернштейна-Безье quadraticCurveTo(Px, Py, x, y) bezierCurveTo(P1x, P1y, P2x, P2y, x, y) x и y это точки в которые необходимо перейти, а координаты P(Px, Py) в квадратичной кривой это дополнительные точки которые используются для построения кривой. В кубической кривой соответственно две дополнительные точки.
  • 20. http://www.slideshare.net/IgorShkulipa 20 SVG.js SVG (от англ. Scalable Vector Graphics — масштабируемая векторная графика) — язык разметки масштабируемой векторной графики, созданный Консорциумом Всемирной паутины (W3C) и входящий в подмножество расширяемого языка разметки XML, предназначен для описания двумерной векторной и смешанной векторно-растровой графики в формате XML. SVG.js - легковесная библиотека для управления и анимации SVG. • Анимация размеров, позиции, трансформации (translation, rotation, skew, scale, matrix), цвета • Masking и Clipping элементов • Модульная структура, простота написания расширений • Text paths (с поддержкой анимации) • Группировка элементов • Динамичные градиенты • События • Понятная документация https://github.com/wout/svg.js
  • 21. http://www.slideshare.net/IgorShkulipa 21 Пример. HTML <!DOCTYPE html> <html> <head> <title>JavaScript Canvas and Cookie Example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="css/site.css" type="text/css" /> <script type="text/javascript" src="js/functions.js"> </script> <script type="text/javascript" src="js/secundomer.js"> </script> <body> <div id="page"> <div id="head"> <div id="logo"> <img src="img/logo.png" height="94" width="100" alt="logo"> </div> <div id="title">JavaScript Canvas and Cookie Example</div> </div> <div class="main"> <div class="innermain"> <div id="menu" class="menu"> <a href="#" id="mi1" class="menuitem">Secundomer</a> </div> <div id="content" class="content"> <canvas height="250" width="250" id="maincanvas"></canvas> </div> </div> </div> <div id="foot"> <p onmouseover="this.className = 'pmouseover'" onmouseout="this.className = 'pmouseout'"> Move Closer to Change the Style</p> </div> </div>
  • 22. http://www.slideshare.net/IgorShkulipa 22 Пример. HTML <script type="text/javascript"> var mi1 = document.getElementById("mi1"); var canv = document.getElementById("maincanvas"); mi1.addEventListener("click", StartSecundomer, false); canv.addEventListener("click", CanvasClicker, false); </script> </body> </html>
  • 23. http://www.slideshare.net/IgorShkulipa 23 Пример. functions.js Добавлены функции для работы с cookie: • function getCookie(name) • function setCookie(name, value, expdays) • function deleteCookie(name)
  • 24. http://www.slideshare.net/IgorShkulipa 24 Пример. secundomer.js var Canvas; var Interval = new Object(); Secundomer = { //Initial State secondSize: 1000, slowness: 10, zeroAngle: Math.PI, xCenter: 0, yCenter: 0, radius: 80, backColor: "rgb(255,255,255)", arrowColor: "rgb(255,0,0)", currentColor: "", ciferbladPath: "./img/ciferblat.png", canvas: Object(), //Cookies currentAngle: Math.PI, currentSecond: 0 }
  • 25. http://www.slideshare.net/IgorShkulipa 25 Пример. Рисуем циферблат Secundomer.DrawInitial = function () { var img = new Image(); img.src = Secundomer.ciferbladPath; var context = Canvas.getContext("2d"); context.width = Canvas.clientWidth; context.height = Canvas.clientHeight; Secundomer.xCenter = Math.floor(context.width / 2); Secundomer.yCenter = Math.floor(context.height / 2); Secundomer.radius = Math.floor(context.width * 0.25); context.drawImage(img, 0, 0, context.width, context.height); context.stroke(); }
  • 26. http://www.slideshare.net/IgorShkulipa 26 Пример. Рисуем стрелку Secundomer.DrawArrow = function (canvas) { Secundomer.currentAngle -= Math.PI / (60 * Secundomer.slowness); Secundomer.ChangeColor(); var x = Math.floor(Secundomer.xCenter + Secundomer.radius * Math.sin(Secundomer.currentAngle)); var y = Math.floor(Secundomer.yCenter + Secundomer.radius * Math.cos(Secundomer.currentAngle)); //Drawing on Canvas var context = Canvas.getContext("2d"); context.strokeStyle = Secundomer.currentColor; context.beginPath(); context.moveTo(Secundomer.xCenter, Secundomer.yCenter); context.lineTo(x, y); context.stroke(); }
  • 27. http://www.slideshare.net/IgorShkulipa 27 Пример. Смена цвета стрелки Secundomer.ChangeColor = function () { if (Secundomer.currentAngle <= (Secundomer.zeroAngle - 2 * Math.PI)) { Secundomer.currentAngle = Secundomer.zeroAngle; Secundomer.currentSecond = 1 - Secundomer.currentSecond; if (Secundomer.currentSecond == 0) { Secundomer.currentColor = Secundomer.arrowColor; } else { Secundomer.currentColor = Secundomer.backColor; } } }
  • 28. http://www.slideshare.net/IgorShkulipa 28 Пример. Инициализация на основе cookie Secundomer.InitializeSecundomer = function () { var cs = getCookie("currentSecond"); var ca = getCookie("currentAngle"); if (cs != undefined) { Secundomer.currentSecond = +cs; } else Secundomer.currentSecond = 0; if (ca != undefined) { Secundomer.currentAngle = +ca; } else Secundomer.currentAngle = Secundomer.zeroAngle; Canvas = document.getElementById("maincanvas"); }
  • 29. http://www.slideshare.net/IgorShkulipa 29 Пример. Сохранение состояния в cookie Secundomer.SaveSecundomer = function () { setCookie("currentAngle", Secundomer.currentAngle, 1); setCookie("currentSecond", Secundomer.currentSecond, 1); }
  • 30. http://www.slideshare.net/IgorShkulipa 30 Пример. Обнуление параметров Secundomer.ResetSecundomer = function () { Secundomer.currentColor = Secundomer.arrowColor; Secundomer.currentSecond = 0; Secundomer.currentAngle = Secundomer.zeroAngle; Canvas = document.getElementById("maincanvas"); }
  • 31. http://www.slideshare.net/IgorShkulipa 31 Пример. Запуск, остановка, возобновление таймера function StartSecundomer() { Secundomer.ResetSecundomer(); Secundomer.DrawInitial(); Interval = window.setInterval(Secundomer.DrawArrow, Secundomer.secondSize / Secundomer.slowness); } function ResumeSecundomer() { Secundomer.InitializeSecundomer(); Interval = window.setInterval(Secundomer.DrawArrow, Secundomer.secondSize / Secundomer.slowness); } function StopSecundomer() { Secundomer.SaveSecundomer(); window.clearInterval(Interval); }
  • 32. http://www.slideshare.net/IgorShkulipa 32 Пример. Обработчики меню и клика по canvas function SecundomerMenuClick() { StartSecundomer(); } var stop = true; function CanvasClicker() { if (stop) { StopSecundomer(); stop = false; } else { ResumeSecundomer(); stop = true; } }
  • 34. http://www.slideshare.net/IgorShkulipa 34 Лабораторная работа №4. Нарисовать игру из Лабораторной работы №3 на canvas с возможностью сохранения текущего состояния игры в cookie.