JavaScript скрипты


Canvas - создание многоугольников

Размещена 24 июля, 2008 года


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

Однако, существуют поддерживаемые современными браузерами технологии, которые позволят прямо на HTML-странице "нарисовать" всё, что сможем придумать: • Canvas – поддерживается Gecko и Opera 8.0+. • VML (Vector Markup Language) – поддерживается IE.

Немного о canvas

<canvas> - это HTML-элемент, использующийся для создания графики. По сути, canvas - это блочный элемент. Такой же прямоугольник, отличающийся от обычного DIV-а тем, что в нём с помощью JavaScript можно рисовать.

Впервые canvas был разработан корпорацией Apple для браузера Safari. Поддержка в Gecko появилась с версии 1.5 (в Opera с версии 9.0). Для полноценной работы canvas требует от браузера не только поддержки HTML, но и JavaScript. Подробнее о canvas читаем здесь.

VML

VML – это XML-фича, сделанная Microsoft для проектирования двумерной векторной графики. Это приложение позволяет создавать простейшие векторные фигуры и объединять их в группы. Подробнее о VML читаем здесь (en).

Explorer Canvas

Есть замечательная штука - Explorer Canvas (сокращенно eCanvas). Это js-файлик, который "учит" эксплорер понимать canvas и работать с ним. По сути, этот файлик занимается тем, что переводит инстуркции написанные, для canvas, на язык VML. Это существенно упрощает жизнь разработчику, т.к. писать при подключении такой фичи можно только для canvas, не владея VML.

Теперь, имея представления о canvas, напишем простой скрипт, который, принимая в качестве аргументов id тега <canvas> и массив с координатами точек, будет рисовать многоугольник:

• Код JavaScript
// Функция, принимающая id тега <canvas> и массив координат 
function drawPoly(id, arr) { 
   var canvas = document.getElementById(id).getContext('2d'); 
   // Начинаем отрисовку 
   canvas.beginPath(); 
   for (var i = 0; i < arr.length; i++) { 
      // Ставим точку на исходную позицию 
      if (i == 0) canvas.moveTo(arr[i][0], arr[i][1]); 
      // Рисуем линии от точки к точке 
      else canvas.lineTo(arr[i][0], arr[i][1]); 
   } 
   // Задаем цвет заливки в формате RGBA 
   canvas.fillStyle = "rgba(255,128,128,0.5)"; 
   // Зальем полученный многоугольник цветом 
   canvas.fill(); 
} 


// Многомерный массив с координатами 
var coordArray = [ 
   [100, 50], 
   [115, 80], 
   [150, 80], 
   [125, 100], 
   [135, 130], 
   [100, 110], 
   [65, 130], 
   [75, 100], 
   [50, 80], 
   [85, 80] 
]; 

// Выведем в HTML-поток тег <canvas> и кнопку для запуска рисовалки 
document.write( 
   "<canvas id='canvasId' width='200' height='200'></canvas>\ 
   <br/><br/>\ 
   <input type='button' value='Draw' onclick='drawPoly(\"canvasId\", coordArray)' />" 
);

Совместимость с броузерами

Проверено в: - IE6; - Mozilla Firefox 1.5; - Opera 9.01+;

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

function canvasBrowser() { 
   // Определяем тип браузера 
   var ua = navigator.userAgent.toLowerCase(); 
   var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1); 
   var isOpera = ua.indexOf("opera") != -1; 
   var isFF = ua.indexOf("firefox") != -1; 

   var result = false; 
   // Разрешим все версии IE 
   if (isIE) result = true; 
   // Лису разрешим только с полторашки 
   else if (isFF) { 
      var ffVersion = parseFloat(ua.substring(ua.indexOf("firefox") + 8, ua.length)); 
      if (ffVersion >= 1.5) result = true; 
   // Оперу, начиная с версии 9.0 
   } else if (isOpera) { 
      var operaVersion = parseFloat(ua.substring(ua.indexOf("opera") + 6, ua.length)); 
      if (operaVersion >= 9.0) result = true; 
   } 
   return result; 
}

Пример работы




Все права на статью принадлежат сайту fastcoder.org
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Стишки пирожки про Олега⁠⁠

Размещена 20 июня 2024 года

Олег купил презервативы
Проник в семидесятый год
И подарил их папе с мамой
Такой нелепый суицид

читать далее…

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…