русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Класс CSSDrawing


Дата добавления: 2015-07-09; просмотров: 439; Нарушение авторских прав


 

Программный код, представленный в примере 22.5, призван решить единствен_ ную задачу – нарисовать гистограмму. Однако средствами CSS можно рисовать

 

и более сложные диаграммы, например деревья, как показано на рис. 22.2, при условии, что они будут состоять из прямоугольников, а также горизонтальных

и вертикальных линий.

 

В примере 22.6 приводится определение класса CSSDrawing, предоставляющего простой прикладной интерфейс для рисования прямоугольников и линий, а в при_ мере 22.7 – код, который использует класс CSSDrawing для воссоздания диаграм_ мы, представленной на рис. 22.2.

 

Пример 22.6. Класс CSSDrawing

/**

* Данная функция_конструктор создает элемент div, в котором средствами CSS

* может быть нарисована фигура. С помощью методов экземпляра можно рисовать

* линии и прямоугольники и вставлять полученные фигуры в документ.

*

* При вызове конструктора можно использовать две различные сигнатуры:

 

*

* new CSSDrawing(x, y, width, height, classname, id)

*

* В данном случае элемент <div> создается со стилем position:absolute

* в указанных координатах и с заданными размерами.

*

* Конструктор может также вызываться только с аргументами width и height:

 

*

* new CSSDrawing(width, height, classname, id)

*

* В этом случае элемент <div> создается с заданными шириной и высотой

* и со стилем position:relative (это необходимо, чтобы дочерние элементы,

* изображающие линии и прямоугольники, могли иметь абсолютное

* позиционирование).

*

* В обоих случаях аргументы classname и id являются необязательными.

* Если они определены, их значения используются в качестве


 

22.2. Графика и CSS
   

 

* значений атрибутов class и id созданного элемента <div> и могут



* использоваться, чтобы связать CSS_стили с фигурой.

*/

function CSSDrawing(/* переменное число аргументов */) {

 

// Создать и запомнить элемент <div>, предназначенный для рисования var d = this.div = document.createElement("div");

 

var next;

 

// Выяснить количество числовых аргументов _ четыре или два,

// это размеры и координаты элемента div соответственно

 

if (arguments.length >= 4 && typeof arguments[3] == "number") { d.style.position = "absolute";

 

d.style.left = arguments[0] + "px"; d.style.top = arguments[1] + "px"; d.style.width = arguments[2] + "px"; d.style.height = arguments[3] + "px"; next = 4;

}

else {

 

d.style.position = "relative"; // Это очень важно d.style.width = arguments[0] + "px"; d.style.height = arguments[1] + "px";

next = 2;

}

 

// Установить атрибуты class и id, если они были заданы. if (arguments[next]) d.className = arguments[next];

if (arguments[next+1]) d.id = arguments[next+1];

}

 

/** * Добавляет к рисунку прямоугольник.

*    
* x, y, w, h: определяют координаты и размеры прямоугольника.  
* content: строка текста или HTML_кода, который выводится в прямоугольнике
* classname, id: необязательные значения атрибутов class и id для прямоугольника.
* Могут использоваться для связи прямоугольника со стилями,
* что позволяет определить цвет, рамку и пр.  

 

* Возвращаемое значение: Элемент <div>, изображающий прямоугольник */

 

CSSDrawing.prototype.box = function(x, y, w, h, content, classname, id) { var d = document.createElement("div");

 

if (classname) d.className = classname; if (id) d.id = id;

 

d.style.position = "absolute"; d.style.left = x + "px"; d.style.top = y + "px"; d.style.width = w + "px"; d.style.height = h + "px"; d.innerHTML = content; this.div.appendChild(d); return d;

 

};

 

/**


 

560 Глава 22. Работа с графикой на стороне клиента

* Добавляет к рисунку горизонтальную линию.

 

*

* x, y, width: определяют координаты начальной точки и толщину линии

* classname, id: необязательные значения атрибутов class и id. По крайней

* мере, один должен присутствовать, чтобы определить стиль
* рамки, который будет использоваться для определения
* стиля линии, цвета и толщины.  

 

* Возвращаемое значение: Элемент <div>, изображающий линию */

 

CSSDrawing.prototype.horizontal = function(x, y, width, classname, id) { var d = document.createElement("div");

 

if (classname) d.className = classname; if (id) d.id = id;

 

d.style.position = "absolute"; d.style.left = x + "px"; d.style.top = y + "px"; d.style.width = width + "px"; d.style.height = 1 + "px";

 

d.style.borderLeftWidth = d.style.borderRightWidth = d.style.borderBottomWidth = "0px";

 

this.div.appendChild(d); return d;

};

 

/**

* Добавляет к рисунку вертикальную линию.

* Подробности в описании метода horizontal().

*/

 

CSSDrawing.prototype.vertical = function(x, y, height, classname, id) { var d = document.createElement("div");

 

if (classname) d.className = classname; if (id) d.id = id;

 

d.style.position = "absolute"; d.style.left = x + "px"; d.style.top = y + "px"; d.style.width = 1 + "px"; d.style.height = height + "px";

 

d.style.borderRightWidth = d.style.borderBottomWidth = d.style.borderTopWidth = "0px";

 

this.div.appendChild(d); return d;

};

 

/** Вставляет рисунок в документ как дочерний элемент указанного контейнера */ CSSDrawing.prototype.insert = function(container) {

if (typeof container == "string")

 

container = document.getElementById(container); container.appendChild(this.div);

}

 

/** Вставляет рисунок в документ, замещая указанный элемент */ CSSDrawing.prototype.replace = function(elt) {

 

if (typeof elt == "string") elt = document.getElementById(elt); elt.parentNode.replaceChild(this.div, elt);

}


 

22.2. Графика и CSS
   

 

Конструктор CSSDrawing() создает новый объект CSSDrawing, который представля_ ет собой всего лишь обертку элемента <div>. Методы экземпляра box(), vertical()

и horizontal() рисуют средствами CSS прямоугольники, вертикальные линии

 

и горизонтальные линии соответственно. Каждый метод позволяет определить координаты и размеры прямоугольника или линии, а также значения атрибутов class и id создаваемого элемента прямоугольника или линии. Атрибуты class или id могут использоваться для связи рисуемых элементов со стилями CSS, опреде_ ляющими цвет, толщину линий и тому подобное. Чтобы сделать объект CSSDraw_ ing видимым, недостаточно создать его. Нужно еще вставить его в документ с по_ мощью метода insert() или replace().

 

В примере 22.7 демонстрируется порядок использования класса CSSDrawing. Обе части примера – и JavaScript_код в методе drawFigure(), и таблица стилей CSS – играют важную роль в создании рисунка. В программном коде определяются ко_ ординаты и размеры прямоугольников и линий, а в таблице стилей – цвет и тол_ щина линий. Обратите внимание, насколько тесно связаны между собой сцена_ рий JavaScript и таблицы стилей CSS: программный код метода drawFigure() дол_ жен учитывать толщину рамки и ширину отступов, заданных в таблице стилей. Это можно отнести к недостаткам прикладного интерфейса рисования, опреде_ ляемого классом CSSDrawing.

 

Пример 22.7. Рисование диаграммы с помощью класса CSSDrawing

 

<!DOCTYPE HTML PUBLIC "_//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 

<!__ Без этого объявления DOCTYPE рисунок в IE получится неправильным __> <html>

<head>

 

<script src="CSSDrawing.js"></script> <!__ Подключить определение класса __> <style>

/* Стили для прямоугольника самого рисунка */

 

.figure { border: solid black 2px; background_color: #eee;} /* Стили для линий сетки */

 

.grid { border: dotted black 1px; opacity: .1; } /* Стили для прямоугольников на рисунке */

 

.boxstyle {

 

border: solid black 2px; background: #aaa;

 

padding: 2px 10px 2px 10px; font: bold 12pt sans_serif; text_align: center;

}

 

/* Стили для линий, соединяющих прямоугольники */

 

.boldline { border: solid black 2px; } </style>

<script>

 

// Рисует сетку в заданном прямоугольнике с расстояниями между линиями dx,dy function drawGrid(drawing, x, y, w, h, dx, dy) {

 

for(var x0 = x; x0 < x +w; x0 += dx) drawing.vertical(x0, y, h, "grid");

 

for(var y0 = y; y0 < y + h; y0 += dy) drawing.horizontal(x, y0, w, "grid");


 

Глава 22. Работа с графикой на стороне клиента
   
}  
function drawFigure( ) {
// Создать новый рисунок
var figure = new CSSDrawing(500, 200, "figure");

 

// Вставить в рисунок сетку drawGrid(figure, 0, 0, 500, 200, 25, 25);

 

// Нарисовать четыре прямоугольника

 

figure.box(200, 50, 75, 25, "Life", "boxstyle"); // верхний прямоугольник figure.box(50, 125, 75, 25, "Archaea", "boxstyle"); // линейка из 3 figure.box(200, 125, 75, 25, "Bacteria", "boxstyle"); // ..прямоугольников figure.box(350, 125, 75, 25, "Eukaryota", "boxstyle"); // ..ниже

// Это линия, опускающаяся вниз от центра нижней границы прямоугольника

// "Life". Начальная координата y этой линии: 50+25+2+2+2+2, или

// y + height + top border + top padding + bottom padding + bottom border

// Обратите внимание: для подобных вычислений необходимо знать как программный

 

// код, так и таблицы стилей. Такой подход нельзя признать идеальным. figure.vertical(250, 83, 20, "boldline");

 

figure.horizontal(100, 103, 300, "boldline"); // горизонтальная линия

figure.vertical(100, 103, 22, "boldline"); // соединение с "archaea"
figure.vertical(250, 103, 22, "boldline"); // соединение с "bacteria"
figure.vertical(400, 103, 22, "boldline"); // соединение с "eukaryota"

 

// Вставить рисунок в документ, заменив элемент_заполнитель figure.replace("placeholder");

}

</script>

</head>

 

<body onload="drawFigure()"> <div id="placeholder"></div> </body>

</html>

 



<== предыдущая лекция | следующая лекция ==>
Создание гистограмм средствами CSS | SVG – масштабируемая векторная графика


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.314 сек.