单机版简单弹幕墙demo (jqery+bootstrap)

最近在看fcc  ,上面有一个弹幕墙设计的题目,要求从后端获取数据,显示出来。百度,谷歌都没找到相关好的例子作为借鉴,索性按照自己的思路写了一个简单的demo  。在做demo的过程中遇到最大的问题就是怎么获取当前的div ,最开始用原生的JS来做,感觉很麻(cai)烦(niao),用Jquery 就简单多了。

html:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>danmu</title>
    <link href="css/bootstrap.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
    <!-- <link href="bootstrap/css/animate.css" rel="stylesheet"> -->
    <!--   <script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> -->

</head>

<body>
    <div class="container">
       <div class="row">
           <div class="wallpaper col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 "></div>
       </div>
       <div class="row">
           <div class="col-sm-4 col-sm-offset-1 col-md-3 col-md-offset-3">
               <input type="text" class="form-control" placeholder="弹幕内容" id="danmu">
           </div>
            <div class="col-sm-2 col-md-1 setpad">
               <button class="form-control btn btn-info" id="send">发射弹幕</button>
           </div>
            <div class="col-sm-2 col-md-1 setpad">
               <button class="form-control btn btn-danger" id="clear">清屏</button>
           </div>
       </div>
    </div>
    <script src="js/jquery-1.12.0.min.js"></script>
    <script src="js/index.js"></script>
</body>

</html>

style.css:

.move {
    font-size: 20px;
    display: block;
    position: absolute;
}

.wallpaper {
    height: 400px;
    border: 1px solid #9A9FB3;
    margin-top: 20px;
    margin-bottom: 10px;
   /* background-color: #FCF7F7;*/
    overflow: hidden;
}

.setpad {
    padding: 0 5px 0 0;
}

js:

// 创建一个div
$("#send").click(function() {
    var div = $("<div></div>");
    var value = $("#danmu").val();
    var that = div;
    that.html(value)
    that.addClass("move")
    $(".wallpaper").append(div)
    init(that)
    move(that)
})
// 清除弹幕
$("#clear").click(function() {
    for (var i = 0; i < timers.length; i++) {
        clearInterval(timers[i])
    }
    $(".move").remove()
})
// 把每一个setInterval 放到数组中
var timers = [];
// div 移动
function move(that) {
    var i = 0;
    var timer = setInterval(function() {
        that.css({
            right: (i += 1) + "px"
        });
        if ((that.offset().left + that.width()) < $(".wallpaper").offset().left) {
            that.remove()
            clearInterval(timer)
        }

    }, 10)
    timers.push(timer)

}
// 初始化div 设置div宽度,字体颜色,
function init(that) {

    var r = Math.floor(Math.random() * 254);
    var g = Math.floor(Math.random() * 254);
    var b = Math.floor(Math.random() * 254);
    that.css({
        "color": "rgb(" + r + "," + g + "," + b + ")",
        top: Math.floor(Math.random() * $(".wallpaper").height()) + "px",
        right: -that.width(),
        width: that.width()
    })
    console.log(that.width())
}

其中为什么要设置 right: -that.width(), width: that.width()  ,是div 在创建的时候一个字一个字显示   ,在移除的一个字一个字移除(不设置width,在最左边会被挤压成一列)

这只是一个很简单很简单的demo,我觉得要做的比较好一点,应该用convas ,设计两个convas  ,一个用来显示背景,一个用来显示弹幕。希望有此相关经验的大神和网友能留言交流下,如果有相关的demo ,和代码分享 也是极好的。

时间: 2024-11-03 05:41:28

单机版简单弹幕墙demo (jqery+bootstrap)的相关文章

jquery 简单弹出层

预定义html代码:没有 所有代码通过js生成和移除. 预定义css /* 基本弹出层样式 */ .my-popup-overlay { width:100%; height:auto; /* width height is defined by javascript */ position: absolute; top:0; left: 0; z-index: 1000; background-color: #000; opacity: 0.2; *filter:alpha(opacity=2

jquery 简单弹出层(转)

预定义html代码:没有 所有代码通过js生成和移除. 预定义css /* 基本弹出层样式 */ .my-popup-overlay { width:100%; height:auto; /* width height is defined by javascript */ position: absolute; top:0; left: 0; z-index: 1000; background-color: #000; opacity: 0.2; *filter:alpha(opacity=2

设计模式-简单工厂(Demo)

简介 工厂都是创建型模式.用来NEW类的.本文章用一个故事讲述了简单工厂模式 故事 在遥远的未来.chenchen我生活条件不错.但是每天都要做饭.chenchen很懒.只想吃.不想干.所以就请了个女仆给chenchen做饭吃.女仆很牛.chenchen只要说.我要吃牛排.不一会.牛排就做好了放在桌子上.我又说还要红酒.女仆开好红酒.倒好放在桌子上.美滋滋的哈!小肉吃着.小酒喝着.美女陪着此等逍遥快活! 是什么? 代替客户端NEW类.客户端与多个类解耦 为什么要用? 上述故事.因为我做很多饭.要

Xamarin.Android再体验之简单的登录Demo

一.前言 在空闲之余,学学新东西 二.服务端的代码编写与部署 这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好) 主要是接受客户端的登陆请求,服务器端返回请求的结果 这里的内容比较简单不在啰嗦,直接上代码了: 1 using System.Linq; 2 using System.Web.Mvc; 3 namespace Catcher.AndroidDemo.EasyLogOn.Service.Controller

简单弹出视图

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #import "loveView.h" //点击按钮 -(void)buttonclick { UIWindow *window = [UIApplication sharedApplication].keyWindow; loveView *loveview = [[loveView alloc] initWithFrame:window.bounds]; loveview.alpha = 0; [window.

php 简单实现webSocket(demo)

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据. 在 WebSocket API 中,浏览器和服务器只需要完成一次握手的动作,浏览器和服务器之间就形成了一条快速通道创建持久性的连接,两者之间就直接可以数据互相传送.(长连接,循环连接的不算) 现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询.轮询是在特定的的时间间隔(如每1秒),由浏览器对

vue+node+es6+webpack创建简单vue的demo

闲聊: 小颖之前一直说是写一篇用vue做的简单demo的文章,然而小颖总是给自己找借口,说没时间,这一没时间一下就推到现在了,今天抽时间把这个简单的demo整理下,给大家分享出来,希望对大家也有所帮助. 前期准备: 1.安装node 安装包地址这个里面有两个安装包大家可以根据自己的需求选择安装4.4.4版本或者6.2.0版本,小颖选择的是6.2.0. 2.Atom编辑器,这个大家可以根据自己的喜好选择自己喜欢的编辑器,所以小颖就不发下载链接了,大家有需求的话可以百度下嘻嘻. 目录: 创建项目:

[email&#160;protected]一个最简单的指令demo

<!DOCTYPE HTML><html ng-app="app"><head>    <title>custom-directive</title>    <meta charset="utf-8">        <link rel="stylesheet" href="../css/bootstrap.css">    <scrip

EasyUI+MVC+EF简单用户管理Demo(问题及解决)

原文:http://www.cnblogs.com/xishuai/p/3635192.html 写在前面 iframe-src EntityFramework版本 connectionStrings View.Action.页面跳转 EasyUI中DataGrid绑定 新增.修改和删除数据 效果图.完整示例Demo下载 后记 关于EasyUI了解差不多,就想结合MVC.EF做一个简单的用户管理Demo,其实没多少东西,但这是小菜我第一次做.主要是熟悉下其中的流程,当然也遇到一些问题,走了很多的