echart应用--弹簧模型

目的描述

在echart官网上有一个3D折线图实例,如下图
echart3D折线图实例
代码如下:

var data = [];
// Parametric curve
for (var t = 0; t < 25; t += 0.005) {
    var x = (1 + 0.25 * Math.cos(75 * t)) * Math.cos(t);
    var y = (1 + 0.25 * Math.cos(75 * t)) * Math.sin(t);
    var z = t + 2.0 * Math.sin(75 * t);
    data.push([x, y, z]);
}
console.log(data.length);

option = {
    tooltip: {},
    backgroundColor: '#fff',
    visualMap: {
        show: false,
        dimension: 2,
        min: 0,
        max: 30,
        inRange: {
            color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
        }
    },
    xAxis3D: {
        type: 'value'
    },
    yAxis3D: {
        type: 'value'
    },
    zAxis3D: {
        type: 'value'
    },
    grid3D: {
        viewControl: {
            projection: 'orthographic'
        }
    },
    series: [{
        type: 'line3D',
        data: data,
        lineStyle: {
            width: 4
        }
    }]
};

现在我们想把这个3D折线图由纵向改造为横向,并且可以像弹簧一样伸缩

改造思路

1.3D图由纵向改为横向
改变for循环里data.push[ ]的传入参数的的位置可把3D折线图由纵向改为横向
2.使用定时器改变控制横向长度变量
在这里把整个echart案例代码都放入定时器中,设置定时器时间为50ms。所以代码就是50ms执行一次,那么x,y,z三个变量也会50ms向data.push[ ]里传入一次,所以在定时器函数结尾要把data置空,否则会导致每次执行定时器代码的时候加上前面的值,那么显示的就不是弹簧效果了。

完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>ECharts</title>
		<!-- 引入 echarts.js -->
		<script src="js/echarts.js"></script>
		<script src="js/echarts-gl.js"></script>
	</head>
	<body>
		<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
		<div id="main" style="width:100%;height:400px;"></div>
		<script type="text/javascript">
			// 基于准备好的dom,初始化echarts实例
			var myChart = echarts.init(document.getElementById('main'));
			var data = [];
			var a =3;
			var timer=setInterval(function() {
				if (a<=3) {
					a = a + 0.5;
				} else{
					a=a-0.5;
				}
				for(var t = 0; t < 25; t += 0.0009) {
					var x = (1 + 0.25 * Math.cos(75 * t)) * Math.cos(t);
					var y = (1 + 0.25 * Math.cos(75 * t)) * Math.sin(t);
					var z = a * t + 2 * Math.sin(75 * t);
					data.push([x, z, y]);
				}
				option = {
					tooltip: {},
					backgroundColor: '#fff',
					visualMap: {
						show: false,
						dimension:1,
						min: 0,
						max: 30,
						inRange: {
							color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
						}
					},
					xAxis3D: {
						type: 'value'
					},
					yAxis3D: {
						type: 'value',
						max: 30
					},
					zAxis3D: {
						type: 'value'
					},
					grid3D: {
						viewControl: {
							projection: 'orthographic'
						}
					},
					series: [{
						type: 'line3D',
						data: data,
						animation: true,
						animationDurationUpdate: 500,
						lineStyle: {
							width: 4
						}
					}]
				};
				// 使用刚指定的配置项和数据显示图表。
				myChart.setOption(option);
				data = [];
			}, 50);
		</script>
	</body>
</html>

效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值