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テーブルシャーディングとパーティショニングの具体的な実装方法
1. 基本的な使い方これは MutationObserver コンストラクターを通じてインスタンス化...
序文ご存知のとおり、Linux ではハードディスクやグラフィック カードなどすべてがファイルです。 ...
Vue+jsはビデオのフェードインとフェードアウトを実現します。参考までに、具体的な内容は次のとおり...
背景AWS EC2 を使用するプロジェクトサービスがあります。セキュリティとパフォーマンスを考慮して...
序文ページの HTML 構造にネストされたボックスが多数含まれている場合、ページに複数の垂直スクロー...
解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...
目次モジュール化の基本概念モジュール化とは何かモジュール分解の利点Node.js のモジュール性No...
問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...
アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...
ブラウザはTIF形式の画像を表示しますコードをコピーコードは次のとおりです。 <html>...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...
より使いやすい Web アプリケーションを設計するための 10 のヒントをご紹介します。ヒント1: ...
1. HTML 画像 <img> 1. <img> タグとその src 属性...
sudo コマンドを使用すると、信頼できるユーザーは別のユーザー (デフォルトでは root ユーザ...