HTML5 Canvas与JavaScript携手绘制动态星空背景

这篇具有很好参考价值的文章主要介绍了HTML5 Canvas与JavaScript携手绘制动态星空背景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、程序代码

二、代码原理

三、运行效果


HTML5 Canvas与JavaScript携手绘制动态星空背景,HTML,HTML5,Canvas,JavaScript,前端开发,Web开发,CSS样式

一、程序代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>星空背景</title>
</head>
<body style="overflow-x:hidden;">
    <canvas id="canvas"></canvas> <!-- 创建一个画布元素 -->
</body>

<script>
    // 获取画布元素和2D上下文
	canvas = document.getElementById('canvas');
	ctx = canvas.getContext('2d'); 
	// 设置画布宽度和高度
	w = canvas.width = window.innerWidth;		
	h = canvas.height = window.innerHeight-50; 
	
	hue = 217; // 设定颜色
	stars = []; // 存储星星的数组
	count = 0,
	maxStars = 1500; // 星星数量

    // 创建用于渲染星星的小画布
	canvas2 = document.createElement('canvas');
	w2 = canvas2.width = 100;
	h2 = canvas2.height = 100;
	ctx2 = canvas2.getContext("2d");
	gradientCache = ctx2.createRadialGradient(w2 / 2, h2 / 2, 0, w2 / 2, h2 / 2, w2 / 2);
	gradientCache.addColorStop(0.025, '#fff');
	gradientCache.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)');
	gradientCache.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)');
	gradientCache.addColorStop(1, 'transparent');
	ctx2.fillStyle = gradientCache;
	ctx2.beginPath();
	ctx2.arc(w2 / 2, h2 / 2, w2 / 2, 0, Math.PI * 2);
	ctx2.fill();

    // 生成随机数
	function random(min, max) {
		if (arguments.length < 2) {
			max = min;
			min = 0;
		}
		if (min > max) {
			var hold = max;
			max = min;
			min = hold;
		}
		return Math.floor(Math.random() * (max - min + 1)) + min;
	}

    // 确定星星轨道半径
	function maxOrbit(x, y) {
		var max = Math.max(x, y), diameter = Math.round(Math.sqrt(max * max + max * max));
		return diameter / 2;
	}

    // 构造函数用于创建星星对象
	Star = function() {
		this.orbitRadius = random(maxOrbit(w, h));
		this.radius = random(60, this.orbitRadius) / 10;
		this.orbitX = w / 2;
		this.orbitY = h / 2;
		this.timePassed = random(2, maxStars);	
		this.speed = random(this.orbitRadius) / 120000;
		this.alpha = random(2, 10) / 10;
		count++;
		stars[count] = this;
	}

    // 在画布上绘制星星
	Star.prototype.draw = function() {
		x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX;
		y = Math.cos(this.timePassed) * this.orbitRadius + this.orbitY;
		twinkle = random(10);

		if (twinkle === 1 && this.alpha > 0) {
			this.alpha -= 0.05;
		} else if (twinkle === 2 && this.alpha < 1) {
			this.alpha += 0.05;
		}

		ctx.globalAlpha = this.alpha;
		ctx.drawImage(canvas2, x - this.radius / 2, y - this.radius / 2, this.radius, this.radius);
		this.timePassed += this.speed;
	}

    // 创建一定数量的星星对象
	for (var i = 0; i < maxStars; i++) {
		new Star();
	}

    // 开始绘制星空背景
	function start() {
		ctx.globalCompositeOperation = 'source-over';
		ctx.globalAlpha = 1;
		ctx.fillStyle = 'hsla(' + hue + ', 64%,6%,0.2)';
		ctx.fillRect(0, 0, w, h)

		ctx.globalCompositeOperation = 'lighter';
		for (var i = 1, l = stars.length; i < l; i++) {
			stars[i].draw();
		};
		window.requestAnimationFrame(start);
	}

	start(); // 调用开始函数
</script>
</html>

二、代码原理

这段代码通过 HTML5 的 <canvas> 元素和 JavaScript 实现了一个星空背景效果。首先,它在页面加载时创建了一个全屏大小的画布,并使用 JavaScript 生成了多个具有不同运动轨道的星星对象。每颗星星都具有随机的半径、位置、运动速度和闪烁效果。通过使用定时器和 requestAnimationFrame 方法,实现了星星的运动和闪烁效果,从而呈现出逼真的星空背景。整体效果是一个动态的、具有视差效果的星空背景,为网页增添了视觉吸引力。

  1. 首先是 HTML 结构部分:

    • 定义了一个 HTML 文档,并设置了字符集为 UTF-8。
    • 设置了页面的标题为“星空背景”。
    • 在 body 中定义了一个画布元素 <canvas>,并指定了一个 id 为 "canvas"。
  2. 紧接着是 JavaScript 部分:

    • 获取了 <canvas> 元素以及其 2D 绘图上下文。
    • 设置了画布的宽度和高度为窗口的宽度和高度减去 50。
    • 定义了一些变量,如颜色值、存储星星的数组、星星数量等。
  3. 创建用于渲染星星的小画布:

    • 创建了一个新的 <canvas> 元素作为缓存画布。
    • 设置了缓存画布的宽高,并获取其 2D 上下文。
    • 创建了一个径向渐变对象,定义了星星的颜色渐变规则。
    • 绘制了一个圆形填充的图案,代表星星的外观。
  4. 定义了两个辅助函数:

    • random(min, max) 用于生成指定范围内的随机数。
    • maxOrbit(x, y) 用于确定星星轨道的最大半径。
  5. 创建了一个构造函数 Star 用于创建星星对象:

    • 初始化了星星的轨道半径、半径大小、位置等属性。
    • 将每个创建的星星对象存储到 stars 数组中。
  6. 定义了 Star 原型对象的 draw 方法:

    • 根据时间变化计算星星的位置坐标。
    • 控制星星闪烁效果的透明度变化。
    • 使用缓存画布绘制星星。
    • 更新星星的时间,实现星星的运动效果。
  7. 创建了一定数量的星星对象,并将其存储在 stars 数组中。

  8. 定义了 start 函数开始绘制星空背景:

    • 设置了画布的全局合成操作模式和透明度。
    • 填充了一个半透明的矩形作为背景。
    • 设置了全局合成操作模式为 'lighter',实现星星的叠加效果。
    • 遍历所有星星对象,并调用其 draw 方法进行绘制。
    • 使用 window.requestAnimationFrame 实现动画效果。
  9. 调用 start 函数,开始绘制星空背景效果。

三、运行效果

HTML5 Canvas与JavaScript携手绘制动态星空背景,HTML,HTML5,Canvas,JavaScript,前端开发,Web开发,CSS样式

HTML5 Canvas与JavaScript携手绘制动态星空背景,HTML,HTML5,Canvas,JavaScript,前端开发,Web开发,CSS样式

HTML5 Canvas与JavaScript携手绘制动态星空背景,HTML,HTML5,Canvas,JavaScript,前端开发,Web开发,CSS样式文章来源地址https://www.toymoban.com/news/detail-828665.html

到了这里,关于HTML5 Canvas与JavaScript携手绘制动态星空背景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTML5 Canvas(画布)

    canvas标签定义图形,比如图表和其他图像,你必须用脚本来绘制图形。 在画布上( Canvas )画一个共红色矩形,渐变矩形,彩色矩形,和一些彩色文字。 HTML5canvas元素用于图形绘制,通过脚本(通常是 Javascript)来完成。 canvas标签是图形容器,必须使用脚来绘制图形。 你可以

    2024年02月14日
    浏览(45)
  • Canvas绘制毛玻璃背景分享海报

    最近重新设计了分享海报,用毛玻璃作为背景,使整体更有质感,如果没有用到canvas,毛玻璃效果其实很好实现,给元素添加一个滤镜即可(比如:filter: blur(32px)),但是实践的过程中发现,canvas在IOS端一直没有效果,查了一个文档发现IOS端不支持filter。。。有点想骂人。。

    2024年02月12日
    浏览(37)
  • html5学习笔记14-Canvas 图形

    https://www.runoob.com/html/html5-canvas.html Canvas 参考手册. https://www.runoob.com/tags/ref-canvas.html HTML5 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. 标签只是图形容器,您必须使用脚本来绘制图形。 你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。 创建一

    2024年02月11日
    浏览(54)
  • 关于HTML5画布canvas的功能

    一、画布的使用 1、首先创建一个画布(canvas) canvas id=”myCanvas” width=”200” height=”100” style=”border:1px solid #000000”/canvas 2、使用JavaScript来绘制图像 script Var c=document.getElementByID(“myCanvas”)//得到画布 Var ctx=c.getContext(“2d”);//得到画笔 Cxt.fillStyle=”#FF0000”;//填充颜色 Cxt

    2024年02月06日
    浏览(47)
  • (小程序)canvas 绘制图片做背景(新手向)

    小程序绘制图片为背景,首先我们需要把图片先下载下来(这里最好是封装一个函数,因为背景不可能只有一张的)下面是代码,一般直接复制就能使用,有可能需要微调

    2024年02月07日
    浏览(37)
  • 编程笔记 html5&css&js 032 HTML Canvas

    Canvas画布,就是可以用来画画的地方,不是用户在浏览器上画图,而是会javascript画图。这区别于直接载入一张图片,是可以根据需要进行绘制。 HTML canvas 元素用于通过脚本(通常是 JavaScript)动态地绘制图形。 canvas 元素只是图形的容器。您必须使用脚本来绘制实际的图形。

    2024年01月23日
    浏览(69)
  • HTML5 Canvas和Svg:哪个简单且好用?

    HTML5 Canvas 和 SVG 都是基于标准的 HTML5 技术,可用于创建令人惊叹的图形和视觉体验。 首先,让我们花几句话介绍HTML5 Canvas和SVG。 Canvas(通过 标签使用)是一个 HTML 元素,用于在用户计算机屏幕上动态绘制图形(线条、条形、图形等)。不过,canvas 元素只是信息的容器,绘图

    2024年02月13日
    浏览(52)
  • 情人节定制:HTML5 Canvas全屏七夕爱心表白特效

    “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”,七夕节表白日,你要错过吗?如果你言辞不善,羞于开口的话,可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效,全屏的爱心和表白语,了解一下!  🌹 最后,祝天下有情人终成眷属 🌹

    2024年02月11日
    浏览(46)
  • Html利用Canvas绘制图形

    今天接到粉丝私信,询问是否可以通过Canvas绘制一些图形,然后根据粉丝提供的模板图,通过Canvas进行模拟绘制,通过分析发现,图形虽然相对简单,但是如果不借助相应的软件,纯代码绘制还是稍微费些时间。今天将绘制图形源码分享出来,仅供学习分享之用,如有不足之

    2024年02月16日
    浏览(48)
  • HTML5 2d canvas 库 —— Fabric.js 和 Konva.js

    原生 canvas 的操作主要基于上下文,需要使用者自己从0开始去实现一些基本功能,比较复杂。而 canvas 库文件则封装好了许多便利的对象,使得用户可以在比较高级的层面上进行绘制。 Fabric.js 官网:Fabric.js Javascript Canvas Library Konva.js 官网:Konva 中文文档 中文API 优点: 比较老

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包