ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript の弾丸スクリーン効果のシンプルな実装
  • JavaScript ベースで弾幕特殊効果を実現
  • JS で実装したビデオ弾幕スクリーン効果の例
  • JavaScript ライブコメント連発カット画像機能ポイント収集効果コード
  • 弾丸スクリーンの壁効果を実現する JavaScript
  • ビデオの弾幕効果を実現する JavaScript (2 つのバージョン)
  • 弾幕効果を実現するネイティブ js
  • js cavans が静的スクロール弾丸画面を実現
  • ネイティブ JS で弾幕スクリーン効果を実装するための簡単なガイド
  • 弾丸スクリーンの航空機効果を実現する js

<<:  Dockerを使用してPythonランタイム環境の基本イメージを作成する方法

>>:  MySQLテーブルシャーディングとパーティショニングの具体的な実装方法

推薦する

MySQLユーザー管理操作例の分析

この記事では、MySQL ユーザー管理操作について説明します。ご参考までに、詳細は以下の通りです。こ...

MySQL infobrightのインストール手順

目次1. 次のように、「rpm -ivh インストール パッケージ」コマンドを使用して rpm パッ...

VMware 12 での Ubuntu 16.04 インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...

どのような種類の MYSQL 接続クエリを知っていますか?

序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...

実用的なウェブオンラインツール12選

1.ファビコン.cc ico アイコンの Web サイトをオンラインで作成するには、画像をアップロー...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...

WangEditor リッチ テキスト コンポーネントを Angular でカプセル化する方法

リッチ テキスト コンポーネントは、Web プログラムで、特にブログやフォーラムなどの Web サイ...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

MySQL インデックスの最適化: ページング探索の詳細な紹介

目次MySQL インデックス最適化ページングの調査ケース1ケース2 MySQL インデックス最適化ペ...

Python Django アプリケーションを Docker 化する方法

Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...

HTML の小さなタグの使用に関するヒント

<em></em> などのフレーズ要素を使用すると、意図した視覚スタイルを維...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

jsでユーザー登録機能を実装する

この記事の例では、ユーザー登録機能を実装するためのjsの具体的なコードを参考までに共有しています。具...