jquery模拟股票信息实时显示


import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;

/**
* 返回股票当前信息的servlet
*/
public class GetStocksInfo extends HttpServlet{
//保存股票对象的map
private HashMap<String,Stock> stocks;
public void init() throws ServletException {
stocks = new HashMap<String,Stock>();
//创建股票
Stock szzs = new Stock(3000.0,2990.1,"上证指数","300001");
Stock pufy = new Stock(23.22,23.50,"浦发银行","000001");

//将两只股票保存到stocks的map中
stocks.put(szzs.getId(),szzs);
stocks.put(pufy.getId(),pufy);

System.out.println(stocks);

}

protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
//返回两只股票的价格信息

//1 计算随机数
double sz = Math.random() * 20;
double pf = Math.random() * 0.5;

//通过随机数是奇偶,判断股票涨跌
boolean flagsz = ((int)(Math.random()*10))/2 == 0;
boolean flagpf = ((int)(Math.random()*10))/2 == 0;


//2 将随机数和股票的当前价格进行加或减的操作,得到新的当前价格
Stock szzs = stocks.get("300001");
Stock pfyh = stocks.get("000001");
double temp;
if(flagsz){
temp = szzs.getNow()+sz;
}else{
temp = szzs.getNow()-sz;
}
//需要对新的当前价格截取,只保留小数点后两位
temp = (int)(temp*100)/100.0;
szzs.setNow(temp);
if(flagpf){
temp = pfyh.getNow()+pf;
}else{
temp = pfyh.getNow()-pf;
}
temp = (int)(temp*100)/100.0;
pfyh.setNow(temp);

httpServletResponse.setContentType("text/html;charset=gb2312");
PrintWriter out = httpServletResponse.getWriter();
//out.println(szzs + "<br/>" + pfyh);
//3 返回两只股票的昨天收盘,今天开盘和当前价格
//采用json的数据格式返货股票的信息
StringBuilder builder = new StringBuilder();
//采用数组的方式回传两个股票的信息
/*
builder.append("[{name:\"").append(szzs.getName()).append("\",id:\"").append(szzs.getId())
.append("\",yes:").append(szzs.getYesterday()).append(",tod:").append(szzs.getToday())
.append(",now:").append(szzs.getNow())
.append("},")
.append("{name:\"").append(pfyh.getName()).append("\",id:\"").append(pfyh.getId())
.append("\",yes:").append(pfyh.getYesterday()).append(",tod:").append(pfyh.getToday())
.append(",now:").append(pfyh.getNow())
.append("}]");
*/
//采用对象的方式回传两个股票对象
//如果回传表示对象的json,需要在最外层加上括号,否则页面解析出错
//如果将out.println 改为out.print 不让其在服务端输出/r/n也可
builder.append("({\"")
.append(szzs.getId()).append("\":{name:\"").append(szzs.getName()).append("\",yes:")
.append(szzs.getYesterday()).append(",tod:")
.append(szzs.getToday()).append(",now:").append(szzs.getNow())
.append("},\"").append(pfyh.getId()).append("\":{name:\"").append(pfyh.getName()).append("\",yes:")
.append(pfyh.getYesterday()).append(",tod:")
.append(pfyh.getToday()).append(",now:").append(pfyh.getNow())
.append("}")
.append("})");
out.println(builder);

}

protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
doGet(httpServletRequest, httpServletResponse);
}
}

/**
* 用于保存股票的基本信息
*/
public class Stock {
/**
* 昨天的收盘价
*/
private double yesterday;
/**
* 今天的开盘价
*/
private double today;
/**
* 当前价
*/
private double now;
/**
* 股票名称
*/
private String name;
/**
* 股票代码
*/
private String id;

public Stock(double yesterday, double today, String name, String id) {
this.yesterday = yesterday;
this.today = today;
this.name = name;
this.id = id;
this.now = today;
}

public double getYesterday() {
return yesterday;
}

public void setYesterday(double yesterday) {
this.yesterday = yesterday;
}

public double getToday() {
return today;
}

public void setToday(double today) {
this.today = today;
}

public double getNow() {
return now;
}

public void setNow(double now) {
this.now = now;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
public String toString(){
return this.name+":"+this.now;
}
}



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>JQuery示例:动态股票信息</title>
<script type="text/javascript" src="jslib/jquery.js"></script>
<script type="text/javascript" src="jslib/jquerystock.js"></script>
</head>
<body>
<div id="300001"><a href="#">上证指数:</a><span></span></div>
<div id="000001"><a href="#">浦发银行:</a><span></span></div>
<div id="stock">
<div id="yes">昨收:<span></span></div>
<div id="tod">今开:<span></span></div>
<div id="now">当前:<span></span></div>
</div>
</body>
</html>


//期望进入页面后就开始从服务器获取数据,然后显示股票价格
//保存服务器端返回的股票对象
var obj;
var sid;
$(document).ready(function(){
//页面载入时隐藏弹出框
var stockNode = $("#stock").css("border","1px solid black").width("150px")
.css("position","absolute").css("z-index","99").css("background-color","blue")
.css("color","yellow");
stockNode.hide();
var as = $("a");
//定义鼠标进入股票名称时的操作
as.mouseover(function(event){
//获取当前股票的代码
var aNode = $(this);
var divNode = aNode.parent();
sid = divNode.attr("id");
//找到对应的股票对象
updatediv();
//需要控制弹出框的位置
/*
//1 找到当前连接的位置
var offset = aNode.offset();
//2 设置弹出框的位置
stockNode.css("left",offset.left + "px").css("top",offset.top + aNode.height() + "px");
*/
//期望出现在鼠标的右下方
var myEvent = event||window.event;
stockNode.css("left",myEvent.clientX+ 5 + "px").css("top",myEvent.clientY + 5 + "px");

//弹出框显示
stockNode.show();
});
//定义鼠标离开股票名称时的操作
as.mouseout(function(event){
//弹出框隐藏
stockNode.hide();
});
getInfo();
//3 每隔一秒中和服务器交互一次,用户不用刷新也可以不断看到股票的新信息
setInterval(getInfo,1000)

});
//从服务器获取数据的方法
function getInfo(){
//1 向服务器发起请求,获取数据
$.get("GetStockInfo",null,function(data){
//2 接收并解析数据
//obj = eval(data);
obj=data;
//2.1 获取两只股票的当前指数
var szzs = obj["300001"];//obj.s300001
var pfyh = obj["000001"];
/*
* 遍历一个js对象
* for(var stockid in obj){
* var stock = obj[stockid];
* }
* */
//2.2 找到页面中对应的节点,然后填充最新的股票价格
var span3 = $("#300001").children("span").html(szzs.now);
if(szzs.now>szzs.yes){
//当前价格大于昨天收盘,则显示红色
span3.css("color","red")
}else{
span3.css("color","green")
}
var span1 = $("#000001").children("span").html(pfyh.now);
if(pfyh.now>pfyh.yes){
//当前价格大于昨天收盘,则显示红色
span1.css("color","red")
}else{
span1.css("color","green")
}
updatediv();
},"json")
}
//更新弹出框中的内容
function updatediv(){
var stockobj = obj[sid];
for(var proname in stockobj){
if(proname != "name"){
//找到对应的弹出框中的div节点,然后找到span字节点,将数据填充
$("#" + proname).children("span").html(stockobj[proname]);
}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值