LinesView.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. var _config = require("../../config");
  2. var __DEV__ = _config.__DEV__;
  3. var echarts = require("../../echarts");
  4. var LineDraw = require("../helper/LineDraw");
  5. var EffectLine = require("../helper/EffectLine");
  6. var Line = require("../helper/Line");
  7. var Polyline = require("../helper/Polyline");
  8. var EffectPolyline = require("../helper/EffectPolyline");
  9. var LargeLineDraw = require("../helper/LargeLineDraw");
  10. var _default = echarts.extendChartView({
  11. type: 'lines',
  12. init: function () {},
  13. render: function (seriesModel, ecModel, api) {
  14. var data = seriesModel.getData();
  15. var lineDraw = this._lineDraw;
  16. var hasEffect = seriesModel.get('effect.show');
  17. var isPolyline = seriesModel.get('polyline');
  18. var isLarge = seriesModel.get('large') && data.count() >= seriesModel.get('largeThreshold');
  19. if (hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLarge !== this._isLarge) {
  20. if (lineDraw) {
  21. lineDraw.remove();
  22. }
  23. lineDraw = this._lineDraw = isLarge ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line);
  24. this._hasEffet = hasEffect;
  25. this._isPolyline = isPolyline;
  26. this._isLarge = isLarge;
  27. }
  28. var zlevel = seriesModel.get('zlevel');
  29. var trailLength = seriesModel.get('effect.trailLength');
  30. var zr = api.getZr(); // Avoid the drag cause ghost shadow
  31. // FIXME Better way ?
  32. // SVG doesn't support
  33. var isSvg = zr.painter.getType() === 'svg';
  34. if (!isSvg) {
  35. zr.painter.getLayer(zlevel).clear(true);
  36. } // Config layer with motion blur
  37. if (this._lastZlevel != null && !isSvg) {
  38. zr.configLayer(this._lastZlevel, {
  39. motionBlur: false
  40. });
  41. }
  42. if (hasEffect && trailLength) {
  43. if (!isSvg) {
  44. zr.configLayer(zlevel, {
  45. motionBlur: true,
  46. lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)
  47. });
  48. }
  49. }
  50. this.group.add(lineDraw.group);
  51. lineDraw.updateData(data);
  52. this._lastZlevel = zlevel;
  53. },
  54. updateLayout: function (seriesModel, ecModel, api) {
  55. this._lineDraw.updateLayout(seriesModel); // Not use motion when dragging or zooming
  56. var zr = api.getZr();
  57. var isSvg = zr.painter.getType() === 'svg';
  58. if (!isSvg) {
  59. zr.painter.getLayer(this._lastZlevel).clear(true);
  60. }
  61. },
  62. remove: function (ecModel, api) {
  63. this._lineDraw && this._lineDraw.remove(api, true); // Clear motion when lineDraw is removed
  64. var zr = api.getZr();
  65. var isSvg = zr.painter.getType() === 'svg';
  66. if (!isSvg) {
  67. zr.painter.getLayer(this._lastZlevel).clear(true);
  68. }
  69. },
  70. dispose: function () {}
  71. });
  72. module.exports = _default;