Что мы будем делать: мини-фреймворк для анимации перемещения абсолютно или относительно позиционированных на странице объектов по оси X или Y.
Сначала о главном: это мой первый опыт написания уроков, да и вообще статей, так что сильно не пинайте.
У многих возникнет вопрос, зачем все это надо, если есть уже готовые фреймворки (jQuery, Prototype и т.п.)? Многие скажут излюбленную фразу про велосипед. Но вы их не слушайте, они просто буржуи – любят жить на всем готовеньком. А вот мы с вами – рабочий класс! А если серьезно, то иногда нет смысла подключать большой фреймворк ради одной единственной функции, в нашем случае анимации перемещения объекта. Ну и, опять же, опыт.
Для начала немного про ООП
В JavaScript’е объект можно создать двумя способами. Первый способ создание функции. В JavaScript объектом является любая функция:
function Obj() { // объекты принято называть с большой буквы this.x = 1; this.y = 2; }
Ключевое слово this является ссылкой на объект Obj. This.x и this.y – это его свойства Obj, т.е., говоря просто, это локальные переменные которые действуют только внутри объекта Obj. Так же у объекта есть методы. Метод – это функция внутри объекта. Работает она тоже только внутри него. У каждого объекта в JavaScript есть свойство prototype, при помощи которого можно добавлять новые методы объекту:
function Obj(x, y) { // объявляем объект this.x = x; // добавляем свойство X равное параметру x, переданному в функцию this.y = y; // добавляем свойство Y равное параметру y, переданному в функцию }
Obj.prototype.method = function() { // добавляем метод return this.x + this.y; // который будет возвращать сумму двух свойств }
Мы создали наш объект и добавили ему свойства и метод, теперь осталось только создать его и начать использовать. Объект создается при помощи ключевого слова new, и может быть присвоен переменной или использоваться сразу:
// можно так var o = new Obj(4, 5); alert(o.method()); // доступ к свойствам и методам происходит через точку
// а можно так alert(new Obj(7, 8).method());
Неудобство такого подхода в создании объектов заключается в том, что в данном случае объект надо обязательно инициализировать при помощи ключевого слова new. Тут на помощь приходит второй способ создания объекта, а именно объектный литерал:
var Obj = {} // а вот, собственно, и он
Внутри объектного литерала свойства и методы записываются парами свойство: значение (имя_метода: функция) и отделяются запятыми. Похоже на ассоциативный массив ключ=>значение.
var Obj = { // создаем объект x: 1, // добавляем свойство y: 2, // добавляем свойство
При таком стиле создания объекта нет необходимости в ключевом слове new и объект можно использовать сразу:
alert(Obj.method());
Но тогда остается вопрос, как передать объекту параметры? Для этого можно создать отдельный метод, скажем init (я так и делаю), где параметры будут присвоены соответствующим свойствам объекта. Там же можно вызывать какой-либо метод:
var Obj = { // создаем объект с методом init init: function(x, y) { this.x = x; this.y = y;
this.method(); },
method: function() { return this.x + this. y; } }
// и используем его Obj.init(2, 3); alert(Obj.method());
Так же в качестве параметра функции можно передать объект, для этого нужно записать в параметр объектный литерал, который потом можно использовать внутри нашего объекта. Для этого надо немного изменить метод init:
var Obj = { // создаем объект с новым методом init init: function(params) { this.x = params.x; this.y = params.y;
this.method(); },
method: function() { return this.x + this. y; } }
// и используем его Obj.init({x: 5, y: 6}); alert(Obj.method());
Преимущества такого подхода заключаются в том, что нам становится совершенно неважно в каком порядке стоят передаваемые параметры:
// не важно в каком порядке стоят параметры Obj.init({y: 6, x: 5}); alert(Obj.method());
А еще, при таком подходе мы можем добавлять дефолтные значения для некоторых параметров:
var Obj = { // создаем объект с новым методом init init: function(params) { this.x = params.x ? params.x : 2; // если параметра X нет, то присваиваем дефолтное значение 2 this.y = params.y ? params.y : 2; // если параметра Y нет, то присваиваем дефолтное значение 2
this.method(); },
method: function() { return this.x + this. y; } }
// вызываем метод с двумя параметрами Obj.init({x: 23, y: 32}); alert(Obj.method());
// а можно без одного из параметров Obj.init({x: 23}); alert(Obj.method());
// а можно и без другого Obj.init({y: 17}); alert(Obj.method());
Ну вот теперь вы должны немного представлять себе как устроены объекты в JavaScript'е и мы можем приступать собственно к построению самого фреймворка. Следите за темой, продолжение в следующем посте.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
Great Rash
Вступление
Что мы будем делать: мини-фреймворк для анимации перемещения абсолютно или относительно позиционированных на странице объектов по оси X или Y.
Сначала о главном: это мой первый опыт написания уроков, да и вообще статей, так что сильно не пинайте.
У многих возникнет вопрос, зачем все это надо, если есть уже готовые фреймворки (jQuery, Prototype и т.п.)? Многие скажут излюбленную фразу про велосипед. Но вы их не слушайте, они просто буржуи – любят жить на всем готовеньком. А вот мы с вами – рабочий класс! А если серьезно, то иногда нет смысла подключать большой фреймворк ради одной единственной функции, в нашем случае анимации перемещения объекта. Ну и, опять же, опыт.
Для начала немного про ООП
В JavaScript’е объект можно создать двумя способами. Первый способ создание функции. В JavaScript объектом является любая функция:
Ключевое слово this является ссылкой на объект Obj. This.x и this.y – это его свойства Obj, т.е., говоря просто, это локальные переменные которые действуют только внутри объекта Obj. Так же у объекта есть методы. Метод – это функция внутри объекта. Работает она тоже только внутри него. У каждого объекта в JavaScript есть свойство prototype, при помощи которого можно добавлять новые методы объекту:
Мы создали наш объект и добавили ему свойства и метод, теперь осталось только создать его и начать использовать. Объект создается при помощи ключевого слова new, и может быть присвоен переменной или использоваться сразу:
Неудобство такого подхода в создании объектов заключается в том, что в данном случае объект надо обязательно инициализировать при помощи ключевого слова new. Тут на помощь приходит второй способ создания объекта, а именно объектный литерал:
Внутри объектного литерала свойства и методы записываются парами свойство: значение (имя_метода: функция) и отделяются запятыми. Похоже на ассоциативный массив ключ=>значение.
При таком стиле создания объекта нет необходимости в ключевом слове new и объект можно использовать сразу:
Но тогда остается вопрос, как передать объекту параметры? Для этого можно создать отдельный метод, скажем init (я так и делаю), где параметры будут присвоены соответствующим свойствам объекта. Там же можно вызывать какой-либо метод:
Так же в качестве параметра функции можно передать объект, для этого нужно записать в параметр объектный литерал, который потом можно использовать внутри нашего объекта. Для этого надо немного изменить метод init:
Преимущества такого подхода заключаются в том, что нам становится совершенно неважно в каком порядке стоят передаваемые параметры:
А еще, при таком подходе мы можем добавлять дефолтные значения для некоторых параметров:
Ну вот теперь вы должны немного представлять себе как устроены объекты в JavaScript'е и мы можем приступать собственно к построению самого фреймворка. Следите за темой, продолжение в следующем посте.
Что почитать на тему:
http://javascript.ru/tutorial/object
http://designformasters.info/posts/objectifying-javascript/
«javascript ООП» в Google.
Вопросы, предложения, критика и грубая лесть приветствуется. Прошу все писать в личку. Тему закрою во избежание флуда.
Link to comment
Share on other sites
5 answers to this question
Recommended Posts