Архивы за месяц: декабря 2007

Новогодний JavaScript. Украшаем елочку.

Владимир | | CSS, HTML, JavaScript.

Украшенная елочка
Приближается новый год. И хочется сделать что-нибудь праздничное 🙂 . Например, украсить новогоднюю елочку.

Настоящую елку украшать все умеют с детства. Поэтому сегодня я покажу, как сделать виртуальную елочку, и дать посетителям сайта возможность ее украсить по своему вкусу.

Возможный результат показан на скриншоте.

Демонстрационная страница с елочкой размещена здесь.

Исходные материалы: рисунки с елочкой (firtree.jpg) и шариками (ball1_1.gif, ball1_2.gif, …), библиотека prototype.

Идея очень простая. Посетитель щелкает мышкой по картинке с елочкой и в месте клика появляется шарик. Я нарисовал пять шариков разных цветов. Какой из них появиться определяет генератор случайных чисел. Естественно, это поведение вы можете изменить.

Посмотрите на разметку страницы.

<div id="content" onclick="addBall(event)"></div>

<p><img src="ball1_1.gif" style="display:none" alt="шарик"></img>
<img src="ball1_2.gif" style="display:none" alt="шарик"></img>
<img src="ball1_3.gif" style="display:none" alt="шарик"></img>
<img src="ball1_4.gif" style="display:none" alt="шарик"></img>
<img src="ball1_5.gif" style="display:none" alt="шарик"></img></p>

И таблицу стилей.

#content {
	margin: auto;
	border: solid 1px #ff0000;
	width: 277px;
	height: 316px;
	background-image: url('firtree.jpg');
}

Основную часть страницы занимает блок content. В качестве его фона установлена картинка с елочкой, а высота и ширина подогнаны точно под размеры этой картинки.

Кстати, обратите внимание на изображения шариков, которые вставлены после блока content. Эти шарики не отображаются браузером, т.к. для них установлено правило display:none. Невидимые картинки нам, конечно, не нужны, но этот прием позволяет устранить задержки при развешивании шариков.

Дело в том, что браузер загружает одну и туже картинку только один раз. Если эта картинка повторяется на странице (в нашем случае может быть несколько шариков одного цвета), то используется уже загруженное изображение.

Если мы уберем невидимые изображения шариков, то они будут загружаться после щелчка пользователя по елке, а это создаст задержку между щелчком и появлением шарика (особенно на dialup'е).

Теперь перейдем к добавлению шариков. В обработчике события onclick блока content мы вызываем функцию addBall(event) и передаем ей объект с параметрами события.

Посмотрите на ее исходный код:

var i = 0;
function addBall(e) {
	var n = Math.ceil(Math.random()*5);
	new Insertion.Bottom("content", "<img src=\"ball1_" + n + ".gif\" id=\"ball_" + i + "\" alt=\"шарик\"></img>");
	var mouseCoord = getMouseCoord(e);
	var ballLeft = mouseCoord[0] - 10;
	var ballTop = mouseCoord[1] - 10;
	Element.setStyle("ball_" + i, {top: ballTop + "px", left: ballLeft + "px"});
	i = i + 1;
}

Прежде всего, мы объявили глобальную переменную i. С ее помощью будем создавать уникальные идентификаторы (id) для каждого добавленного шарика. Они нам необходимы для того, чтобы задать размещение для каждого шарика отдельно.

Выбор шарика мы выполняем с помощью генератора случайных чисел (Math.random()). Т.к. он возвращает числа в диапазоне от 0 до 1, а у нас 5 шариков, умножаем результат на 5 и округляем до ближайшего большего целого числа (Math.ceil()).

Вставка шарика осуществляется с помощью функции Bottom объекта Insertion из библиотеки prototype. Использовать ее несложно. В первом параметре указываем id блока, в который нужно добавить html разметку, а во втором – указываем саму разметку (здесь мы вставили тег img с нужным шариком).

Теперь рассчитываем координаты левого верхнего угла картинки с шариком. Для этого определяем координаты курсора:

function getMouseCoord(e) {
	var IE = document.all?true:false;
	if (IE) { // определяем положение курсора в IE
	tempX = event.clientX + document.body.scrollLeft;
	tempY = event.clientY + document.body.scrollTop;
	}
	else {  // определяем положение курсора в NS
	tempX = e.pageX;
	tempY = e.pageY;
	}
	return [tempX, tempY];
}

Здесь ничего сложного, единственная заморочка заключается в том, что в IE координаты определяются не так как в Netscape, Mozilla.

От координат курсора отнимаем 10px (это половина длины и ширины изображения с шариком) и получаем координаты левого верхнего угла.

Для установки этих координат используем метод setStyle (строка 8). В его первом параметре указываем id элемента, а во втором – CSS правила.

В таблице стилей задаем для всех изображений абсолютное позиционирование.

img {
	position: absolute;
}

Вот и все. Можно наряжать елочку 🙂
Чтобы убрать шарики обновите страницу.

С Новым Годом!

P.S. Вы можете скачать архив с исходными файлами примера или посмотреть рабочую версию страницы.

Интересно почитать

Вместительные прицепы помогут вам сэкономить на количестве поездок.
С автомобилем audi вам не придется заботится о своем имидже.
Продажа подержанных автомобилей — удобный способ избавится от хлама.

«Продвинутые» возможности WordPress. Публикация постов по расписанию.

Владимир | | WordPress.

Отложенная публикация постаВ этой заметке я хочу рассказать об одной из очень полезных возможностей движка WordPress – публикации постов по расписанию.

Представьте, вы некоторое время (например, недели 2-3) собираете материал, экспериментируете, а потом за 2-3 дня делаете серию постов о полученных результатах. Естественно, для читателей гораздо удобнее чтобы посты выходили с постоянной периодичностью.

Решить эту проблему можно, если эти, написанные за 2-3 дня посты, публиковать не все сразу, а с интервалом в несколько дней. Тогда в течении этого времени вы спокойно сможете заниматься подготовкой следующего материала. Но тут возникает небольшое неудобство. Нужно помнить, что и когда опубликовать. Конечно, ничего сложного, но рано или поздно возникнет путаница.

Движок WordPress предлагает очень простое и элегантное решение этой проблемы.
Читать дальше

Ошибки в JavaScript. Лишняя запятая и браузеры.

Владимир | | JavaScript, Разное.

Знаете, бывают ошибки, на которых сколько не учись, все равно убьешь кучу времени. Думаю, каждый программист с ними сталкивался. На днях так «повезло» и мне.

Дело было так. Добавляю я эффекты из Scriptaculous, и, естественно, настраиваю их параметры. Все идет отлично. Эффекты работают как надо, работа кипит.

Тестирую, как обычно, в FireFox. Все прекрасно работает. Начинаю проверять в IE и Opera.

И тут возникает проблема. Один эффект не работает. Ни в какую. Причем я точно знаю, что сам эффект должен работать (использовал его раньше). Складывается впечатление, что не вызывается сама JavaScript функция.

Код был такой.

new Effect.Highlight('textBlock', {
startcolor:"#DFDC00",
	endcolor:"#FFFFFF", duration: 2,
	queue: {position: 'end', scope: 'myqueue'},
});

Короче, провозился я полчаса. В конце концов, до меня дошло, что лишняя запятая в конце массива с параметрами вызывает ошибку. (Эта запятая осталось случайно после экспериментов с параметрами).

Вроде бы ничего сложного. Но получается, что FireFox (с установленным плагином Firebug) исправил ошибку автоматически и даже предупреждения не вывел.
А я, естественно, начал думать, что это глюки браузеров.

Ошибка, конечно, пустяковая, но полчаса времени на ее исправление, плюс не самые приятные ощущения – это далеко не пустяк.

Может кто-то знает надежный способ отладки JavaScript кода (а заодно и CSS)?

Постовой

Хотите создать свой собственный сайт? В этом вам поможет бесплатная cms.

CSS верстка. Отрицательные отступы и IE6.

Владимир | | CSS, HTML.

IE6 и отступыНедавно столкнулся с небольшой проблемой. Во время верстки сайта etutorials.simplecoding.org нужно было разместить два элемента так, чтобы они частично перекрывались. В обоих элементах в качестве фона используются картинки, поэтому разместить их нужно точно, иначе линии не совпадут.

Речь идет о блоке со ссылкой для скачивания файла. Этот блок имеет закругленные края, которые создаются с помощью картинок. Второй блок содержит размер файла, и в качестве фона использует изображение со стрелкой.

Задача в общем-то простая и должна легко решаться с помощью CSS. Но разработчики IE6 так не считали.
Читать дальше

Новогодний конкурс. Собери RSS подписчиков.

Владимир | | Разное.

Автор блога blogbook.ru объявил новогодний конкурс. Смысл очень простой. Нужно набрать как можно больше подписчиков в течении 10 дней. Кто больше набрал, тот и выиграл.

Регистрация участников заканчивается 17 декабря. В качестве призов обещают книгу и консультацию с экспертом по развитию блогов.

Для участия нужно поместить ссылку на страницу http://blogbook.ru/2007/12/10/ohota-k-novomu-godu/.

Попробую поучаствовать 🙂 .

Интересно почитать

Лекарственные травы, электронный каталог

Многоколоночная верстка с помощью CSS. Руководство для web разработчиков.

Владимир | | Разное.

логотип к etutorialБуквально на днях закончил два небольших проекта.

Во-первых, дописал eBook «Многоколоночная верстка». В нем привел самые, на мой взгляд, удобные приемы создания web страниц с двумя и тремя колонками.

Руководство ориентировано преимущественно на начинающих web разработчиков. Поэтому все примеры довольно простые и с подробным описанием. В тоже время, это не учебник по CSS и HTML.

Скачать eBook и примеры можно абсолютно бесплатно на сайте etutorials.simplecoding.org.

Во-вторых, запустил бета версию сайта etutorials.simplecoding.org. Сайт задуман как сборник руководств и примеров по программированию и web разработке. На данный момент на сайте всего одно руководство («Многоколоночная верстка») с примерами.

Первоначально планировал размещать только свои собственные материалы. Но если есть предложения добавить что-нибудь еще, пишите на eMail. Единственное условие – материалы должны быть ваши собственные, т.е. сканированные книги на сайте размещаться не будут.

Кстати, сайт написан на PHP с использованием Code Igniter. О работе с этим фрэймоврком я запланировал целую серию статей (надеюсь, руки дойдут еще в этом году 🙂 ).
Сейчас скажу только, что Code Igniter оставил очень приятные впечатления. Безусловно, свои недостатки есть, но они довольно легко исправляются. А вот удобство использования и возможности настройки заслуживают самой высокой оценки.

Важно. На данный момент сайт собственной RSS ленты не имеет. Поэтому анонсы новых поступлений будут идти через ленту этого блога.

Интересно почитать

Эпидемиология и гигиена в Республике Беларусь

CSS верстка. Создание страницы с тремя разноцветными колонками.

Владимир | | CSS, HTML.

Страница с тремя колонками, выделенными цветомСегодня мы продолжим эксперимент с раскрашиванием колонок web страницы. В прошлый раз мы создали страницу с тремя колонками и задали для центральной колонки один фоновый цвет, а для правой и левой – другой.

Естественно, не очень удобно, что боковые колонки всегда одного и того же цвета. Исправляем этот недостаток.
Читать дальше

CSS верстка. Раскрашиваем колонки на странице.

Владимир | | CSS, HTML.

Разноцветные колонкиВ этой статье я покажу, как задать цвета фона для страницы с несколькими колонками. Допустим, у нас есть web страница, изображенная на скриншоте. Как видите, она состоит из заголовка, основной части, которая включает три колонки, и хвостовика.

Нам нужно чтобы центральная колонка имела один цвет фона, а правая и левая – другой.

Решить задачу «в лоб», т.е. воспользоваться свойством background-color каждой из колонок, не получится. Так как колонки неодинаковой высоты, которая может изменяться, и заранее неизвестна. А фон, естественно, должен распространяться на всю высоту колонки, от заголовка до хвостовика.
Читать дальше

Web разработка. Ajax без JavaScript?

Владимир | | Ajax, JavaScript, PHP.

картинка xajax
Можно ли написать web приложение, использующее Ajax, без JavaScript? Правильный ответ: «Нельзя. Потому что сама технология ajax основана на запросах, которые отправляются с помощью JavaScript». Но, кто сказал, что мы должны писать JavaScript код сами? Похоже, разработчики библиотеки xajax думали именно так.

Прежде всего, разберем, что представляет собой xajax. Это PHP библиотека, предназначенная для упрощения работы с ajax. Принцип работы заключается в том, что JavaScript код генерируется автоматически, а вы с помощью php функций указываете, где его разместить.
Читать дальше

Небольшой плагин WordPress для создания полнотекстовой RSS ленты

Владимир | | WordPress, Разное.

Настройка RSS
Недавно я решил изменить формат RSS ленты и отправлять в нее полный текст постов. Решение, конечно, не оригинальное 🙂 . Но при его реализации я столкнулся с небольшой проблемой.

Дело в том, что в постах я использую тег <!--more-->, который разбивает пост на две части: аннотацию и основное содержание. Это позволяет отображать на главной странице блога только названия с аннотациями. Но при этом, записи в ленте новостей тоже обрезаются по этому тегу. Удалить тег я не могу, потому что тогда главная страница становится ну ооооочень длинной 🙂 .

Как оказалось, у этой проблемы есть очень простое решение. Нужно просто установить плагин Full Text Feed, который отправляет в ленту все содержание поста независимо от тега <!--more-->. Настройки плагин не требует.

Все-таки приятно, что кто-то заботится о таких «мелочах».

P.S. Вторая новость. Я начал играть в blogowar.
Если кто-то играл, пожалуйста, поделитесь впечатлениями.

Интересно почитать

Решение различных задач по теплотехнике и термодинамике