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 相关文章推荐
js遍历td tr等html元素
Dec 13 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
Jun 21 Javascript
表单中单选框添加选项和移除选项
Jul 04 Javascript
JavaScript SHA1加密算法实现详细代码
Oct 06 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
js cookie实现记住密码功能
Jan 17 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
javaScript把其它类型转换为Number类型
Oct 13 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python实现网站文件的全备份和差异备份
2014/11/30 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
python虚拟环境完美部署教程
2019/08/06 Python
Django对models里的objects的使用详解
2019/08/17 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Python之字典对象的几种创建方法
2020/09/30 Python
党校学习自我鉴定
2014/02/24 职场文书
文明礼仪主题班会
2015/08/13 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
Python函数式编程中itertools模块详解
2021/09/15 Python