home.js 8.46 KB

var baseURL = 'http://dsc-b.vchangyi.com/party/phpapi';

let showData = [];
let action ={
    // 初始化,参数:文字展示次数
    init: (fontRunTime, showModel)=>{
        // 页面激活,重新加载页面
        document.addEventListener('visibilitychange', function() { 
            var isHidden = document.hidden; 
            if (!isHidden) { 
              location.reload();
            }
        });          
        if (showModel == 1) {
            baseRquest.get('/apicp.GetUserList.php', {}, data =>{
                console.log(data);
                if (data.length == 0) {
                    alert('暂无用户');
                    return;
                }
                // 绑定数据到页面
                let dataLength = data.length;
                let i = 0;
                while (showData.length <144) {
                    showData.push(data[i]);
                    i++;
                    if (i == dataLength) {
                        i = 0;
                    }
                }
                showData.sort(function(a, b) {
                    return Math.random()>.5 ? -1 : 1;
                });
                console.log(showData);
                dataListBind('users-bind', 'user-item', showData);
                action.fontRunTime = fontRunTime;
                // showtime 
                action.fontChange();
                
            });
        } else {
            let allUser = [];
            Object.keys(userData).forEach(function(key){
                allUser.push(userData[key]);
            })
            let dataLength = allUser.length;
            let i = 0;
            while (showData.length <144) {
                showData.push(allUser[i]);
                i++;
                if (i == dataLength) {
                    i = 0;
                }
            }
            showData.sort(function(a, b) {
                return Math.random()>.5 ? -1 : 1;
            });
            console.log(showData);
            dataListBind('users-bind', 'user-item', showData);
            action.fontRunTime = fontRunTime;
            // showtime 
            action.fontChange();
        }
    },
    fontRunTime: 0,
    // 第一段动画,动态文字拼接
    fontChange: ()=>{
        console.log(new Date());
        let count = $('#users .img-opacity').length;
        let fontKey = [
            [36,37,38,39,51,67,83,100,101,102,103,42,46,59,61,76,92,108],
            [19,20,21,22,23,35,51,67,68,69,70,71,87,103,119,118,117,116,115,74,89,90,91,106,122,123,61,77,93,109,125,94,95,111,127]
        ];
        let change = function(i, fontIndex){
            // console.log(fontIndex);
            let hideTimeOut = setTimeout(() => {
                if (fontIndex.indexOf(i) < 0) {
                    $('#users .img-opacity').eq(i).css('background-color','#000').fadeIn();
                } else {
                    $('#users .img-opacity').eq(i).css('background-color','rgb(40,117,232)').fadeIn();
                }
                clearTimeout(hideTimeOut);    
            }, 500);
        }
        let j = 0;
        let fontRunTime = action.fontRunTime;
        let show = ()=>{
            let i = 0;
            let fontIndex = fontKey[j];
            let intervalUse = setInterval(() => {
                $('#users .img-opacity').eq(i).fadeOut(200  , change(i,fontIndex));
                i++;
                if (count == i) {
                    clearInterval(intervalUse);
                }
            }, 10);
            j++;
            if (fontKey.length == j) {
                j = 0;
                fontRunTime--;
            }
            if (fontRunTime == 0) {
                clearInterval(interval);
                fontRunTime = action.fontRunTime;
                action.showLogo();
            }
            return show;
        }
        let interval = setInterval(show(), 20000);

    },
    // 第二段动画,展示logo
    showLogo: ()=>{
        // 20s后开始
        let interval = setInterval(()=>{
            let i = 0;
            let count = $('#users .img-opacity').length;
            // 展示需要65s
            let intervalUse = setInterval(() => {
                $('#users .img-opacity').eq(i).fadeOut(300);
                i++;
                if (count == i) {
                    clearInterval(intervalUse);
                }
            }, 500);
            // logo展示延迟135秒
            let intervalLogo = setInterval(() => {
                $('#users .img-opacity').css('background-color','#000').fadeIn(2000);
                $('.logo').fadeIn(2000);
                clearInterval(intervalLogo);
                action.reset();
            },74000);
            clearInterval(interval);
        }, 20000);
    },
    // 重置动画
    reset: ()=>{
        let interval = setTimeout(()=>{
            location.reload();
        },60000);
    }
}
// 山寨dom数据列表绑定控件,没有实现事件callback
// 要求设置容器名称z-for-container,设置循环列数据模板z-for-item
// 参数1:容器名称,存放列表数据的容器 2:设置的数据模板 3:json数据
let dataListBind = (container, itemName, data)=>{
    let trs = '';
    // 获取模板
    $('*[z-for-item="'+ itemName +'"]').show();
    let trTemplate = $('*[z-for-item="'+ itemName +'"]').prop("outerHTML");
    $('*[z-for-item="'+ itemName +'"]').hide();
    let trTemplateHide = $('*[z-for-item="'+ itemName +'"]').prop("outerHTML");
    for(let i = 0; data.length > i; i++) {
        // 创建一行dom
        let tr = trTemplate;
        // 模板需要赋值项
        let forDataItem = $(tr).find("*[z-for-data]");
        for(let j = 0; forDataItem.length > j; j++) {
            let item = $(forDataItem).eq(j).prop("outerHTML");
            // 获取dom标签绑定的映射名称
            let column = $(forDataItem).eq(j).attr("z-for-data");
            let tagName = $(forDataItem)[j].tagName.toLowerCase();
            // 列表中的img和input支持直接赋值,其他标签赋值到标签中间
            if (tagName == 'img') {
                $(forDataItem).eq(j).attr('src', data[i][column]);
            } else if (tagName == 'input') {
                $(forDataItem).eq(j).val(data[i][column]);
            } else {
                $(forDataItem).eq(j).html(data[i][column]);
            }
            tr = tr.replace(item,$(forDataItem).eq(j).prop("outerHTML"));
        }
        trs += $(tr).removeAttr('z-for-item').prop("outerHTML");
    }
    $('*[z-for-container="'+ container +'"]').html(trTemplateHide + trs);
}

// api接口数据请求,数据交互引用的axios
let baseRquest = {
    // get请求
    get: function(url, params, callback) {
        let token = localStorage["token"];
        axios.defaults.baseURL = baseURL;
        axios.get(url, {
            params : params,
            headers: { 
                'Content-Type': 'application/x-www-form-urlencoded',
                 token: token
                }
        }).then(function (response) {
            if (response.status == 200)
            {
                data = response.data;
                if (!!data) {
                    // 过滤错误信息,统一抛出
                    if (data.errcode != 0 && data.errcode != 200) {
                        alert(data.errmsg);
                    } else {
                        callback(data.result);
                    }
                }
            }else {
                alert('get无法访问接口');
            }
            })
            .catch(function (error) {
            });
    },

     // post请求
     post: function(url, params, callback) {
        let token = localStorage["token"];
        axios.defaults.baseURL = baseURL;
        let data = new URLSearchParams();
        Object.keys(params).forEach(function(key){
            data.append(key, params[key]);
        });
        axios.post(url, data,{
            headers: { 
                'Content-Type': 'application/x-www-form-urlencoded',
                token: token
            }
        }).then(function (response) {
        if (response.status == 200)
        {
            data = response.data;
            if (!!data) {
                // 过滤错误信息,统一抛出
                if (data.errcode != 0 && data.errcode != 200) {
                    alert(data.errmsg);
                } else {
                    callback(data.result);
                }   
            }
        }else {
            alert('post无法访问接口');
        }
        })
        .catch(function (error) {
            console.log(error);
        });
    }
}