溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

利用JavaScript編寫一個(gè)彈幕墻效果

發(fā)布時(shí)間:2020-12-11 14:42:49 來源:億速云 閱讀:192 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了利用JavaScript編寫一個(gè)彈幕墻效果,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

1.首先要考慮彈幕墻需要什么:一面墻,輸入框,發(fā)射按鈕,關(guān)閉和開啟彈幕按鈕,在此關(guān)閉和開啟設(shè)置為同一個(gè)按鈕;

2.其次彈幕上墻以后需要移動(dòng),從墻的最右邊移動(dòng)到最左邊,當(dāng)移動(dòng)到最左邊時(shí),這條彈幕就要消失;
3.初步的想法應(yīng)該就是當(dāng)在輸入框輸入你要發(fā)送的內(nèi)容,點(diǎn)擊發(fā)送按鈕,在墻上會(huì)新建一個(gè)div來包含這條彈幕內(nèi)容,再給這個(gè)div相應(yīng)的移動(dòng)動(dòng)畫class;

4.彈幕顏色隨機(jī),單條彈幕之間有間隔;

取隨機(jī)顏色這里用的是

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

首先,寫出它的靜態(tài)頁(yè)面;

<!--墻-->
<h2>彈幕墻</h2>
<div id="container">

</div>
<!--彈幕發(fā)送關(guān)閉-->
<div class="s_c">
  <input id="message" type="text" placeholder="說點(diǎn)什么">
  <div class="btn">
    <button id="sent">發(fā)射彈幕</button>
    <button id="clear">關(guān)閉彈幕</button>
  </div>
</div>

css樣式

#container{
  /*width:700px;*/
  height:500px;
  margin:50px 100px;
  border:solid 2px #7a2a1d;
}
h2{
  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 = [];//用于保存彈幕數(shù)據(jù)的數(shù)組;
var start = true;//用于判斷是否需要開啟彈幕
  $(document).ready(function(){
    var showscreen = $("#container");//彈幕墻的div
    var showHeight = showscreen.height();//彈幕墻div的高度
    var showWidth = showscreen.width();//彈幕墻div的寬度
    //點(diǎn)擊發(fā)射按鈕事件
    $("#sent").click(function(){
      var text = $("#message").val();//獲取用戶輸入的待發(fā)送彈幕
      $("#message").val("");//清空彈幕發(fā)送區(qū)
      arr.push(text);//將數(shù)據(jù)存入實(shí)現(xiàn)定義好的用于保存彈幕數(shù)據(jù)的數(shù)組
      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);
    })
    //按回車發(fā)送
     $("input").keydown(function(event){
       if(event.keyCode == 13){
         $("#sent").trigger("click");//trigger觸發(fā)被選元素的指定事件類型,觸發(fā)#send事件的click類型
       }
     })

     if(start==false){
       start = true;
       $("#clear").html("關(guān)閉彈幕");
       run();
     }
     //關(guān)閉/開啟彈幕按鈕點(diǎn)擊事件
    $("#clear").click(function(){
      if(start == true){
        start = false;
        $("#clear").html("開啟彈幕");
        showscreen.empty();
      }else if(start == false){
        start = true;
        $("#clear").html("關(guān)閉彈幕");
        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(); //一開始的起點(diǎn)
       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();
})

上述內(nèi)容就是利用JavaScript編寫一個(gè)彈幕墻效果,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI