当前位置:首页 > 大街拾贝 > 正文内容

js 制作网页动态背景

liuxy11个月前 (01-18)大街拾贝531

装逼必备 canvas

canvas 简单来说就是一块画布,通过 JavaScript 来进行绘制,可以用来制作各种特效

那么如何利用 canvas 来制作一个动态的网页背景呢,就像这样子:

请添加图片描述

首先,我们就需要在我们的 html 页面中创建一个 canvas

<div id="background">
<canvas id="canvas"></canvas>
</div>

对,你没有看错,创建一个 canvas 就这么简单,甚至可以更简单,你只需要除去外面的 div,只写一个 canvas 就行了…

当然了,我这里的 div 添加了是用来设置背景的

然后就是简单的 css 设置了,只需要设置一下 div 的背景图片就行了

#background {    background: url("background.jpg");
    background-size: cover;
    opacity: 0.8;
}

简单介绍一下 background-size 的属性吧

描述
length 设置背景图像的高度和宽度。第一个值设置宽度 &#xff0c; 第二个值设置高度。如果只设置一个值 &#xff0c; 则第二个值会被设置为 “auto”。
percentage以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度 &#xff0c; 第二个值设置高度。如果只设置一个值 &#xff0c; 则第二个值会被设置为 “auto”。
cover把背景图像扩展至足够大 &#xff0c; 以使背景图像完全覆盖背景区域。背景图像的某些部分也许无法显示在背景定位区域中。
contain把图像扩展至最大尺寸 &#xff0c; 以使其宽度和高度完全适应内容区域。

那么简单的 html+css 之后,就到了我们的核心,JavaScript代码 了,至于每句代码的作用,我都写到注释中了,大家自己看吧,我就不再重复的介绍了一遍了

<script>
	//  设置 div 背景的宽高
	background = document.getElementById("background")
	background.style.width = innerWidth + 'px'
	background.style.height = innerHeight + 'px'

	//  获取 canvas 对象
	var canvas = document.getElementById("canvas")
	//  获取画笔
	var ctx = canvas.getContext("2d")

	//  设置 canvas 宽高
	canvas.height = innerHeight
	canvas.width = innerWidth

	//  定义一个粒子数组
	var particlesArray = []
	//  定义页面内粒子的数量
	var count = parseInt(canvas.width / 80 * canvas.height / 80)


	//  定义粒子类
	class Particle {    constructor(x, y) {
	        this.x = x
	        this.y = y
	        // x,y 轴的移动速度   -0.5 -- 0.5
	        this.directionX = Math.random() - 0.5
	        this.directionY = Math.random() - 0.5
	    }

	    //  更新点的坐标
	    update() {
	        this.x += this.directionX
	        this.y += this.directionY
	    }

	    //  绘制粒子
	    draw() {        ctx.beginPath()
	        ctx.arc(this.x, this.y, 2, 0, Math.PI * 2)
	        ctx.closePath()
	        ctx.fillStyle = "white"
	        ctx.fill()
	    }
	}

	//  创建粒子
	function createParticle() {
	    //  生成一个点的随机坐标
	    var x = Math.random() * innerWidth
	    var y = Math.random() * innerHeight

	    particlesArray.push(new Particle(x, y))
	}

	//  处理粒子
	//  先更新坐标,再绘制出来
	function handleParticle() {    for(var i = 0; i < particlesArray.length; i++) {        var particle = particlesArray[i]
	        particle.update()
	        particle.draw()
	        //  超出范围就将这个粒子删除
	        if(particle.x < 0 || particle.x > canvas.width || particle.y < 0 || particle.y > canvas.height) {            particlesArray.splice(i, 1)
	        }

	        //  绘制两个点之间的连线
	        for(var j = i + 1; j < particlesArray.length; j++) {            dx = particlesArray[j].x - particlesArray[i].x
	            dy = particlesArray[j].y - particlesArray[i].y
	            dist = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2))
	            if(dist < 100) {                ctx.beginPath()
	                ctx.strokeStyle = "rgba(255, 255, 255, " + (1 - dist / 100)
	                ctx.moveTo(particlesArray[i].x, particlesArray[i].y)
	                ctx.lineTo(particlesArray[j].x, particlesArray[j].y)
	                ctx.closePath()
	                ctx.lineWidth = 1
	                ctx.stroke()
	            }
	        }
	    }
	}

	function draw() {
	    //  首先清空画布
	    ctx.clearRect(0, 0, canvas.width, canvas.height)
	    //  如果粒子数量小于规定数量,就生成新的粒子
	    if(particlesArray.length < count) {        createParticle()
	    }

	    //  处理粒子
	    handleParticle()}

	//  设置定时器
	setInterval(draw, 10)

</script>

在页面中加入这部分 js 代码后,我们就可以看到动态的背景效果了。



打赏 支付宝打赏 微信打赏

扫描二维码推送至手机访问。

版权声明:本文由十六大街发布,如需转载请注明出处。

本文链接:http://16dajie.com/shibei/53.html

“js 制作网页动态背景” 的相关文章

多个WPS帐号怎么合并成一个?合并帐号功能了解下

多个WPS帐号怎么合并成一个?合并帐号功能了解下

 我们在用WPS的时候,往往会登录账号,这样可以把文档数据上传到云文档,以便大家可以随时随地查阅和编辑更新。如果没有登录账号的话,只能是单个的保存文件,并且存储位置也是一定的,只能在保存文件的这台电脑上查阅和编辑,所以登录WPS账号之后再进行各种编辑就方便多了,不管在哪用的那个设备只要账号一样,里面...

电信/移动/联通/广电机顶盒开启ADB方法汇总

电信/移动/联通/广电机顶盒开启ADB方法汇总

有很多人家里都有机顶盒,过期了不想再续费就闲置下来一个电视机顶盒,还想继续看电视怎么办?那就刷机破解,之后即可和网络电视盒子一样安装第三方软件,刷机必备的一定是开启ADB调试的方法,今天就来跟大家分享一下电信/移动/联通/广电机顶盒开启ADB方法汇总。电信机顶盒开启ADB方法汇总广东电信华为Q21使...

网站挂灯笼代码,网站灯笼Css代码

网站挂灯笼代码,网站灯笼Css代码

   最近又要到一年一度的春节了,很多网站也开始挂上了灯笼,我也趁着这个机会水一篇文章,据我所知这段代码好久了,具体出处也无从考证,不过我看网上都是一边灯笼,我觉得不大好看就改了的两边灯笼的版本出来,代码会放在下面,按照自己的需要拿吧。版本一:单边居右HTML代码:将下面的HTM...

快速设计高逼格的LOGO

快速设计高逼格的LOGO

在我们制作LOGO的时候,经常会看到很多大神的设计稿有很多高精度的辅助线,让整个LOGO显得非常精细(如下图中的LOGO)。而且很多同学在制作LOGO形状的时候经常因为路径线条的画的不流畅,而显得LOGO粗糙廉价。那么今天MICU教大家如何快速绘制高品质的LOGO,利用5分钟高效完成设计稿。新建导入...

像素图标设计需要注意的问题

像素图标设计需要注意的问题

像素图标设计需要注意的问题有很多,下面我们先来设计一个像素图标。    首先我们用Photoshop新建一个14x14像素大小的透明文件。下面我们来画图标的轮廓,笔刷选择1px的铅笔,使用暗灰色调。注意:1.绘制直线可以在起始点点击一下,再按住Shift点击直线的终点即可。&nb...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。