shadow.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div style="margin-top: 10px;">
  3. 阴影扩散范围 :
  4. <el-input-number @change="changeblur" v-model="blurl" size="mini" style="width: 100px"></el-input-number> &nbsp;
  5. x轴偏移量 :
  6. <el-input-number @change="changeX" v-model="X" size="mini" style="width: 100px"></el-input-number> &nbsp;
  7. y轴偏移量 :
  8. <el-input-number @change="changeY" v-model="Y" size="mini" style="width: 100px"></el-input-number> &nbsp;
  9. 阴影颜色 :
  10. <el-color-picker @change="changeColor" v-model="color" size="mini"
  11. style="vertical-align: middle"></el-color-picker>
  12. <canvas :id="id" width="740" height="400" tabindex="0"></canvas>
  13. </div>
  14. </template>
  15. <script lang="ts">
  16. import { SColor, SPainter } from "@persagy-web/draw/lib";
  17. import { Component, Vue } from "vue-property-decorator";
  18. import { SGraphView } from "@persagy-web/graph/lib";
  19. import { v1 as uuid } from "uuid";
  20. class shadowView extends SGraphView {
  21. /** 阴影扩散距离 */
  22. shadowBlur: number;
  23. /** 阴影颜色 */
  24. shadowColor: SColor;
  25. /** 阴影 x 轴偏移量 */
  26. shadowOffsetX: number;
  27. /** 阴影 y 轴偏移量 */
  28. shadowOffsetY: number;
  29. /**
  30. * 构造函数
  31. * @param id
  32. */
  33. constructor(id: string) {
  34. super(id);
  35. this.shadowBlur = 10;
  36. this.shadowColor = new SColor('#00000060');
  37. this.shadowOffsetX = 10;
  38. this.shadowOffsetY = 10;
  39. }
  40. /**
  41. * Item 绘制操作
  42. * @param canvas 绘制对象
  43. */
  44. onDraw(canvas: SPainter) {
  45. // 清除画布
  46. canvas.clearRect(0, 0, 740, 400);
  47. // 绘制操作相关命令
  48. canvas.pen.lineWidth = 1;
  49. canvas.pen.color = SColor.Black;
  50. canvas.brush.color = SColor.White;
  51. canvas.shadow.shadowBlur = this.shadowBlur;
  52. canvas.shadow.shadowColor = this.shadowColor;
  53. canvas.shadow.shadowOffsetX = this.shadowOffsetX;
  54. canvas.shadow.shadowOffsetY = this.shadowOffsetY;
  55. // 绘制矩形
  56. canvas.drawRect(300, 50, 100, 100);
  57. canvas.drawRect(270, 100, 100, 100);
  58. }
  59. }
  60. @Component
  61. export default class ShadowCanvas extends Vue {
  62. id: string = uuid();
  63. view: shadowView | undefined;
  64. blurl: number = 10;
  65. X: number = 10;
  66. Y: number = 10;
  67. color: string = "#cccccc";
  68. mounted() {
  69. this.view = new shadowView(this.id);
  70. }
  71. // 修改扩散距离
  72. changeblur(v: number): void {
  73. this.view!!.shadowBlur = v;
  74. this.view!!.update()
  75. };
  76. // x轴偏移量
  77. changeX(v: number) {
  78. this.view!!.shadowOffsetX = v;
  79. this.view!!.update()
  80. };
  81. // y轴偏移量
  82. changeY(v: number) {
  83. this.view!!.shadowOffsetY = v;
  84. this.view!!.update()
  85. };
  86. // 修改颜色
  87. changeColor(v: string) {
  88. this.view!!.shadowColor = new SColor(v);
  89. this.view!!.update()
  90. }
  91. }
  92. </script>