2019-6-17 seo達(dá)人
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里
最近遇到一個(gè)作業(yè),要求使用 Echarts 散點(diǎn)圖,本來這個(gè)圖是很容易的,官網(wǎng)上也有很多的教程。但是如果可以動(dòng)態(tài)的更新 Echarts 散點(diǎn)圖就更好了。我本身對(duì) js 不感興趣,經(jīng)過不停的查找資料最終實(shí)現(xiàn)了這一功能。
我的項(xiàng)目是 Servlet + jsp + Echarts。先從 Servlet 入手,我們的項(xiàng)目需要傳遞的數(shù)值是 x 坐標(biāo)和 y 坐標(biāo)。我首先寫了一個(gè) JavaBean
julie.java
package JavaBean;
public class julei {
public julei(double x, double y) {
this.x = x;
this.y = y;
}
double x;
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
double y;
@Override
public String toString() {
return "[" + this.x + "," + this.y + "]";
}
}
Servlet中的代碼,因?yàn)槭褂玫氖?json 來傳遞的數(shù)據(jù),所以 json 相關(guān)的包還是少不了的。
BackServlet
package Servlet;
import JavaBean.Readtxt;
import JavaBean.julei;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@javax.servlet.annotation.WebServlet("/BackServlet")
public class BackServlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
List<julei> list = new ArrayList<>();
try {
list = Readtxt.out();//這是我們項(xiàng)目中的一個(gè)類,不重要。
}catch (Exception e)
{
System.out.println(e.toString());
}
JSONArray jsonArray = new JSONArray(list);
System.out.println(jsonArray.toString());
//最重要的就是這一句,將數(shù)據(jù)發(fā)送給誰來申請(qǐng)的位置
response.getWriter().write(jsonArray.toString());
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
}
好了,現(xiàn)在到了最重要的前端方面了。
index.jsp
正常聲明散點(diǎn)圖,只要把data聲明為空就好。
var myChart = echarts.init(document.getElementById('man'));
var option = {
title : {
text: '死亡分布圖',
},
xAxis: {axisTick: {//決定是否顯示坐標(biāo)刻度
alignWithLabel: true,
show:true
},},
yAxis: {},
series: [{
symbolSize: 20,
data: [],
type: 'scatter'
}]
};
myChart.setOption(option);
數(shù)據(jù)接收部分:
var num = [];
var gao = new Array();
$.ajax({
type : "post",
async : true, //異步請(qǐng)求(同步請(qǐng)求將會(huì)鎖住瀏覽器,其他操作須等請(qǐng)求完成才可執(zhí)行)
url : "BackServlet", //請(qǐng)求發(fā)送到TestServlet
data : {},
dataType : "json", //返回?cái)?shù)據(jù)形式為json
//7.請(qǐng)求成功后接收數(shù)據(jù)name+num兩組數(shù)據(jù)
success : function(result) {
//result為服務(wù)器返回的json對(duì)象
if (result) {
//8.取出數(shù)據(jù)存入數(shù)組
for (var i = 0; i < result.length; i++) {
gao.push([result[i].x,result[i].y]);//這一句很重要,它將數(shù)據(jù)轉(zhuǎn)化為了正確的格式。
}
myChart.hideLoading(); //隱藏加載動(dòng)畫
//9.覆蓋操作-根據(jù)數(shù)據(jù)加載數(shù)據(jù)圖表
myChart.setOption({
series : [ {
// 根據(jù)名字對(duì)應(yīng)到相應(yīng)的數(shù)據(jù)
data : gao//在這里對(duì)data進(jìn)行賦值。
} ]
});
}
},
error : function(errorMsg) {
//請(qǐng)求失敗時(shí)執(zhí)行該函數(shù)
alert("圖表請(qǐng)求數(shù)據(jù)失敗!");
myChart.hideLoading();
}
})
完畢
我把整個(gè)jsp都放上來了,但是里面的 css 還有 js 就不放了,重點(diǎn)是傳數(shù)據(jù)的那一部分。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>LOL數(shù)據(jù)分析</title>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src='js/echarts.js'></script>
<link rel="stylesheet" href="css/jquery.fullPage.css">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" >
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://code.highcharts.com.cn/highcharts/highcharts.js"></script>
<script src="https://code.highcharts.com.cn/highcharts/modules/exporting.js"></script>
<script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
</head>
<body>
<div class="bgcolor">
<div style="z-index:100;" id="dowebok">
<!--第一屏-->
<div class="section">
<div class="ly-box01">
<img class="ly-img01" src="img/logol.png" style="width:100%;height:100%">
</div>
</div>
<!--第三屏-->
<div class="section">
<div class="timeline"></div>
<div class="timepoint21"></div>
<div class="ly-box11">
<div id="man" style=" width: 600px;height: 500px;"></div>
<script type="text/javascript">
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var value=[];
$.ajaxSettings.async=false;
var myChart = echarts.init(document.getElementById('man'));
var option = {
title : {
text: '死亡分布圖',
},
xAxis: {axisTick: {//決定是否顯示坐標(biāo)刻度
alignWithLabel: true,
show:true
},},
yAxis: {},
series: [{
symbolSize: 20,
data: [],
type: 'scatter'
}]
};
myChart.setOption(option);
var num = [];
var gao = new Array(4);
$.ajax({
type : "post",
async : true, //異步請(qǐng)求(同步請(qǐng)求將會(huì)鎖住瀏覽器,其他操作須等請(qǐng)求完成才可執(zhí)行)
url : "BackServlet", //請(qǐng)求發(fā)送到TestServlet
data : {},
dataType : "json", //返回?cái)?shù)據(jù)形式為json
//7.請(qǐng)求成功后接收數(shù)據(jù)name+num兩組數(shù)據(jù)
success : function(result) {
//result為服務(wù)器返回的json對(duì)象
if (result) {
//8.取出數(shù)據(jù)存入數(shù)組
for (var i = 0; i < result.length; i++) {
gao.push([result[i].x,result[i].y]);
}
// document.write(gao);
myChart.hideLoading(); //隱藏加載動(dòng)畫
//9.覆蓋操作-根據(jù)數(shù)據(jù)加載數(shù)據(jù)圖表
myChart.setOption({
series : [ {
// 根據(jù)名字對(duì)應(yīng)到相應(yīng)的數(shù)據(jù)
data : gao
} ]
});
}
},
error : function(errorMsg) {
//請(qǐng)求失敗時(shí)執(zhí)行該函數(shù)
alert("圖表請(qǐng)求數(shù)據(jù)失敗!");
myChart.hideLoading();
}
})
</script>
</div>
<div class="ly-triangle21"></div>
</div>
<!--試驗(yàn)-->
<ul class="bg-bubbles">
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
<li><img src="img/logol.png" style="width:100%;height:100%"></li>
</ul>
</div>
<audio src="music/1.mp3" autoplay="autoplay" loop="loop" />
<script src="js/jquery-1.8.3.min.js"></script>
<script src="js/jquery.fullPage.min.js"></script>
<script src="js/diy.js"></script>
</body>
</html>
藍(lán)藍(lán)設(shè)計(jì)( m.820esy.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
藍(lán)藍(lán)設(shè)計(jì)的小編 http://m.820esy.cn