当前位置: 首页 > news >正文

用JS+CSS打造你自己的弹幕王国,让网页动起来!

文章目录

  • 前言
  • 主要内容
    • 实现方法
    • DOM方法
      • 显现效果
      • 代码
    • CANVAS方法
      • 显现效果
      • 代码
  • 总结
  • 更多宝藏


前言

😎🥳😎🤠😮🤖🙈💭🍳🍱
用JS+CSS打造你自己的弹幕王国,让网页动起来!
弹幕大法,让你的网页像视频一样有趣!
如何用JS+CSS实现弹幕效果?看完这篇博客,你就会了!
JS+CSS + 弹幕 = 网页新体验!教你如何用简单的代码实现弹幕功能!
你还不会用JS+CSS做弹幕?快来学习这个超酷的网页技巧吧!

你想用js和css实现弹幕效果吗?弹幕效果是指在视频或图片上显示滚动的文字或图形,通常用于表达观众的评论或反馈。


主要内容

实现方法

有两种主要的方法来实现弹幕效果:DOM和canvas。

DOM方法是使用HTML元素和CSS样式来创建和控制弹幕,这种方法的优点是动画较为流畅,且一些特殊效果(如文字阴影)较容易实现(只要在CSS中设置对应的属性即可)。

canvas方法是使用JavaScript绘图API来在一个画布上绘制和移动弹幕,这种方法的优点是可以更灵活地控制弹幕的大小、颜色、速度等属性,且不会受到HTML元素的限制。

你可以根据自己的需求和喜好选择一种方法来实现弹幕效果。

DOM方法

首先,你需要在HTML中创建一个容器元素,比如div,用来放置弹幕。然后,你需要在CSS中设置容器元素的样式,比如宽度、高度、背景色、溢出隐藏等。接下来,你需要在JavaScript中定义一个函数,用来创建和插入弹幕元素。这个函数需要接收一个参数,表示弹幕的内容。然后,在函数内部,你需要创建一个span元素,并设置其文本内容为参数值。接着,你需要为span元素添加一些样式,比如字体大小、颜色、位置等。最后,你需要将span元素插入到容器元素中,并使用CSS动画或定时器来让它从右向左移动。

显现效果

请添加图片描述

代码

<html>
<head>
<style>#container {width: 800px;height: 600px;background-color: black;overflow: hidden;position: relative;}.danmu {position: absolute;right: 0;white-space: nowrap;font-size: 24px;color: white;}@keyframes move {from {right: 0;}to {right: calc(100% + 200px);}}
</style>
</head>
<body>
<div id="container"></div>
<script>
// 定义一个函数用来创建和插入弹幕
function createDanmu(text) {// 创建一个span元素var danmu = document.createElement("span");// 设置其文本内容为参数值danmu.innerText = text;// 设置其类名为danmudanmu.className = "danmu";// 设置其随机的高度danmu.style.top = Math.random() * (container.clientHeight - danmu.clientHeight) + "px";// 设置其随机的颜色danmu.style.color = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + ")";// 将span元素插入到容器元素中container.appendChild(danmu);// 使用CSS动画来让span元素从右向左移动danmu.style.animation = "move " + (5 + Math.random() * 5) + "s linear infinite";
}// 获取容器元素
var container = document.getElementById("container");
// 定义一个数组用来存放一些弹幕内容
var texts = ["Hello", "World","关注", "弹幕", "点赞", "哈哈哈"];
// 定义一个定时器,每隔一秒创建并插入一条弹幕
setInterval(function() {// 随机选择一个弹幕内容var text = texts[Math.floor(Math.random() * texts.length)];// 调用函数创建并插入弹幕createDanmu(text);
},1000);
</script>
</body>
</html>

CANVAS方法

首先,你需要在HTML中创建一个canvas元素,用来绘制弹幕。然后,你需要在CSS中设置canvas元素的样式,比如宽度、高度、背景色等。接下来,你需要在JavaScript中定义一个函数,用来创建和绘制弹幕对象。这个函数需要接收一个参数,表示弹幕的内容。然后,在函数内部,你需要创建一个对象,并设置其属性值为参数值和一些随机的样式值。接着,你需要将对象存入一个数组中,并使用requestAnimationFrame或定时器来循环遍历数组并绘制每个对象到canvas上。

显现效果

在这里插入图片描述

代码

<html>
<head>
<style>#canvas {width: 800px;height: 600px;background-color: black;}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
// 定义一个函数用来创建和绘制弹幕
function createDanmu(text) {// 创建一个对象var danmu = {};// 设置其文本内容为参数值danmu.text = text;// 设置其字体大小为24pxdanmu.fontSize = 24;// 设置其随机的颜色danmu.color = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + ")";// 设置其初始的x坐标为canvas的宽度danmu.x = canvas.width;// 设置其随机的y坐标,保证在canvas的高度范围内danmu.y = Math.random() * (canvas.height - danmu.fontSize) + danmu.fontSize;// 设置其移动速度为2到6之间的随机数danmu.speed = Math.random() * (6 - 2) + 2;// 将对象存入数组中danmus.push(danmu);
}// 获取canvas元素
var canvas = document.getElementById("canvas");
// 获取canvas的上下文对象,用来绘制图形
var ctx = canvas.getContext("2d");
// 定义一个数组用来存放弹幕对象
var danmus = [];
// 定义一个数组用来存放一些弹幕内容
var texts = ["Hello", "World","关注", "弹幕", "点赞", "哈哈哈"];
// 定义一个定时器,每隔一秒创建一条弹幕
setInterval(function() {// 随机选择一个弹幕内容var text = texts[Math.floor(Math.random() * texts.length)];// 调用函数创建一条弹幕createDanmu(text);
},1000);// 定义一个函数用来绘制所有的弹幕
function drawDanmus() {// 清空canvas上的内容ctx.clearRect(0,0,canvas.width,canvas.height);// 遍历数组中的每个对象for (var i = 0; i < danmus.length; i++) {// 获取当前对象var danmu = danmus[i];// 设置字体样式ctx.font = danmu.fontSize + "px Arial";// 设置字体颜色ctx.fillStyle = danmu.color;// 绘制文本到canvas上,根据对象的x和y坐标ctx.fillText(danmu.text,danmu.x,danmu.y);// 更新对象的x坐标,使其向左移动一定的速度danmu.x -= danmu.speed;// 判断对象是否已经移出了canvas的左边界,如果是,则从数组中删除该对象,并减少i的值,避免跳过下一个对象if (danmu.x < -ctx.measureText(danmu.text).width) {danmus.splice(i,1);i--;}}
}// 使用requestAnimationFrame来循环调用drawDanmus函数,实现动画效果
function animate() {// 调用drawDanmus函数drawDanmus();// 使用requestAnimationFrame来再次调用animate函数,形成循环requestAnimationFrame(animate);
}// 调用animate函数,开始动画
animate();
</script>
</body>
</html>

总结

🐋 🐬 🐶 🐳 🐰 🦀☝️ ⭐ 👉 👀
这就是使用JS+CSS方法实现弹幕效果的简单示例网页。通过这个功能,你可以让你的网页更加有趣和互动,吸引更多的用户和浏览量。如果你对这个功能感兴趣,欢迎在评论区留言,分享你的想法和建议。如果你喜欢我的博客,请记得点赞、收藏和关注我,我会持续更新更多有用的网页技巧和教程。谢谢大家!


更多宝藏

🍇🍉🍊🍏🍋🍅🥝🥥🫒🫕🥗
项目仓库看这里🤗:
https://github.com/w-x-x-w
https://gitee.com/w-_-x
博客文章看这里🤭:
https://blog.csdn.net/weixin_62650212
视频推送看这里🤤:
https://space.bilibili.com/1909782963

相关文章:

用JS+CSS打造你自己的弹幕王国,让网页动起来!

文章目录前言主要内容实现方法DOM方法显现效果代码CANVAS方法显现效果代码总结更多宝藏前言 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f62e;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f371; 用JSCSS打造你自己的弹幕王国&#xff0c…...

C++ LinuxWebServer 2万7千字的面经长文(上)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 前言 Linux Web Server项目虽然是现在C求职者的人手一个的项目&#xff0c;但是想要吃透这个项目&#xff…...

vue3 解决各场景 loading过度 ,避免白屏尴尬!

Ⅰ、前言 当我们每次打卡页面&#xff0c;切换路由&#xff0c;甚至于异步组件&#xff0c;都会有一个等待的时间 &#xff1b;为了不白屏&#xff0c;提高用户体验&#xff0c;添加一个 loading 过度动画是 非常 常见的 &#xff1b;那么这几种场景我们应该把 loading 加在哪…...

基于sringboot和小程序实现高校食堂移动预约点餐系统演示【源码】

基于sringboot实现高校食堂移动预约点餐系统演示开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&am…...

开源操作系统与Windows大比拼!

科技网站ZDNet近日撰文称&#xff0c;在一个用户为王的时代&#xff0c;操作系统们为了获得青睐都放下了身段&#xff0c;采用免费策略&#xff0c;但其中却有一个例外——Windows 10。这样的一反常理让许多人不看好Windows的未来&#xff0c;难道这个我们最熟悉的朋友真的会成…...

RTL8201 以太网PHY芯片 调试记录

一、概述 为了尽量给甲方降低成本&#xff0c;决定使用较低成本的PHY芯片RTL8201F-VB-CG芯片。移植官网的以太网demo程序&#xff0c;git上下载了一份很好看的rtl8201F的驱动程序&#xff0c;用来替换官方demo的lan8742程序。并没有直接通&#xff0c;于是开始了调试之路。 二…...

Java中Static关键字的五种用法详解

Static的五种用法大致如下&#xff1a; 修饰成员变量&#xff0c;使其成为类变量&#xff0c;也叫静态变量修饰成员方法&#xff0c;使其成为类方法修饰内部类&#xff0c;使其成为静态内部类静态代码块静态导包 直接一点&#xff0c;static关键字就是把属性和方法变为类相关&…...

WebSocket 测试工具

一、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直…...

低代码开发的未来~

IT 团队依靠笨重的软件开发流程和劳动密集型的手工编码来构建有形、可靠和现代应用程序的时代即将结束。随着新自动化技术的兴起、渴望创新的客户和最终用户的期望和需求迅速提高以及开发人员的短缺&#xff0c;软件行业被迫寻求替代方法&#xff0c;不仅提供服务和产品&#x…...

蓝桥杯真题——模拟灌溉系统

尽量每天都自己写一遍模板&#xff0c;记住模板就好写了 以下内容直接在模板内进行 基本任务&#xff1a;要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号&#xff0c;模拟湿度传感器输出信号…...

【数据结构】双向链表实现

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 一、什么是双向链表 二、双向链表的实现 一、什么是双向链表 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接后…...

无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】

文章目录1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置路由器。 …...

CentOS 7+Docker搭建rabbitMQ无法访问15672端口

CentOS 7Docker搭建rabbitMQ无法访问15672端口 1.我拉取的镜像自带管理UI界面 所以不可能是没有开启管理UI界面的原因 2.防火墙关闭状态 所以也不是防火墙的问题 3.在虚拟机本机localhost:15672也访问不了 4.端口监听是正常的 5.最后发现我容器内curl能够通&#xff0c;容…...

面试官:如何保证接口幂等性?一口气说了9种方法!

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址 大家好&#xff0c;我是大彬~ 今…...

蓝桥杯刷题冲刺 | 倒计时14天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.最长递增2.走迷宫3.解立方根4.回文特判5.修改数组1.最长递增 题目 链接&#xff1a; 最长递增…...

【数据结构】树的概念

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

Qt Glog toStdWString转char* 中文乱码

#include <QTextCodec>void LogWriter::init(void) {InitGoogleLogging("ui-fundus");char log_path[256] {0};FLAGS_stderrthreshold GLOG_INFO; // INFO WARNING ERROR FATAL, 是输出到stderr(app Output/cli)的阀值FLAGS_alsologtostderr false; // 当这…...

基于线性Kalman观测器(LKF)的2、4、7自由度悬架主动控制合集

目录 前言 1. 1/4车悬架仿真分析 2. 1/2车悬架仿真分析 3. 整车车悬架仿真分析 3.1 KF观测状态 3.2性能指标 4 .KF调参总结 5.文章总结 前言 对于kalman的原理介绍在上篇文章中已经做了详尽剖析&#xff0c;本篇进行实战&#xff0c;将其应用于悬架系统&#xff0c;其实…...

第二章 作业(6789B)【编译原理】

第二章 作业【编译原理】前言推荐第二章 作业678911最后前言 以下内容源自《编译原理》 仅供学习交流使用 推荐 无 第二章 作业 6 6.令文法G6为 N→D|ND D→0|1|2|3|4|5|6|7|8|9 (1)G6的语言L(G6)是什么? (2)给出句子0127、34和568的最左推导和最右推导。 &#xff08;…...

【java】连续最大和、统计回文

目录 1.连续最大和 2.统计回文 1.连续最大和 链接&#xff1a;连续最大和_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a;一个数组有 N 个元素&#xff0c;求连续子数组的最大和。 例如&#xff1a;[-1,2,1]&#xff0c;和最大的连续子数组为[2,1]&#xff0c;其和为 3 输…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...