script.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // ООП в функциональном стиле
  2. // Создайте базовый класс Figure, который будет хранить координаты (x, y) и цвет фигуры. На базе класса Figure создайте три класса – Line, Rect, Circle, каждый из которых
  3. // создает соответствующую фигуру. Пример создания экземпляров каждого класса и параметры фигур:
  4. // var line = new Line(50, 250, 200, 200, 'red'); // x1, y1, x2, y2, color
  5. // var circle = new Circle(120, 120, 50, 'green'); // x, y, r, color
  6. // var rect = new Rect(260, 130, 60, 120, 'blue'); // x, y, w, h, color
  7. // Все три класса-наследника имеют метод draw для рисования фигуры с соответствующими параметрами (координаты, размеры, цвет).
  8. // Фигуры рисуются на Canvas. Для рисования на канвасе создайте еще один класс – Canvas, в котором инициализируется элемент <canvas> из DOM. Класс Canvas – final, он не
  9. // наследуется. В этом классе есть метод add, который и отображает созданные вами фигуры на странице. Обратите внимание, добавлять фигуры на канвас можно как по отдельности,
  10. // так и списком.
  11. // var drawArea = new Canvas('canvasID');
  12. // drawArea.add(line);
  13. // drawArea.add(circle, rect);
  14. // <canvas id="canvasID"></canvas>
  15. function Figure(x,y,color) {
  16. this.x = x;
  17. this.y = y;
  18. this.color = color;
  19. };
  20. function Circle(x,y,r,color) {
  21. Figure.call(this,x,y,color);
  22. this.r = r;
  23. };
  24. Circle.prototype.draw = function(par) {
  25. par.fillStyle = this.color;
  26. par.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
  27. par.fill();
  28. };
  29. function Rect(x,y,w,h,color) {
  30. Figure.call(this,x,y,color);
  31. this.w = w;
  32. this.h = h;
  33. };
  34. Rect.prototype.draw = function(par) {
  35. par.fillStyle = this.color;
  36. par.fillRect(this.x, this.y, this.x+this.w, this.y+this.h);
  37. };
  38. function Line(x1,y1,x2,y2,color) {
  39. Figure.call(this,x1,y1,color);
  40. this.x2 = x2;
  41. this.y2 = y2;
  42. };
  43. Line.prototype.draw = function(par) {
  44. par.strokeStyle = this.color;
  45. par.moveTo(this.x,this.y);
  46. par.lineTo(this.x2,this.y2);
  47. par.stroke();
  48. };
  49. function Canvas(id) {
  50. this.add = function(figure) {
  51. var canvas = document.getElementById(id),
  52. ctx = canvas.getContext("2d");
  53. figure.draw(ctx);
  54. };
  55. };
  56. var line = new Line(25, 75, 275, 75, 'red'); // x1, y1, x2, y2, color
  57. var circle = new Circle(120, 100, 50, 'green'); // x, y, r, color
  58. var rect = new Rect(100, 30, 50, 100, 'blue'); // x, y, w, h, color
  59. var drawArea = new Canvas('canvasLine');
  60. drawArea.add(line);
  61. var drawArea = new Canvas('canvasCircle');
  62. drawArea.add(circle);
  63. var drawArea = new Canvas('canvasRect');
  64. drawArea.add(rect);