分享利用canvas实现知乎登录页的实例代码
本篇文章主要介绍了canvas简单快速实现知乎登录页背景效果的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
前言
打开知乎的登录页,就可以看到其背景有一个动效,看起来好像蛮不错的样子:
这个效果使用canvas是不难实现的,接下来就一步一步地讲解并实现这个效果。
分析
在动工之前先分析这个效果到底是如何运动的。首先要理解的是虽然看起来好像所有线和圆都在运动,但实际上只有圆才是在运动的,而线只不过是把满足一定条件的任意两个圆连接在一起。那么接下来就分析圆是怎么运动的,从效果看,每个圆都是在做匀速直线运动,而且运动方向不一,通过物理相关知识可以得知,每一个圆在水平方向和垂直方向都有一个速度。最后是当圆运动出画布任一边界的时候,这个圆会从出边界的这条边的对边再次进入画布。把这三个关键点理解清楚了就清晰很多了。
实践
先创建一个canvas画布:
// 这里就简单地设置下背景色 <body style="background:#f7fafc;"> <canvas id="canvas" style="width: 100%; height: 100%;"></canvas> </body>
接着先获取canvas的上下文环境并设置一些共用的属性
var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); canvas.width = document.documentElement.clientWidth; canvas.height = document.documentElement.clientHeight; context.fillStyle = "rgba(0, 0, 0, 0.08)"; context.strokeStyle = "rgba(0, 0, 0, 0.05)"; context.lineWidth = 0.5;
接下来绘制圆,那么绘制圆需要圆的圆心坐标,半径,水平方向的速度,垂直方向的速度,并且这些信息要满足一定的条件,通过一个函数来创建:
// 存放所有圆的数组,这里用balls var balls = []; function createBall() { // x坐标 var _x = Math.random() * canvas.width; // y坐标 var _y = Math.random() * canvas.height; // 半径 [0.01, 15.01] var _r = Math.random() * 15 + 0.01; // 水平速度 [±0.0, ±0.5] var _vx = Math.random() * 0.5 * Math.pow( -1, Math.floor(Math.random() * 2 + 1) ); // 垂直速度 [±0.0, ±0.5] var _vy = Math.random() * 0.5 * Math.pow( -1, Math.floor(Math.random() * 2 + 1) ); // 把每一个圆的信息存放到数组中 balls.push({ x: _x, y: _y, r: _r, vx: _vx, vy: _vy }); }
然后根据自己的情况选择需要绘制多少个圆,这里我假设有20个,看起来舒服一点:
// 圆的数量 var num = 20; for(var i = 0; i < num; i++) { createBall(); }
现在圆的信息都有了,下一步就是绘制每一帧的圆和线,创建一个render函数,然后在函数内先绘制所有的圆出来:
for(var k = 0; k < num; k++) { context.save(); context.beginPath(); context.arc( balls[k].x, balls[k].y, balls[k].r, 0, Math.PI*2 ); context.fill(); context.restore(); }
接着要遍历每两个圆的圆心之间的距离是否小于某个临界值(比如500),满足则将这两个圆的圆心连接起来:
for(var i = 0; i < num; i++) { for(var j = i + 1; j < num; j++) { if( distance( balls[i], balls[j] ) < 500 ) { context.beginPath(); context.moveTo( balls[i].x, balls[i].y ); context.lineTo( balls[j].x, balls[j].y ); context.stroke(); } } }
这里的 distance 函数就是计算两点之间的距离:
function distance(point1, point2) { return Math.sqrt( Math.pow( (point1.x - point2.x), 2 ) + Math.pow( (point1.y - point2.y), 2 ) ); }
还有一步就是判断圆是否超出了边界值,若满足条件则从对边再次进来:
for(var k = 0; k < num; k++) { balls[k].x += balls[k].vx; balls[k].y += balls[k].vy; if( balls[k].x - balls[k].r > canvas.width ) { balls[k].x = 0 - balls[k].r; } if( balls[k].x + balls[k].r < 0 ) { balls[k].x = canvas.width + balls[k].r; } if( balls[k].y - balls[k].r > canvas.height ) { balls[k].y = 0 - balls[k].r; } if( balls[k].y + balls[k].r < 0 ) { balls[k].y = canvas.height + balls[k].r; } }
当然如果想简单点,只要圆超出就移除并重新生成一个圆即可:
if( balls[k].x - balls[k].r > canvas.width || balls[k].x + balls[k].r < 0 || balls[k].y - balls[k].r > canvas.height || balls[k].y + balls[k].r < 0) { balls.splice(k, 1); createBall(); }
这样每一帧绘制的细节就完成了,最后一步就是让圆都运动起来:
(function loop(){ render(); requestAnimationFrame(loop); })();
到此,整个效果就出来了。当然这里面有很多细节可以自己琢磨琢磨,让这个效果变得更加细腻多彩。希望对新手有所帮助。
【相关推荐】
1. 免费h5在线视频教程
2. HTML5 完整版手册
以上是分享利用canvas实现知乎登录页的实例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

当你在自己电脑上登过别人steam账号之后,恰巧这个别人的账号也有wallpaper软件,切换回自己账号之后steam就会自动下载别人账号订阅的壁纸,用户可以通过关闭steam云同步解决。wallpaperengine登录别的号后下载别人的壁纸怎么办1、登陆你自己的steam账号,在设置里面找到云同步,关闭steam云同步。2、登陆你之前登陆的别人的steam账号,打开wallpaper创意工坊,找到订阅内容,然后取消全部订阅。(以后防止找不到壁纸,可以先收藏再取消订阅)3、切换回自己的stea

随着社交媒体的迅速发展,小红书已经成为许多年轻人分享生活、探索新产品的热门平台。在使用过程中,有时用户可能会遇到登录以前账号的困难。本文将详细探讨如何解决小红书登录旧账号的问题,以及如何应对更换绑定后可能遗失原账号的情况。一、小红书怎么登录以前的账号?1.找回密码登录如果长时间未登录小红书,可能导致账号被系统回收。为了恢复访问权限,你可以尝试通过找回密码的方式重新登录账号。操作步骤如下:(1)打开小红书App或官网,点击“登录”按钮。(2)选择“找回密码”。(3)输入你注册账号时所使用的手机号码

Discuz后台登录问题解决方法大揭秘,需要具体代码示例随着互联网的快速发展,网站建设变得越来越普遍,而Discuz作为一款常用的论坛建站系统,受到了许多站长的青睐。然而,正是因为其功能强大,有时候我们在使用Discuz的过程中会遇到一些问题,比如后台登录问题。今天,我们就来大揭秘Discuz后台登录问题的解决方法,并且提供具体的代码示例,希望能帮助到有需要

近日有一些小伙伴咨询小编快手电脑版怎么登录?下面就为大家带来了快手电脑版的登录方法,有需要的小伙伴可以来了解了解哦。第一步:首先在电脑的浏览器上百度搜索快手官网。第二步:在搜索结果列表里面选取第一条。第三步:进入到快手官网主页面后,点击视频的选项。第四步:点击右上角的用户头像。第五步:在弹出的登录菜单里面点击二维码登录。第六步:之后打开手机上的快手,点击左上角的图标。第七步:点击二维码标志。第八步:在我的二维码界面点击右上角的扫描图标之后,扫描电脑上的二维码即可。第九步:最后电脑版的快手就登录成

夸克怎么登录两个设备?夸克浏览器是支持同时登陆两个设备的,但是多数的小伙伴不知道夸克浏览器如何登陆两个设备,接下来就是小编为用户带来的夸克登陆两个设备方法图文教程,感兴趣的用户快来一起看看吧!夸克浏览器使用教程夸克怎么登录两个设备1、首先打开夸克浏览器APP,主页面点击【夸克网盘】;2、接着进入到夸克网盘界面,选择【我的备份】服务功能;3、最后选择其中的【切换设备】即可更换新设备登陆两个。

小红书如今已经融入了许多人的日常生活,其丰富的内容和便捷的操作方式让用户乐此不疲。有时候,我们可能会忘记账号密码,只记得账号而无法登录确实让人感到困扰。一、小红书只记得账号怎么登录?当忘记密码时,我们可以通过手机验证码的方式登录小红书。具体操作如下:1.打开小红书App或网页版小红书;2.点击“登录”按钮,选择“账号密码登录”;3.点击“忘记密码?”按钮;4.输入你的账号,点击“下一步”;5.系统会发送验证码到你的手机,输入验证码后点击“确定”;6.设置新的密码并确认。你还可以通过第三方账号(如

谷歌浏览器无法登录账号怎么办?很多用户在使用这款软件的时候,某些功能需要用户们登录谷歌账号才可以使用,但是尝试了很多次,都没有登录成功,面对这个问题,不少用户都不知道应该如何解决,那么本期小编就来和各位分享解决方法,希望今日的软件教程内容可以给大伙带来帮助。 解决方法如下: 1、点击桌面一个浏览器,打开之后看到这个样子。 2、此时如果弹出登录,点击它,如看不到的点击右上角。 3、点击登录,然后输入你的账号,账号不用输入@之后的一节,点击下一步。 4、输入密码,看到这个提示,点击启用

115网盘是个能够存放很多资源的网盘,那么115网盘网页版登录入口是什么呢?用户们需要输入https://115.com这个网址就能够进入网盘,登录后就能使用。这篇115网盘网页版登录最新入口分享能够告诉大家具体该怎么使用这个功能,赶紧看看吧。115网盘网页版登录入口网站分享:https://115.com具体介绍:1、首先需要选择一个方式来登录网盘。2、在右上角能够看到上传的文件。3、可以在这里新建文件夹,切换不同模式。4、可以在文件里添加不同的标签。5、在网站上面能够看到用户们的私信。
