@产品让前端飞

【JQuery】弹幕APP

2017-12-05  本文已影响0人  雨水之后

虽然我是一名实打实的产品喵,但是为了能够和程序猿们愉快地沟通(让撕逼再和谐一点),我自学了一些代码知识,写了一些不入流不靠谱不成熟的“三不”应用,随便扔在这里分享一下。

简介

弹幕确实是个有意思的东西,但它其实并不复杂,拥有一点前端基础的都能写出来。

我写的这个弹幕APP也就只用了bootstrap和JQuery,外加一个叫wilddog(野狗云)的即时通讯服务器,实现了多人同时在线弹幕聊天。

在这里可以强推一下wilddog野狗云,真的特别好用,不需要你有任何服务器知识,纯前端可以开发即时通讯、身份验证等多种应用程序,而且免费

这个项目感觉很适合前端新手练手用,推荐一下哈~

截图
弹幕飞起中...
代码
$(document).ready(function() {
  
    //创建通讯实体
    //野狗云的使用方法你自己去他官网看案例啦~
    var configSync = {
    authDomain: 'wd3384719095ozfucu.wilddogio.com',
    syncURL: 'https://wd3384719095ozfucu.wilddogio.com/',
  };  
    wilddog.initializeApp(configSync);
    var danmu = wilddog.sync().ref('/msg');
    
    /*初始化变量*/
    //发送按钮
    var shoot = $(".shoot");
    //消息文本框
    var msg_txt = $(".msg");
    //清空按钮
    var clear = $(".clear");
    //弹幕面板
    var danmu_box = $(".danmu-box");
    //消息表格
    var danmu_table = $(".danmu-table > tbody");
    //获取随机整数
    function randomNum(min,max){
        var Range = max - min;
        var Rand = Math.random();
        var num = min + Math.round(Rand * Range);    //四舍五入
        return num;
    }
    //获取用户登入网站的时间点
    var enter_date = new Date();
    var enter_time_point = enter_date.getTime();
    
    //个位数前面加0
    function plusZero(x){
      if(x<10){
        return '0'+x;
      } else {
        return x.toString();
      }
    }
    //获取标准时间格式
    function getTime(deit){
      const y = deit.getFullYear();
      const m = plusZero(deit.getMonth()+1);
      const d = plusZero(deit.getDate());
      const h = plusZero(deit.getHours());
      const mi = plusZero(deit.getMinutes());
      return y + "." + m + "." + d + " " + h + ":" + mi;
    }
    //鼠标点击发送消息至通讯云
    shoot.click(function(){
        //获取消息
        var msg = $(".msg").val();
        var msg_date = new Date();
        var msg_time_point = msg_date.getTime();
        //如果文本框内有内容
        if(msg.length > 0){
            //发送至通讯云
            danmu.push({
                "msg": msg,
                "time": msg_time_point
            });
        } else {
            alert("不能发空消息的哦~");
        }
        //清空文本框
        msg_txt.val("");
    });
    
    //按下回车发送消息至通讯云
    msg_txt.keypress(function(e){     
        if(event.keyCode == "13"){
            //防止冒泡
            e.preventDefault();
            //绑定点击事件
            shoot.trigger("click");
           }
    });
    
    //实时监听通讯云并获取消息数据
    danmu.on("child_added",function(data){
        
        //包装消息进弹幕用DOM
        var msgs = data.val().msg;
        var msgs_dom = "<span class='danmu-message'>" + msgs + "</span>";
        //监听获取所有消息的发射时间点
        var msgs_time_point = data.val().time;
        console.log(data.val());
        //只有在进入网站以后被发出的消息才会被显示在弹幕面板内
        if(msgs_time_point > enter_time_point){
            //插入弹幕面板
            danmu_box.prepend(msgs_dom);
            //设置初始位置
            //获取随机位置
            var position = randomNum(50,400);  
            //获取随机颜色
            var color = randomNum(100000,999999);  
            //获取随机速度
            var speed = randomNum(10000,20000);
            $('.danmu-message').first().css({
                right: '0px',
                top: position,
                color: '#' + color
            });
            //设置动画效果(位置、速度、颜色),并到位消失
            $('.danmu-message').first().animate({
                left: '0px'
            }, speed, function() {
                $(this).fadeOut();
            });
        } else {}
        
        //获取消息时间
        var msgs_time_obj = new Date(msgs_time_point);
        console.log(msgs_time_obj);
        var msgs_time = getTime(msgs_time_obj);
        console.log(msgs_time);
        //如果消息过长,则多余处用“...”代替显示
        if (msgs.length > 6) {
          msgs = msgs.substring(0, 6) + "...";
        }
        //包装消息进表格用DOM
        var msgs_table_dom = "<tr><td>" + msgs + "</td><td>" + msgs_time + "</td></tr>";
        //插入表格
        danmu_table.prepend(msgs_table_dom);
        });
        
    //清空消息(弹幕面板及通讯云)
    clear.click(function(){
        //清空通讯云
        danmu.remove();
        //清空弹幕面板
        danmu_box.empty();
        //清空表格
        danmu_table.empty();
    }); 
        
});
相关

想看源代码的童鞋可以来CODING.NET获取,也可以直接去DEMO体验一下。


THE END.

上一篇下一篇

猜你喜欢

热点阅读