滾動彈幕案例

滾動彈幕案例

一、需求

1.頁面上漂浮字體大小不一、顏色不一,從左向右滾動的彈幕;
2.底部中間有一個發送功能,可以發送新的彈幕;
3.底部的發送部分可以向下收起和彈出。

二、html

<div class="container"><div class="content"><p>哈哈哈哈哈</p><p>哈哈哈哈哈哈哈哈</p><p>哈哈哈哈哈</p><p>哈哈哈哈哈哈哈</p><p>哈哈哈哈哈哈哈哈哈哈哈哈哈</p><p>哈哈哈哈哈哈哈哈哈哈</p><p>哈哈哈</p></div><div class="input-box"><input type="text"><button>發射</button></div><button class="show">收起</button>
</div>

三、css

<style>.container{margin:0 auto;width: 500px;height: 400px;border:1px solid black;position:relative;}.content {width: 500px;height: 365px;position:relative;overflow: hidden;}.input-box {width: 500px;height: 30px;position:absolute;bottom:0;}.input-box input {width: 400px;height: 25px;float:left;} .input-box button{width: 90px;height: 30px;float:right;cursor:pointer;}@keyframes moveDanmu {from{left:-100%}to{left:100%}}p{white-space: nowrap;position:absolute;animation: moveDanmu 8s linear infinite;left:-100%;}.show {width: 50px;height: 30px;position:absolute;left:500px;bottom:0px;}
</style>

四、javascript

<script>const container =document.querySelector('.container')const content =document.querySelector('.content')const danmus = document.querySelectorAll('.content p')const text = document.querySelector('.input-box input')const button = document.querySelector('.input-box button')const inputBox = document.querySelector('.input-box')const show = document.querySelector('.show')//創建隨機顏色function getRandomRGBColor(){const r = Math.floor(Math.random()*255)const g = Math.floor(Math.random()*255)const b = Math.floor(Math.random()*255)return `rgb(${r},${g},${b})`}//創建top值function getRandomTop(){return (Math.floor(Math.random()*content.offsetHeight)- 44 +'px')}console.log(content.offsetHeight);//創建隨機大小function getRandomFontSize(){return (Math.floor(Math.random()*30)+14+'px')}//發送彈幕button.addEventListener('click',function(){if(text.value!==''){const danmu = document.createElement('p')danmu.textContent = text.valuedanmu.style.color = getRandomRGBColor()danmu.style.top= getRandomTop()danmu.style.fontSize = getRandomFontSize()content.appendChild(danmu)text.value = ''// 彈幕滾動結束后移除danmu.addEventListener('animationend', () => {danmuContainer.removeChild(danmu);});}})//已有彈幕danmus.forEach((hadDanmu)=>{const randomDelay=Math.floor(Math.random()*10000)hadDanmu.style.color = getRandomRGBColor()hadDanmu.style.top= getRandomTop()hadDanmu.style.fontSize = getRandomFontSize()hadDanmu.style.animationDelay = randomDelay+'ms'})//展開收起let isInputHidden = falseshow.addEventListener('click',function(){if(isInputHidden){inputBox.style.display='block'show.textContent='收起'}else{inputBox.style.display='none'show.textContent='展開'}isInputHidden=!isInputHidden})
</script>

五、樣式截圖

請添加圖片描述

六、實現原理

  1. 使用Math.random隨機生成方法,構建隨機顏色、隨機大小、隨機絕對定位高度
  2. 對于已有的彈幕,針對每一個彈幕隨機生成顏色大小位置,并且設置css動畫(animation)使其從左到右運動,對每個彈幕設置不同的延遲時間出現,形成彈幕效果。
  3. 對于即將發送的彈幕,需新建p元素,且同樣隨機生成顏色大小位置,彈幕內容為input的value值,最后將其添加至已有彈幕p元素后。
  4. 發送條的展開收起,引入布爾變量isInputHidden并設置初始值為false,按鈕內容初始設置為收起,發送條display初始值為block,當點擊收起按鈕,按鈕收起–>展開,發送條block–>none,isInputHidden值取反,相反同理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【wiki知識庫】08.添加用戶登錄功能--后端SpringBoot部分

目錄 一、今日目標? 二、SpringBoot后端實現 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代碼 2.4 創建用戶上下文工具類 2.5?通過token校驗用戶&#xff08;重要&#xff09; 2.6 創建WebMvcConfig 2.7 用戶權限校驗攔截器 一、今日目標 上…

AI大模型的技術突破與傳媒行業變革

性能與成本&#xff1a;AI大模型的“雙輪驅動” 過去幾年&#xff0c;AI大模型的發展經歷了從實驗室到產業化的關鍵轉折。2025年初&#xff0c;以DeepSeek R1為代表的模型在數學推理、代碼生成等任務中表現超越國際頭部產品&#xff0c;而訓練成本僅為傳統模型的幾十分之一。這…

C++字符串處理指南:從基礎操作到性能優化——基于std::string的全面解析

博主將從C標準庫中的 std::string 出發&#xff0c;詳細探討字符串的處理方法&#xff0c;涵蓋常見操作、性能優化和實際應用場景。以下內容將圍繞std::string 的使用展開&#xff0c;結合代碼示例進行說明。 一、std::string 的基本操作 1.1 創建與初始化 std::string 提供了…

3.【線性代數】——矩陣乘法和逆矩陣

三 矩陣乘法和逆矩陣 1. 矩陣乘法1.1 常規方法1.2 列向量組合1.3 行向量組合1.4 單行和單列的乘積和1.5 塊乘法 2. 逆矩陣2.1 逆矩陣的定義2.2 奇異矩陣2.3 Gauss-Jordan 求逆矩陣2.3.1 求逆矩陣 ? \Longleftrightarrow ?解方程組2.3.2 Gauss-Jordan求逆矩陣 1. 矩陣乘法 1.…

深入了解 Oracle 正則表達式

目錄 深入了解 Oracle 正則表達式一、正則表達式基礎概念二、Oracle 正則表達式語法&#xff08;一&#xff09;字符類&#xff08;二&#xff09;重復限定符&#xff08;三&#xff09;邊界匹配符&#xff08;四&#xff09;分組和捕獲 三、Oracle 正則表達式函數&#xff08;…

用python寫一個聊天室程序

下面是一個簡單的基于Socket的Python聊天室程序示例&#xff0c;包括服務器端和客戶端&#xff1a; 服務器端代碼&#xff1a; import socket import threadingdef handle_client(client, address):print(f"New connection from {address}")while True:msg client…

在nodejs中使用RabbitMQ(六)sharding消息分片

RabbitMQ 的分片插件&#xff08;rabbitmq_sharding&#xff09;允許將消息分布到多個隊列中&#xff0c;這在消息量很大或處理速度要求高的情況下非常有用。分片功能通過將消息拆分到多個隊列中來平衡負載&#xff0c;從而提升消息處理的吞吐量和可靠性。它能夠在多個隊列之間…

1.7 AI智能體實戰指南:從單任務自動化到企業級智能體集群架構

AI智能體實戰指南:從單任務自動化到企業級智能體集群架構 一、智能體技術演進:從腳本工具到認知革命的跨越 1.1 三代智能體能力對比 能力維度第一代(規則驅動)第二代(機器學習)第三代(LLM驅動)任務理解固定模式匹配統計模式識別語義推理與邏輯鏈分解環境適應需人工重寫…

Github 2025-02-14 Java開源項目日報 Top10

根據Github Trendings的統計,今日(2025-02-14統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Java項目10C#項目1Guava: 谷歌Java核心庫 創建周期:3725 天開發語言:Java協議類型:Apache License 2.0Star數量:49867 個Fork數量:10822 次…

C++17中的clamp函數

一、std::clamp() 其實在前面簡單介紹過這個函數&#xff0c;但當時只是一個集中的說明&#xff0c;為了更好的理解std::clamp的應用&#xff0c;本篇再詳細進行闡述一次。std::clamp在C17中其定義的方式為&#xff1a; template< class T > constexpr const T& cl…

WEB安全--SQL注入--常見的注入手段

一、聯表查詢&#xff1a; 1.1原理&#xff1a; 當payload參數被后端查詢語句接收到時&#xff0c;其中的非法語句通過union關聯顯示出其他的數據 1.2示例&#xff1a; #payload: -1 and union select 1,2,database()--#query: $sqlselect * from users where id-1 and union …

QT筆記——QPlainTextEdit

文章目錄 1、概要2、文本設計2.1、設置文本2.1、字體樣式&#xff08;大小、下劃線、加粗、斜體&#xff09; 1、概要 QPlainTextEdit 是 Qt 框架中用于處理純文本編輯的控件&#xff0c;具有輕量級和高效的特點&#xff0c;以下是它常見的應用場景&#xff1a; 文本編輯器&am…

【D2】神經網絡初步學習

總結&#xff1a;學習了 PyTorch 中的基本概念和常用功能&#xff0c;張量&#xff08;Tensor&#xff09;的操作、自動微分&#xff08;Autograd&#xff09;、正向傳播、反向傳播。通過了解認識LeNet 模型&#xff0c;定義神經網絡類&#xff0c;熟悉卷積神經網絡的基本結構和…

DeepSeek處理自有業務的案例:讓AI給你寫一份小眾編輯器(EverEdit)的語法著色文件

1 DeepSeek處理自有業務的案例&#xff1a;讓AI給你寫一份小眾編輯器(EverEdit)的語法著色文件 1.1 背景 AI能力再強&#xff0c;如果不能在企業的自有業務上產生助益&#xff0c;那基本也是一無是處。將企業的自有業務上傳到線上訓練&#xff0c;那是腦子進水的做法&#xff…

DeepSeek教unity------MessagePack-05

動態反序列化 當調用 MessagePackSerializer.Deserialize<object> 或 MessagePackSerializer.Deserialize<dynamic> 時&#xff0c;二進制數據中存在的任何值都將被轉換為基本值&#xff0c;即 bool、char、sbyte、byte、short、int、long、ushort、uint、ulong、…

C++入門之《拷貝構造函數》詳解

拷貝構造函數是構造函數的一個重載 拷貝構造函數是特殊的構造函數&#xff0c;用于基于已存在對象創建新對象。比如定義一個 Person 類&#xff1a; class Person { private:std::string name;int age; public:Person(const std::string& n, int a) : name(n), age(a…

Ollama命令使用指南

Ollama 命令使用指南 Ollama 命令使用指南1. Ollama 命令概覽2. Ollama 命令詳解2.1 啟動 Ollama2.2 創建模型2.3 查看模型信息2.4 運行模型2.5 停止運行的模型2.6 從注冊表拉取模型2.7 推送模型到注冊表2.8 列出本地模型2.9 查看正在運行的模型2.10 復制模型2.11 刪除模型 3. …

為什么配置Redis時候要序列化配置呢

序列化和反序列化&#xff1f;&#xff1a; 序列化&#xff1a;將對象轉換為二進制數據&#xff0c;以便存儲到Redis中。 反序列化&#xff1a;將Redis中的二進制數據轉換回對象&#xff0c;以便在應用程序中使用。 1. 默認序列化器的問題 如果不配置序列化器&#xff0c;Re…

【問】強學如何支持 遷移學習呢?

案例&#xff1a;從CartPole-v1遷移到MountainCar-v0 在源環境&#xff08;CartPole-v1&#xff09;中訓練模型 首先&#xff0c;我們使用DQN算法在CartPole-v1環境中訓練一個強化學習模型。以下是代碼示例&#xff1a; import gym import torch import torch.nn as nn impor…

深入淺出Java反射:掌握動態編程的藝術

小程一言反射何為反射反射核心類反射的基本使用獲取Class對象創建對象調用方法訪問字段 示例程序應用場景優缺點分析優點缺點 注意 再深入一些反射與泛型反射與注解反射與動態代理反射與類加載器 結語 小程一言 本專欄是對Java知識點的總結。在學習Java的過程中&#xff0c;學習…