图片轮播+无闪动实时刷新

    xiaoxiao2025-04-25  10

          之前做的一个项目中,需要实现在同一区域根据后台不同的需求,播放图片轮播后者视频,并且要实现模式转换的实时性,加载的图片和视频资源也要根据数据库实时更新。基本分为三部分:图片轮播的实现,视频的播放,资源和模式的实时更新。

            图片轮播:借鉴大神的js实现图片轮播功能,效果如下:具体代码参见原生js实现图片轮播

            

            这里遇到的问题是,项目中同一个界面其实加载了两个图片轮播的模块,一个显示另个隐藏,两个计时器不能同时计时,一个setInterval(),另一个必须clearInterval(),否则播放顺序会混乱。

             视频播放:这个很简单,利用<video>、<object>、<embed>标签就可以实现,具体可见视频,效果:

             

            还有就是实时更新的问题,当后台添加不同的资源,转换不同的模式时,界面显示要在不闪动的情况下实时刷新某个<div>标签下的内容。也是利用setInterval()和js实现的,了解setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。具体代码:

            加载资源:

    <span style="font-size:18px;">function startPictureRequest() { $.ajax({ type: "POST", dataType: "Json", url: "ashx/picture.ashx?IP=<%=ip%>", success: function (msg) { var picInfo = msg.str1.toString() + msg.str2.toString() + msg.str3.toString(); var picInfoShow = $("#txtStrAll").val(); //数据库中的数据与界面上显示的不同则重新加载 if (picInfo != picInfoShow) { document.getElementById('txtStrAll').value = picInfo; $(".count").empty(); $("#wwr1").empty(); $(".count").append(msg.str2.toString()); $("#wwr1").append(msg.str3.toString() + msg.str1.toString() + "</ul>"); clearInterval(play); picture(); } }, error: function (errorThrown) { alert("展示有错误,请联系管理员!"); } });</span>         利用setInterval(),每个几秒刷新资源和模式,加载到<div>下,如果资源和模式没有变化则不变化:

    <span style="font-size:18px;">$(document).ready(function () { setInterval("changeModel()", 3000); }); function changeModel() { $.ajax({ type: "post", url: "ashx/changeModel.ashx?IP=<%=ip%>", dataType: "Json", success: function (msg) { var modelDivID = msg.modelID.toString(); var changeMode = $("#txtchangeMode").val(); //图片轮播模式 if (modelDivID == "SM") { startPictureModeRequest(); } //综合模式 if (modelDivID == "CM") { startPictureRequest(); } if (changeMode != modelDivID) { //将当前模式保存在界面上 document.getElementById('txtchangeMode').value = modelDivID; //班级风采模式 if (modelDivID == "SM") { //先把自己的计时器关闭 clearInterval(playMode); pictureMode(); $("#SM").css({ "display": "" }); $("#CM").css({ "display": "none" }); $("#EM").css({ "display": "none" }); } //综合模式 if (modelDivID == "CM") { clearInterval(play); picture(); $("#CM").css({ "display": "" }); $("#SM").css({ "display": "none" }); $("#EM").css({ "display": "none" }); //先把自己的计时器关闭 } //考试模式 if (modelDivID == "EM") { $("#EM").css({ "display": "" }); $("#CM").css({ "display": "none" }); $("#SM").css({ "display": "none" }); } } } });</span>         其实基本逻辑不能,过程中主要问题就是这里存在多个setInterval() ,会相互影响,理清楚该什么时候打开关闭哪个计时器也就没什么了。

    转载请注明原文地址: https://ju.6miu.com/read-1298444.html
    最新回复(0)