var marqueeInterval=new Array();
var marqueeHeight=16;
var marqueeId=0;
var marqueeDelay=2000;
function scrollMarquee() {
document.getElementById("marqueeBox").scrollTop++;
if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){
clearInterval(marqueeInterval[1]);
}
}
function startMarquee(list){
var str=list[marqueeId].title;
marqueeId++;
if(marqueeId>=list.length) marqueeId=0;
if(document.getElementById("marqueeBox").childNodes.length==1) {
var nextLine=document.createElement('DIV');
nextLine.innerHTML=str;
document.getElementById("marqueeBox").appendChild(nextLine);
}
else {
document.getElementById("marqueeBox").childNodes[0].innerHTML=str;
document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);
document.getElementById("marqueeBox").scrollTop=0;
}
clearInterval(marqueeInterval[1]);
marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
function initMarquee(list){
var str=list[0].title;
document.write('<div id="marqueeBox" style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
marqueeId++;
marqueeInterval[0]=setInterval("startMarquee(list)",marqueeDelay);
}
function showAlarmOnScrollBar(){
info.getAlarmList(function(list){
initMarquee(list);
});
}其中showAlarmOnScrollBar()是这个函数的入口,info.getAlarmList()函数是dwr的一个接口回调,获得一个结果集,然后用initMarquee函数处理,将结果集的数据一条条的以上下翻滚的模式实现。但是,在显示了第一条记录之后,fireBug就会报错:
function onmouseover(event) {
clearInterval(marqueeInterval[0]); marqueeInterval is not defined
}
我现在没有多少分了,给不了大家多少分,所以只能请大家帮忙看看,谢谢
这样不行吧,改为
marqueeInterval[0]=setInterval(function(){startMarquee(list)},marqueeDelay);
试试
var marqueeContent=new Array();
var marqueeInterval=new Array();
var marqueeHeight=16;
var marqueeId=0;
var marqueeDelay=2000;
//滚动
function scrollMarquee() {
document.getElementById("marqueeBox").scrollTop++;
if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){
clearInterval(marqueeInterval[1]);
}
}
//开始移动
function startMarquee(){
var str=marqueeContent[marqueeId].title;
marqueeId++;
if(marqueeId>=marqueeContent.length) marqueeId=0;
if(document.getElementById("marqueeBox").childNodes.length==1) {
var nextLine=document.createElement('DIV');
nextLine.innerHTML=str;
document.getElementById("marqueeBox").appendChild(nextLine);
}
else {
document.getElementById("marqueeBox").childNodes[0].innerHTML=str;
document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);
document.getElementById("marqueeBox").scrollTop=0;
}
clearInterval(marqueeInterval[1]);
marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
//这个函数是入口函数。起初没有第一句话,经常报marqueeContent【0】is not defined,后来才知道dwr是异步的,因此加上这句话让他同步,我不知道
//这样好不好,请大家指教。
function initMarquee(){
//让dwr进行同步调用,而不采用异步,否则数据太快,使得marqueeContent无法获得值
dwr.engine.setAsync(false);
marqueeContent= showAlarmOnScrollBar();
var str=marqueeContent[0].title;
document.write('<div id="marqueeBox" style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
marqueeId++;
marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
}
//以下这个类是用来通过回调来获得数据的
function showAlarmOnScrollBar(){
var marqueeContentl=new Array();
info.getAlarmList(function(list){//dwr的客户端实现
for(i=0;i<list.length;i++){
marqueeContentl[i]=list[i]; //将得到的值付给全局变量,其实现在不用这样做了,直接用list就行了,但是已经写成了,那就给大家看吧,不改了
}
});
return marqueeContentl;
}
新的问题是我想让dwr定时更新,于是我在initMarquee中写了代码setTimeout(“initMarquee()”,5000);但是老报错: marqueeInterval is not defined,后来我又新写了一个函数
function callback(){
if(marqueeInterval!=null){
marqueeInterval=new Array();
}
initMarquee();
setTimeout("callback()",5000);
}结果还是不行,还是这个错误,请大家帮帮忙