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

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

        图片轮播:借鉴大神的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() ,会相互影响,理清楚该什么时候打开关闭哪个计时器也就没什么了。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值