调用接口,请求数据,渲染报警信息。进行无缝滚动时,滚动不生效
请求后台接口的报警数据
1.ajax函数封装
function ajaxget(type,url,data,callback){
$.ajax({
type:type,
url:"http://cloud.byrt.cn/show-sems-web-1.0/a/"+url,
data:data,
async:true,
dataType : "jsonp",
jsonp:'callback',
jsonpCallback:"successCallback",
success : function(res) {
callback(res)
}
});
}
2、ajax函数调用
ajaxget("get","useElectric/getWarningRecordsDataList",{},function(res){
console.log(res)
if(res.code==0){
for(var i=0;i<res.importWarningRecordsList.length;i++){
var impor=`
<li>
<span title="${res.importWarningRecordsList[i].collectTime}">${res.importWarningRecordsList[i].collectTime}</span>
<span title="${res.importWarningRecordsList[i].tagName}">${res.importWarningRecordsList[i].tagName}</span>
<span title="${res.importWarningRecordsList[i].descript}">${res.importWarningRecordsList[i].descript}</span>
<span style="color: #DA372B;">${res.importWarningRecordsList[i].state==1?"严重":"未知"}</span>
</li>
`;
}
$(".alarm-cont .alarm-one").append(impor);
for(var i=0;i<res.commonWarningRecordsList.length;i++){
var common=`
<li>
<span title="${res.commonWarningRecordsList[i].collectTime}">${res.commonWarningRecordsList[i].collectTime}</span>
<span title="${res.commonWarningRecordsList[i].tagName}">${res.commonWarningRecordsList[i].tagName}</span>
<span title="${res.commonWarningRecordsList[i].descript}">${res.commonWarningRecordsList[i].descript}</span>
<span style="color: #FFB421;">${res.commonWarningRecordsList[i].state==2?"一般":"未知"}</span>
</li>
`;
$(".alarm-cont2 .alarm-one").append(common);
}
}else{
return;
}
})
公共的public函数中进行无缝滚动
//设备告警信息自动轮播函数
function lunBo($cont){
var speed = 60
var $ul=$cont.find('ul:first');
var $ul2=$cont.find('ul:last');
if($ul.height()<=$cont.height() ){
return;
}else{
$ul2.html($ul.html()) ;
function Marquee() {
if ($ul2[0].offsetTop - $cont[0].scrollTop <= 0) {
$cont[0].scrollTop -= $ul[0].scrollTop
}else {
$cont[0].scrollTop++
if($cont[0].scrollTop>=$cont[0].scrollHeight-$cont[0].clientHeight)
$cont[0].scrollTop=0
}
}
var MyMar = setInterval(Marquee, speed)
$cont.mouseover(()=>clearInterval(MyMar));
$cont.mouseout(()=>{
MyMar = setInterval(Marquee, speed)
});
}
}
window.onload函数中调用lunBo()函数
此种写法会有bug,请求接口,加载数据会有一定的反应时间。
window.onload之后调用轮播函数,数据还没有请求出来并渲染到页面,所以存放数据的ul一定会为0,为0之后会走轮播函数的if ($ul2[0].offsetTop - $cont[0].scrollTop <= 0) {这步 ,导致数据渲染完成了,数据也不滚动
应该在ajax数据请求成功后调用轮播函数,即$(".alarm-cont2 .alarm-one").append(common);这句话之后调用lunBo()。无缝滚动效果就正常了
记录下 自己愚蠢的一次bug!!!!!