zoukankan      html  css  js  c++  java
  • 定时向后台发送请求获取中奖信息,并且当中奖信息超过5条的时候开始滚动

    这个需要注意的是:

      无论你怎么使用setInterval(),一定要注意【设表先关】,先clearInterval()

      【否则】会产生的问题是:你的动画是越来越快,也就是setInterval嵌套使用时,内部的会越来越快,但是当先clearInterval之后这个问题就可以得到解决

    1、如何定时向后台发送请求?setInterval();

    // 使用setInterval定时器向后台发送请求时,一定要先清除定时器,然后再设置
    clearInterval(outerTimer);
    outerTimer = setInterval(getFromRD,60000);
    

     

    2、getFromRD代码

    // 每隔一段时间向后台发一次请求
    var getFromRD= function() {
        var htmlStr = '';
        $.ajax({
            type:'get',
            url:'json/prizeList.json',
            dataType:'json', //注意因为这里使用的是测试数据prizeList.json,所以是json;换成线上url之后就要使用jsonp了
            success:function (data) {
                if(data.state < 0) {
                    console.log('系统异常');
                    return;
                }else {
                    var data = data.data;
                    var dataPrizeList = data.prizeList;
                    // 一二三等奖区
                    if (!!data.firstPrize) {
                        $(".firstprize").html(data.firstPrize.userName || '虚位以待');
                    }
                    if(!!data.secondPrize) {
                        $(".secondprize").html(data.secondPrize.userName || '虚位以待');
                    }
                    if(!!data.thirdPrize) {
                        $(".thirdprize").html(data.thirdPrize.userName || '虚位以待');
                    }
    
                    // 中奖展示区
                    for(var i=0; i<dataPrizeList.length; i++) {
                        htmlStr += '<li>'+
                                    '<span>'+dataPrizeList[i].userName+'</span>'+
                                    '<span>抽中了</span>'+
                                    '<span>'+dataPrizeList[i].prizeName+'</span>'+
                                '</li>';
                    }
    
                    $(".roll ul").html(htmlStr);
    
                    prizeListRoll(); // 调用滚动动画
                }
            },
            error:function (err) {
                console.log(err)
            }
        });
    }
    

    3、滚动动画函数 prizeListRoll

    // prizeListRoll
    
    // 两个接收定时器的变量
    var outerTimer, 
        innerTimer;
    
    // 中奖列表滚动动画
    var prizeListRoll = function () {
        // 中奖盒子
        var $roll = $(".roll");
        // 要滚动的盒子
        var $rollUl = $(".roll ul");
        var nowTop = 0;
        // 有几条中奖信息
        var liLength = $roll.find("li").length;
        // 每条中奖展示信息的高度
        var liHeight = $roll.find("li").outerHeight();
        // 所有中奖展示信息的高度
        var allLiHeight = parseInt(liHeight*liLength);
        // 滚动的速度
        var rollSpeed = 90;
        var timer;
    
        // 当中奖信息>=5时开始滚动
        if (liLength>=5) {
            // 拷贝所有的中奖信息li并追加到最后ul
            $rollUl.find('li').clone().appendTo($rollUl);
            // 滚动动画
            var listRoll = function () {
                nowTop -= 1;
                if (nowTop <= -allLiHeight) {
                    nowTop = 0;
                }
                $rollUl.css("top",nowTop);
            }
            clearInterval(innerTimer);
            innerTimer = setInterval(listRoll,rollSpeed);
        }
    
        // 鼠标移动/离开盒子时的动画
        $roll.mouseenter(function () {
            clearInterval(innerTimer);
        }).mouseleave(function () {
            clearInterval(innerTimer);
            innerTimer = setInterval(listRoll,rollSpeed);
        });
    }
    

      

  • 相关阅读:
    实验楼之Linux快捷、用户及文件权限、文件查看
    《生物信息学》——李霞;;生信概念
    MySQL 之 导出导入数据
    MySQL 之 扩展例子
    MySQL之创、增、删、改、查
    R 中数据导入
    神经网络,25个术语
    Python之文件输入输出,
    爬虫之BeautifulSoup, CSS
    Linux软连接和硬链接
  • 原文地址:https://www.cnblogs.com/carriezhao/p/7988351.html
Copyright © 2011-2022 走看看