адаптивить
должен ли я адаптивить под абсолютно любое пиксельное разрешение или же только под самые распространенные?
<div class="wrap">...</div>
и позиционируйте этот «div» так, как вам нужно.<a href="#"> <!-- строчный элемент -->
<p>Some paragraph</p> <!-- блочный элемент -->
</a>
жестокое ооп в javascript
классической модели ооп
<div class="logo"><img src="logo.png"></div>
лучше делать так <img src="logo.png" class="logo">
<div>
<img>
____
<a></a>
</div>
<a class="..">
но о них вам валидатор скажет сразу, поэтому не вижу смысла описывать правила валидностиli:hover
{
background-color:#ff0000;
border-top: 2px solid blue;
border-bottom: 2px solid blue;
}
Телефон устройство = new Смартфон();
устройство.набратьНомер("03");
Смартфон усовершенствованноеУстройство = (Смартфон)устройство;
/* Функция асинхронной загрузки хеадера */
function getHeader() {
$.post('modules/constructor.php', /* Аппелируем к серверному скрипту по указаному адресу */
{ 'action': "header", 'lang': lang }, /* Передаем параметры на сервер */
function(data) { /* Callback - параметр анонимня функция. Вызывается при удачном запросе */
$('div#header') /* Выбираем #header - но правильнее $('#header'), ибо 2 блока с одним id не правильно */
.empty().append(data); /* Очищает выбраный блок и дописывает к нему полученные данные */
}
).done(function() { /* Событие выполняется после удачного выполнения запроса */
getFooter() /* Вызов запроса Fotter */
})
}
/* далее аналогично но для footer */
function getFooter() {
$.post('modules/constructor.php',
{ 'action': "footer", 'lang': lang },
function(data) {
$('#footer').empty().append(data);
}
).done(function() {
getScriptHandF(); /* Здесь была синтаксическая ошибка: отсутствие замыкающего ";" */
getContent(content)
})
}
function getContent(cont) {
$.post('modules/constructor.php',
{ 'content': cont, 'lang': lang, 'device': devi },
function(data) {
$('#content-wrapper').empty().append(data);
}
).done(function() {
/* Далее человек питался сделать прелоадинг картинок. НО! */
/* Картинки уже начались загружатся после выполнения
колбеков из загрузок getContent, getHeader, getFoоter */
var paths = []; /* Готовим массив для прелоадинга картинок */
var images = $('body').find('img'); /* Выбираем все картинки */
images.each(function() { /* Пробегаемся по всем картинкам */
paths.push($(this).attr('src')); /* Записываем ссылку на картинку в масив */
});
preloadImages(paths, function () { /* Вызывает preloadImages Описания процедуры нет */
$("html,body").animate({"scrollTop":0},200); /* Анимирует скроллинг если страница прокручена на верх страницы */
$('#preload').fadeOut(1000); /* Анимирует прозрачность кроющего блока #preload */
getScript(); /* Вызывает getScript */
if (cont=="home") getSlider(); /* Вызывает getSlider если страница домашняя */
});
})
}
function historyLoad() {
// History - это какая-то обертка над History API, что возвращает метод getState точно неизвестно
var State = History.getState();
// Просто логирование
History.log('initial:', State.data, State.title, State.url);
// Показывается прелоадер
$('#preload').fadeIn(200);
// Если последний символ в url слеш, то:
// 1. изменяется глобальная переменная content
// 2. выполняется функция getHeader
// 3. функция завершает работу
if ("/" == State.url.slice(-1))
{
content = "home";
getHeader();
return;
}
// Разбиваем url по знаку вопроса (забыли var)
str = State.url.split('?');
// Берем часть после знака вопроса (забыли var)
strSplit = str[1];
console.log(strSplit);
// Разбивает часть после знака вопроса по амперсанду (забыли var)
l = strSplit.split('&');
// Если есть что-то между знаком вопроса и первым амперсандом
if (l[0])
{
// В зависимости от того, что находится перед первым амперсандом
switch (l[0])
{
case "en":
case "ru":
case "ua":
// изменяем глобальную переменную lang
// вызываем функцию getHeader
lang = l[0];
getHeader();
break;
default:
// если первый элемент перед амперсандом не en, ru или ua:
// 1. изменяется глобальная переменная content
// 2. выполняется функция getHeader
content = "abra";
getHeader();
break;
}
if (l[1] && undefined != l[1])
{
// Если что-то есть между первым и вторым амперсандами (ну или просто после первого, если других нет),
// записываем эту строку в глобальную переменную content
content = l[1]
}
}
else
{
// Вызывем функцию getHeader
getHeader();
}
}
// Выполняем функцию при старте страницы
historyLoad();
// слушаем изменение url страницы, используя обертку над History API и выполняем функцию historyLoad
History.Adapter.bind(window, 'statechange', function () { // Note: We are using statechange instead of popstate
// Log the State
historyLoad();
});
function preloadImages() {
// создаем функцию с помощью Function declaration (инструкции объявления функции)
// как бы говорим интерпретатору "создай функцию и помести ее в переменную preloadImages"
if (typeof arguments[arguments.length - 1] == 'function') {
// в javascript нет "перегрузки" функций, функция может принимать сколько угодно значений
// доступ к переданным аргументам можно осуществить через "псевдо-массив" arguments
// arguments.length - возвращает количество переданных аргументов
// в arguments можно обращаться к аргументу по номеру
// arguments[arguments.length - 1] - последний параметр функции
// typeof x - возвращает строку, содержащую информацию о типе операнда x
// в конечном счете проверяется, является ли последний переданный аргумент функцией
var callback = arguments[arguments.length - 1];
// копируем ссылку на эту функцию в переменную callback
// эта переменная еще в момент вхождения интерпретатора в функцию preloadImages поднимется и будет
// в лексическом окружении (LexicalEnvironment) функции
} else {
var callback = false;
// иначе остаемся без коллбэка
}
if (typeof arguments[0] == 'object') {
// если первый аргумент функции является объектом (всё, кроме чисел, строк, true, false, null, undefined)
// здесь, видимо, мы ждем в первом параметре массив изображений
// вызов вида preloadImages(['img1.jpg',..., 'imgN.jpg'])
var images = arguments[0];
// копируем ссылку из первого аргумента-объекта в переменную images
var n = images.length;
// записываем количество элементов в массиве в переменную
} else {
// если первый аргумент не объект,
// скорее всего, на входе ждем список строк-урл картинок
// preloadImages('img1.jpg',..., 'imgN.jpg')
var images = arguments;
// здесь уже копируем ссылку на весь список аргументов
var n = images.length - 1;
// записываем в переменную n количество параметров с вычетом одного,
// видимо, задумывалось, что последним аргументом будет функция-callback
// иначе последнее изображение не обработается
}
var not_loaded = n;
// временная переменная, количество незагруженных изображений
for (var i = 0; i < n; i++) {
// обычный цикл с инкрементом на каждой итерации
jQuery(new Image()).attr('src', images[i]).load(function() {
// new Image() - создаем HTMLImageElement,
// jQuery(new Image()) - делаем из него jquery объект для возможности работы с ним с помощью методов jquery
// .attr('src', images[i]) - проставляем объекту атрибут src, что сразу запустит загрузку изображения
// load(function() { - и привяжемся к событию load изображения
if (--not_loaded < 1 && typeof callback == 'function') {
// сначала уменьшаем, потом сравниваем с 1 нашу временную переменную
// отлавливаем когда у нас все изображения загрузятся,
// порядок загрузки не важен тут
// и если в переменную callback попала функция, то
callback();
// вызываем ее
}
});
}
}