Blame view

node_modules/echarts/lib/component/parallel.js 3.81 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
  var echarts = require("../echarts");
  
  var zrUtil = require("zrender/lib/core/util");
  
  var throttleUtil = require("../util/throttle");
  
  var parallelPreprocessor = require("../coord/parallel/parallelPreprocessor");
  
  require("../coord/parallel/parallelCreator");
  
  require("../coord/parallel/ParallelModel");
  
  require("./parallelAxis");
  
  /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
  * regarding copyright ownership.  The ASF licenses this file
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
  */
  var CLICK_THRESHOLD = 5; // > 4
  // Parallel view
  
  echarts.extendComponentView({
    type: 'parallel',
    render: function (parallelModel, ecModel, api) {
      this._model = parallelModel;
      this._api = api;
  
      if (!this._handlers) {
        this._handlers = {};
        zrUtil.each(handlers, function (handler, eventName) {
          api.getZr().on(eventName, this._handlers[eventName] = zrUtil.bind(handler, this));
        }, this);
      }
  
      throttleUtil.createOrUpdate(this, '_throttledDispatchExpand', parallelModel.get('axisExpandRate'), 'fixRate');
    },
    dispose: function (ecModel, api) {
      zrUtil.each(this._handlers, function (handler, eventName) {
        api.getZr().off(eventName, handler);
      });
      this._handlers = null;
    },
  
    /**
     * @param {Object} [opt] If null, cancle the last action triggering for debounce.
     */
    _throttledDispatchExpand: function (opt) {
      this._dispatchExpand(opt);
    },
    _dispatchExpand: function (opt) {
      opt && this._api.dispatchAction(zrUtil.extend({
        type: 'parallelAxisExpand'
      }, opt));
    }
  });
  var handlers = {
    mousedown: function (e) {
      if (checkTrigger(this, 'click')) {
        this._mouseDownPoint = [e.offsetX, e.offsetY];
      }
    },
    mouseup: function (e) {
      var mouseDownPoint = this._mouseDownPoint;
  
      if (checkTrigger(this, 'click') && mouseDownPoint) {
        var point = [e.offsetX, e.offsetY];
        var dist = Math.pow(mouseDownPoint[0] - point[0], 2) + Math.pow(mouseDownPoint[1] - point[1], 2);
  
        if (dist > CLICK_THRESHOLD) {
          return;
        }
  
        var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);
  
        result.behavior !== 'none' && this._dispatchExpand({
          axisExpandWindow: result.axisExpandWindow
        });
      }
  
      this._mouseDownPoint = null;
    },
    mousemove: function (e) {
      // Should do nothing when brushing.
      if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {
        return;
      }
  
      var model = this._model;
      var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);
      var behavior = result.behavior;
      behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));
  
      this._throttledDispatchExpand(behavior === 'none' ? null // Cancle the last trigger, in case that mouse slide out of the area quickly.
      : {
        axisExpandWindow: result.axisExpandWindow,
        // Jumping uses animation, and sliding suppresses animation.
        animation: behavior === 'jump' ? null : false
      });
    }
  };
  
  function checkTrigger(view, triggerOn) {
    var model = view._model;
    return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;
  }
  
  echarts.registerPreprocessor(parallelPreprocessor);