221 lines
5.2 KiB
JavaScript
221 lines
5.2 KiB
JavaScript
|
||
/*
|
||
* 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 zrUtil = require("zrender/lib/core/util");
|
||
|
||
var ComponentModel = require("../../model/Component");
|
||
|
||
var List = require("../../data/List");
|
||
|
||
var modelUtil = require("../../util/model");
|
||
|
||
/*
|
||
* 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 TimelineModel = ComponentModel.extend({
|
||
type: 'timeline',
|
||
layoutMode: 'box',
|
||
|
||
/**
|
||
* @protected
|
||
*/
|
||
defaultOption: {
|
||
zlevel: 0,
|
||
// 一级层叠
|
||
z: 4,
|
||
// 二级层叠
|
||
show: true,
|
||
axisType: 'time',
|
||
// 模式是时间类型,支持 value, category
|
||
realtime: true,
|
||
left: '20%',
|
||
top: null,
|
||
right: '20%',
|
||
bottom: 0,
|
||
width: null,
|
||
height: 40,
|
||
padding: 5,
|
||
controlPosition: 'left',
|
||
// 'left' 'right' 'top' 'bottom' 'none'
|
||
autoPlay: false,
|
||
rewind: false,
|
||
// 反向播放
|
||
loop: true,
|
||
playInterval: 2000,
|
||
// 播放时间间隔,单位ms
|
||
currentIndex: 0,
|
||
itemStyle: {},
|
||
label: {
|
||
color: '#000'
|
||
},
|
||
data: []
|
||
},
|
||
|
||
/**
|
||
* @override
|
||
*/
|
||
init: function (option, parentModel, ecModel) {
|
||
/**
|
||
* @private
|
||
* @type {module:echarts/data/List}
|
||
*/
|
||
this._data;
|
||
/**
|
||
* @private
|
||
* @type {Array.<string>}
|
||
*/
|
||
|
||
this._names;
|
||
this.mergeDefaultAndTheme(option, ecModel);
|
||
|
||
this._initData();
|
||
},
|
||
|
||
/**
|
||
* @override
|
||
*/
|
||
mergeOption: function (option) {
|
||
TimelineModel.superApply(this, 'mergeOption', arguments);
|
||
|
||
this._initData();
|
||
},
|
||
|
||
/**
|
||
* @param {number} [currentIndex]
|
||
*/
|
||
setCurrentIndex: function (currentIndex) {
|
||
if (currentIndex == null) {
|
||
currentIndex = this.option.currentIndex;
|
||
}
|
||
|
||
var count = this._data.count();
|
||
|
||
if (this.option.loop) {
|
||
currentIndex = (currentIndex % count + count) % count;
|
||
} else {
|
||
currentIndex >= count && (currentIndex = count - 1);
|
||
currentIndex < 0 && (currentIndex = 0);
|
||
}
|
||
|
||
this.option.currentIndex = currentIndex;
|
||
},
|
||
|
||
/**
|
||
* @return {number} currentIndex
|
||
*/
|
||
getCurrentIndex: function () {
|
||
return this.option.currentIndex;
|
||
},
|
||
|
||
/**
|
||
* @return {boolean}
|
||
*/
|
||
isIndexMax: function () {
|
||
return this.getCurrentIndex() >= this._data.count() - 1;
|
||
},
|
||
|
||
/**
|
||
* @param {boolean} state true: play, false: stop
|
||
*/
|
||
setPlayState: function (state) {
|
||
this.option.autoPlay = !!state;
|
||
},
|
||
|
||
/**
|
||
* @return {boolean} true: play, false: stop
|
||
*/
|
||
getPlayState: function () {
|
||
return !!this.option.autoPlay;
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
_initData: function () {
|
||
var thisOption = this.option;
|
||
var dataArr = thisOption.data || [];
|
||
var axisType = thisOption.axisType;
|
||
var names = this._names = [];
|
||
|
||
if (axisType === 'category') {
|
||
var idxArr = [];
|
||
zrUtil.each(dataArr, function (item, index) {
|
||
var value = modelUtil.getDataItemValue(item);
|
||
var newItem;
|
||
|
||
if (zrUtil.isObject(item)) {
|
||
newItem = zrUtil.clone(item);
|
||
newItem.value = index;
|
||
} else {
|
||
newItem = index;
|
||
}
|
||
|
||
idxArr.push(newItem);
|
||
|
||
if (!zrUtil.isString(value) && (value == null || isNaN(value))) {
|
||
value = '';
|
||
}
|
||
|
||
names.push(value + '');
|
||
});
|
||
dataArr = idxArr;
|
||
}
|
||
|
||
var dimType = {
|
||
category: 'ordinal',
|
||
time: 'time'
|
||
}[axisType] || 'number';
|
||
var data = this._data = new List([{
|
||
name: 'value',
|
||
type: dimType
|
||
}], this);
|
||
data.initData(dataArr, names);
|
||
},
|
||
getData: function () {
|
||
return this._data;
|
||
},
|
||
|
||
/**
|
||
* @public
|
||
* @return {Array.<string>} categoreis
|
||
*/
|
||
getCategories: function () {
|
||
if (this.get('axisType') === 'category') {
|
||
return this._names.slice();
|
||
}
|
||
}
|
||
});
|
||
var _default = TimelineModel;
|
||
module.exports = _default; |