1. 基本原則まず、生放送エリアを10の部分に分割し(個人的には計算の便宜上10に分割しています)、入力コンテンツを10の分割領域にランダムに配置し、10の分割領域の右側のビューの外側に挿入してから、ランダムな速度で右から左に移動するアニメーションを呼び出します。左側の領域のビューの外側に移動すると、このスクロール要素を削除します。 2. 特定のコード<div class="move_video_content"> <div class="video_content"> <div class="video_div" id="video_view"></div> <div class="scroll_content"> <ul class="scroll_ul" id="scroll_ul_id"></ul> </div> </div> <div class="input_content"> <input type="text" class="input_text" maxlength="30" placeholder="送信したい弾幕を入力してください" id="input_text_id"> <button type="button" class="button_btn" id="send_btn">送信</button> </div> </div> 具体的な効果は以下のとおりです。 jsコードは次のとおりです let inputText = document.getElementById("input_text_id");//入力ボックスlet scrollContent = document.getElementById("scroll_ul_id");//サイドチャットバーlet videoView = document.getElementById("video_view");//ビデオエリアlet videoWidth = videoView.offsetWidth;//ライブ放送エリアの合計幅let listHeight = videoView.offsetHeight/10;//ライブ放送エリアの各レイヤーの高さlet listTopNum = [0,1,2,3,4,5,6,7,8,9];//ライブ放送エリアの高さを10のレイヤーに分割document.getElementById("send_btn").addEventListener("click",function(){//送信ボタンをリッスンlet value = inputText.value;//入力ボックスの値を取得if(!value) return; appendDom(value); //入力ボックスの値をスクロールチャットに挿入します createVideoBulletChatDom(value); //入力ボックスの値を箇条書き画面に挿入します inputText.value = ''; //入力ボックスをクリアします scrollContent.scrollTop = scrollContent.scrollHeight; //自動的に一番下までスクロールします }) function appendDom(value){//入力ボックスの値をスクロールチャットに挿入します。let li = document.createElement("li"); li.setAttribute("class","scroll_li"); li.innerHTML = 値; scrollContent.appendChild(li); } speedArr = ['normal','fast','faster'] とします。 function createVideoBulletChatDom(value){//入力ボックスの値を箇条書き画面に挿入します。let num = listTopNum[Math.floor((Math.random()*listTopNum.length))]; p = document.createElement("p"); とします。 p.setAttribute("class","video_p"); p.style.top = (num * 60) + "px"; p.style.left = ビデオ幅 + "px"; p.innerHTML = 値; ビデオビューに子要素を追加します。 speed = speedArr[Math.floor((Math.random()*speedArr.length))] とします。 Animate(p,speed); //スクロールアニメーション} animateType = { '通常':5, '速い':10, 'より速い':15 } function Animate(dom,speed){//スクロールアニメーション let domWidth = dom.offsetWidth;//現在の弾丸画面要素の幅 let distance = videoWidth;//ライブ放送領域の合計幅 speed ? speed : 'normal'; 間隔をanimateType[速度]とします タイマー = setInterval(function(){ 距離 -= 間隔; dom.style.left = 距離 + 'px'; if(距離 <= -domWidth){ タイマーの間隔をクリアします。 videoView.removeChild(dom); //画面からスクロールアウトしたラベルをクリアします} },50) } ライブ放送エリアを10個の部分に分割(listTopNum)に応じて、各レイヤーの高さ(listHeight)を取得し、スクロールラベルの上部を変更して、10個の部分の異なる領域に挿入します。 スクロール ラベルを作成すると、スクロール アニメーション (関数 Animate) が作成されます。デフォルトの速度は normal です。アニメーションを作成するたびに、ランダムな速度タイプ (normal、fast、faster) がランダムに渡されます。スクロールごとに減算される距離は、渡された速度タイプに応じて変更され、異なるスクロール速度を実現します。 要約する暇な時に思いつきで書いたライブスクロールアニメーションです。WebSocket を追加すれば複数人同期通信も実現できます。暇な時に後日改良します。 具体的なコードについては[:github.com/liqc-wwl/bu…]にアクセスしてダウンロードし、効果を直接確認してください。 ネイティブ js を使用してライブ弾幕のスクロール効果をシミュレートする方法についての記事はこれで終わりです。ライブ弾幕スクロール コンテンツのより関連性の高い js シミュレーションについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Dockerを使用してPythonランタイム環境の基本イメージを作成する方法
>>: MySQLテーブルシャーディングとパーティショニングの具体的な実装方法
目次server1にnginxをデプロイするサーバーにlnmpを展開するノード3にhttpdをデプロ...
1. インストールパッケージを使用してMySQLをインストールします(オンラインダウンロードは遅すぎ...
1. はじめにこれまで、テキストの特定の部分を強調したい場合、通常は太字にしたり明るい色を使用したり...
目次前面に書かれた要件分析 v1アイデア1: インターセプションメソッドを使用して入力ボックスの入力...
質問最近、プライベートミラーセンターにログインする必要がありましたが、ログイン時にエラーメッセージが...
序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...
この記事では、JavaScriptで画像のプリロードと遅延ロードを実装するための具体的なコードを参考...
問題:あるサーバー上の PHP プログラムは、localhost アドレス経由でデータベースに接続で...
マクロタスクとマイクロタスクJavaScript はシングルスレッド言語です (マルチスレッドの場合...
Dockerfile を作成するときは、コンテナが起動する前に初期化構成やカスタム構成を実行するため...
MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...
1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...
CentOS8.0-1905 のリリース後、FTP サーバーを CentOS の新しいバージョンに移...
テーブルの基本構文<table>...</table> - テーブルを定義し...
## 1最近、docker デプロイメントを学習しており、当初は nginx を docker 化す...