script.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. 
  2. /* ООП в функциональном стиле
  3. Создайте базовый класс Figure, который будет хранить координаты (x, y)
  4. и цвет фигуры. На базе класса Figure создайте три класса –
  5. Line, Rect, Circle, каждый из которых создает соответствующую фигуру.
  6. Пример создания экземпляров каждого класса и параметры фигур:
  7. var line = new Line(50, 250, 200, 200, 'red'); // x1, y1, x2, y2, color
  8. var circle = new Circle(120, 120, 50, 'green'); // x, y, r, color
  9. var rect = new Rect(260, 130, 60, 120, 'blue'); // x, y, w, h, color
  10. Все три класса-наследника имеют метод draw для
  11. рисования фигуры с соответствующими параметрами
  12. (координаты, размеры, цвет).
  13. Фигуры рисуются на Canvas. Для рисования на канвасе создайте
  14. еще один класс – Canvas, в котором инициализируется
  15. элемент <canvas> из DOM. Класс Canvas – final, он не наследуется.
  16. В этом классе есть метод add, который и отображает созданные вами
  17. фигуры на странице. Обратите внимание, добавлять фигуры на канвас
  18. можно как по отдельности, так и списком.
  19. var drawArea = new Canvas('canvasID');
  20. drawArea.add(line);
  21. drawArea.add(circle, rect);
  22. <canvas id="canvasID"></canvas> */
  23. function Figure(x, y, color){
  24. this.x = x;
  25. this.y = y;
  26. this.color = color;
  27. }
  28. function Line(x, y, x2, y2, color) {
  29. Figure.call(this, x, y, color);
  30. this.x2 = x2;
  31. this.y2 = y2;
  32. this.draw = function (ctx) {
  33. ctx.beginPath();
  34. ctx.moveTo(this.x, this.y);
  35. ctx.lineTo(this.x2, this.y2);
  36. ctx.strokeStyle = this.color;
  37. ctx.stroke();
  38. };
  39. }
  40. function Rect(x, y, w, h, color) {
  41. Figure.call(this, x, y, color);
  42. this.w = w;
  43. this.h = h;
  44. this.draw = function (ctx) {
  45. ctx.beginPath();
  46. ctx.rect(this.x, this.y, this.w, this.h);
  47. ctx.fillStyle = this.color;
  48. ctx.fill();
  49. };
  50. }
  51. function Circle(x, y, r, color) {
  52. Figure.call(this, x, y, color);
  53. this.radius = r;
  54. this.draw = function (ctx) {
  55. ctx.beginPath();
  56. ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
  57. ctx.fillStyle = this.color;
  58. ctx.fill();
  59. };
  60. }
  61. function Canvas(self) {
  62. var painter = document.querySelector(self);
  63. this.ctx = painter.getContext("2d");
  64. painter.height = 1000;
  65. painter.width = 1000;
  66. this.add = function () {
  67. var ctx = this.ctx;
  68. [].forEach.apply(arguments, [function (element) {
  69. element.draw(ctx);
  70. }]);
  71. };
  72. }
  73. var drawArea = new Canvas("#canvasID");
  74. var line1 = new Line(50, 250, 200, 200, "red");
  75. var line2 = new Line(70, 270, 220, 220, "red");
  76. var line3 = new Line(280, 50, 310, 500, "green");
  77. var circle1 = new Circle(120, 120, 50, "green");
  78. var circle2 = new Circle(150, 150, 50, "yellow");
  79. var rect1 = new Rect(260, 260, 60, 120, "blue");
  80. var rect2 = new Rect(350, 350, 300, 100, "black");
  81. drawArea.add(line1,line2, rect1, rect2, circle1, circle2);
  82. drawArea.add(line3);