clip.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * @fileOverview
  3. *
  4. * 支持图形裁切
  5. */
  6. define(function(require, exports, module) {
  7. var Class = require('../core/class');
  8. var Shape = require('./shape');
  9. /**
  10. * @class kity.Clip
  11. * @base kity.Resource
  12. * @mixins kity.ShapeContainer
  13. *
  14. * @description 创建图形裁切,用于裁切目标图形
  15. */
  16. var Clip = Class.createClass('Clip', {
  17. base: Shape,
  18. mixins: [require('./shapecontainer')],
  19. /**
  20. * @constructor
  21. * @for kity.Clip
  22. *
  23. * @grammar new kity.Clip(paper)
  24. *
  25. * @param {kity.Paper} paper 资源所属的文档
  26. *
  27. * @example
  28. *
  29. * ```js
  30. * var circle = paper.put(new kity.Circle(100).fill('yellow'));
  31. * var clip = new kity.Clip(paper);
  32. * clip.addShape(new kity.Circle(100, 50, 0));
  33. * clip.clip(circle);
  34. * ```
  35. */
  36. constructor: function(paper) {
  37. this.callBase('clipPath', paper);
  38. },
  39. /**
  40. * @method clip()
  41. * @for kity.Clip
  42. * @description 将裁切应用到指定的图形上,应用之后,目标图形将显示与裁切形状重合的部分
  43. *
  44. * @grammar clip(shape) => {this}
  45. *
  46. * @param {kity.Shape} shape 要应用裁切的图形
  47. */
  48. clip: function(shape) {
  49. shape.getNode().setAttribute('clip-path', this);
  50. return this;
  51. }
  52. });
  53. Class.extendClass(Shape, {
  54. /**
  55. * @method clipWidth()
  56. * @for kity.Shape
  57. *
  58. * @grammar clipWidth(clip) => {this}
  59. *
  60. * @param {kity.Clip|kity.Shape} clip 要用于裁切当前图形的图形;
  61. * 如果 clip 本身是一个裁切对象(kity.Clip 类型),则直接裁切;
  62. * 否则将创建新的裁切包含给定的图形,然后对当前图形进行裁切
  63. *
  64. * @example
  65. *
  66. * ```js
  67. * var circle = paper.put(new kity.Circle(100));
  68. * var rect = paper.put(new kity.Rect(100, 100, -100, 0));
  69. *
  70. * circle.clipWidth(rect);
  71. * ```
  72. */
  73. clipWith: function(clip) {
  74. if (clip instanceof Shape) {
  75. clip = new Clip(clip.getPaper()).addShape(clip);
  76. }
  77. clip.clip(this);
  78. return this;
  79. }
  80. });
  81. return Clip;
  82. });