js实现弹幕墙效果


Posted in Javascript onDecember 10, 2020

本文实例为大家分享了js实现弹幕墙效果的具体代码,供大家参考,具体内容如下

1.首先要考虑弹幕墙需要什么:一面墙,输入框,发射按钮,关闭和开启弹幕按钮,在此关闭和开启设置为同一个按钮;
2.其次弹幕上墙以后需要移动,从墙的最右边移动到最左边,当移动到最左边时,这条弹幕就要消失;
3.初步的想法应该就是当在输入框输入你要发送的内容,点击发送按钮,在墙上会新建一个div来包含这条弹幕内容,再给这个div相应的移动动画class;

4.弹幕颜色随机,单条弹幕之间有间隔;

取随机颜色这里用的是

"#"+(Math.random()*0x1000000<<0).toString(16)

首先,写出它的静态页面;

<!--墙-->
<h1>弹幕墙</h1>
<div id="container">

</div>
<!--弹幕发送关闭-->
<div class="s_c">
  <input id="message" type="text" placeholder="说点什么">
  <div class="btn">
    <button id="sent">发射弹幕</button>
    <button id="clear">关闭弹幕</button>
  </div>
</div>

css样式

#container{
  /*width:700px;*/
  height:500px;
  margin:50px 100px;
  border:solid 2px #7a2a1d;
}
h1{
  text-align:center;
}
.s_c{
  width:500px;
  margin:0 auto;
}
#message{
  width:400px;
  height:30px;
  margin:0 auto;
  position:relative;
  left:50px;
}
.btn{
  padding-top:20px;
  height:30px;
  margin-left:150px;
}
#sent,#clear{
  width:100px;
}

js代码部分:

var arr = [];//用于保存弹幕数据的数组;
var start = true;//用于判断是否需要开启弹幕
  $(document).ready(function(){
    var showscreen = $("#container");//弹幕墙的div
    var showHeight = showscreen.height();//弹幕墙div的高度
    var showWidth = showscreen.width();//弹幕墙div的宽度
    //点击发射按钮事件
    $("#sent").click(function(){
      var text = $("#message").val();//获取用户输入的待发送弹幕
      $("#message").val("");//清空弹幕发送区
      arr.push(text);//将数据存入实现定义好的用于保存弹幕数据的数组
      var send_div=$("<div>"+text+"</div>");
      showscreen.append(send_div);
      // var send_text=$("<div>+text+</div>");//新建div弹幕条
      // var send_div = document.createElement("div");
      // var inner = document.createTextNode(text);
      // send_div.appendChild(inner);
      // document.getElementById("container").appendChild(send_div)//把弹幕挂在墙上
      move_text(send_div);
    })
    //按回车发送
     $("input").keydown(function(event){
       if(event.keyCode == 13){
         $("#sent").trigger("click");//trigger触发被选元素的指定事件类型,触发#send事件的click类型
       }
     })

     if(start==false){
       start = true;
       $("#clear").html("关闭弹幕");
       run();
     }
     //关闭/开启弹幕按钮点击事件
    $("#clear").click(function(){
      if(start == true){
        start = false;
        $("#clear").html("开启弹幕");
        showscreen.empty();
      }else if(start == false){
        start = true;
        $("#clear").html("关闭弹幕");
        run()
      }
    });
     var topMin = showscreen.offset().top;
     var topMax = topMin+showHeight;
     var top = topMin;
     var move_text = function(obj){
       obj.css({
         display:"inline",
         position:"absolute"
       })
       var begin = showscreen.width() - obj.width(); //一开始的起点
       top+=50;

       if(top > topMax-50){
         top = topMin;
       }
       //console.log("showscreenWidth"+showscreen.width());
       //console.log("objWidth",obj.width());

       obj.css({
         left:begin,
         top:top,
         color:getRandomColor()
       });

       var time = 20000 + 10000*Math.random();
       obj.animate({
         left:"-"+begin+"px"
       },time,function(){
         obj.remove();
       });
     };
    var getRandomColor = function(){
      return '#'+('00000'+(Math.random()*0xffffff <<0).toString(16)).substr(-6);
    }

    var run = function(){
      if(start == true){
        if(arr.length > 0){
          var n = Math.floor(Math.random()* arr.length + 1)-1;
          var textObj = $("<div>"+arr[n]+"</div>");
          showscreen.append(textObj);
          //console.log("loop:"+textObj.html());
          move_text(textObj);
        }
      }
      setTimeout(run,3000);
    }

    jQuery.fx.interval = 50;
    run();
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript this调用规则说明
Mar 08 Javascript
JavaScript 设计模式之组合模式解析
Apr 09 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
angular和BootStrap3实现购物车功能
Jan 25 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
JavaScript中的工厂函数(推荐)
Mar 08 Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 Javascript
解决layer.open后laydate失效的问题
Sep 06 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
jQuery实现简单弹幕制作
Dec 10 #jQuery
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 #Vue.js
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
Dec 10 #Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 #Vue.js
微信小程序实现天气预报功能(附源码)
Dec 10 #Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 #Javascript
微信小程序反编译的实现
Dec 10 #Javascript
You might like
PHP脚本的10个技巧(1)
2006/10/09 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
js一组验证函数
2008/12/20 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
javascript解析json实例详解
2014/11/05 Javascript
js闭包实例汇总
2014/11/09 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python计算一个序列的平均值的方法
2015/07/11 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python是否适合网页编程详解
2019/10/04 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
励志演讲稿范文
2014/04/29 职场文书
会计求职信范文
2014/05/24 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2014年基建工作总结
2014/12/12 职场文书
党员发展大会主持词
2015/07/03 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang