最近有个客户提出这样一个需求,由于该公司是一个仪表公司,要求能够在web上实时显示 仪表的状态,主要是一个仪表盘,实时的更新其刻度。由于要实时,所以必须设置定时器,采用ajax获取数据库的读数,然后实时在仪表盘上显示出来。
初步考虑是用flash来显示仪表盘,每一帧对应仪表的每个刻度,因为flash是在网页加载的时候就一次加载进来了,这样我只需要根据数据库的读数,用js控制flash的frame就可以了,这样做的好处是无刷新效果。下面贴出在往网上找到的js控制flash的主要函数:
控制 Flash Player 的 JavaScript :
播放动画:Play()
例:(网页中的 Flash id).Play();
停止动画:StopPlay()
动画是否正在播放:IsPlaying()
跳转到某帧:GotoFrame(frame_number)
获取动画总帧数:TotalFrames()
回传当前动画所在帧数:CurrentFrame()
使动画返回第一帧:Rewind()
放大指定区域:SetZoomRect(left,top,right,buttom)
改变动画大小:Zoom(percent)
使动画在 x,y 方向上平移:Pan(x_position,y_position,unit)
返回动画被载入的百分比:PercentLoaded()
加载动画:LoadMovie(level_number,path)
例:(网页中的 Flash id).LoadMovie(0, "***/***.swf");
movie_clip 跳转到指定帧数:TGotoFrame(movie_clip,frame_number)
例:(网页中的 Flash id).TGotoFrame("_root.实例名.次实例名",帧数);
movie_clip 跳转到指定标签:TGotoLabel(movie_clip,label_name)
例:(网页中的 Flash id).TGotoLabel("_root.实例名.次实例名","标签名");
回传 movie_clip 当前帧:TCurrentFrame(movie_clip)
回传 movie_clip 当前标签:TCurrentLabel(movie_clip)
播放 movie_clip:TPlay(movie_clip)
停止 movie_clip 的播放:TStopPlay(movie_clip)
获取变量:GetVariable(variable_name)
变量赋值:SetVariable(variable_name,value)
call 指定帧上的 action:TCallFrame(movie_clip,frame_number)
call 指定标签上的 action:TCallLabel(movie_clip,label)
获取 movie_clip 的指定属性:TGetProperty(movie_clip,property)
设置 movie_clip 的指定属性:TSetProperty(movie_clip,property,number)
实现代码大概是这样的:
aspx文件:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="swfobject.js"></script>
<script language="javascript" type="text/javascript">
function GetTime()
{
var i = Default2.GetTime().value;//ajax获取数据库内容,用以改变flash
var vrt=document.getElementById("txt");
vrt.value=i;
document.getElementById("mFlash").gotoframe(i);//转到指定帧
}
</script>
</head>
<body onload="setInterval(’GetTime()’,1000);"><!--一秒执行该函数一次-->
<form runat="server" id="form1">
<input type="text" id="txt" />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="mFlash" WIDTH="300" HEIGHT="150">
<param name="quality" value="high"/>
<param name="movie" value="ww.swf"/>
</object>
</form>
</body>
</html>
cs文件
public partial class Default2 : System.Web.UI.Page [Page]
{
public string conn = ConfigurationManager.ConnectionStrings["fdcwhConnectionString4"].ToString();
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(Default2));
}
[Ajax.AjaxMethod()]
public int GetTime()
{
//return DateTime.Now.ToString();
SqlConnection sqlcon = new SqlConnection(conn);
sqlcon.Open();
Random randObj = new Random();
int start = 1;//随机数可取该下界值
int end = 10;//随机数不能取该上界值
int randomid = randObj.Next(1, 100);
SqlCommand sqlcmd = new SqlCommand("select id from clockid where id= ’"+randomid+"’", sqlcon);
int i = Convert.ToInt32(sqlcmd.ExecuteScalar());
return i;
sqlcon.Close();
}
}
ps:用到了ajax.dll文件,因此在web.config中在<httpHandlers></httpHandlers>要加上 <add verb="POST,GET" path="Ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
