js过渡效果_从灭霸的无限手套说起,前端实现效果

本文围绕实现Google搜索彩蛋效果展开,从html页面获取、DOM转canvas、粒子效果实现及其他细节调整等方面进行实践。html页面尝试扒取多个网站,最终选择企鹅电竞直播列表页;DOM转canvas选用html2canvas库并做代理处理;粒子效果优化渲染方式;还对点击动画、音效及页面滚动等做了细节调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

751894b003aed2776988245ed7663cb8.png

最近妇联4在热映,先剧透两个精彩片段。

87065e7d47b7fef74ff48876828e84e2.gif
ad0d3218eceb3642fa4e845421c9fbef.gif

前两天看到Google搜索有个彩蛋,搜索灭霸或者thanos,点击右边的无限手套触发彩蛋,打个响指,消灭一半的搜索结果条目,消失特效类似电影里的。

d16441d18824a4991571da97f41d1605.gif

首先分析下这个彩蛋主要包括

  1. 点击手套动画效果
  2. 消失的搜索条目的粒子效果

接下来是从以下方面着手

  1. html页面
  2. DOM转canvas
  3. 粒子效果
  4. 其他包括音效、页面平滑滚动等

html页面(扒网页)

首先排除扒Google搜索页面,因为服务器用的是国内阿里云访问不了。

然后就打算扒百度的搜索页,用的是PHP程序,我知道的能够获取页面代码的有file_get_content和cURL函数,虽然拿到了页面代码,但是只要搜索结果那些DOM的话用正则比较麻烦,搜了下找到phpQuery库,它能像jQuery操作那样拿到指定DOM,和Node.js的cheerio包类似。但是百度的这个页面样式类是动态的,还要把整个style内容也输出,而且很多图片大概是经过了什么处理,没权限显示不了,遂放弃。

接着扒斗鱼的直播列表页,返回一堆乱码,实力告退了。最后选择了相似的企鹅电竞直播列表页,页面算是搞定了。

DOM转canvas

前端有html2canvas和dom-to-image两个库可以把页面指定元素转化为画布或图片,html2canvas比较有名些,早期我也是用这个库做前端截图功能(https://imusic.github.io/clip/),但是它对CSS3的处理并不好,后来我发现了dom-to-image这个库,它对CSS3的处理就比较好了,而且体积更小,所以又用这个库替换了(https://demo.vczhan.com/clip/)。

d3da11885f7eae630eebce2e083cbca7.png

不过因为要转化的内容里有跨域的图片,canvas对此做了限制,我们需要对图片做代理处理。dom-to-image这个库并没有提供相关的代理插件,最后还是用html2canvas这个库。页面没有复杂的元素,并且这个库近来做了更新,对CSS3支持好了些,作者还提供了两种语言的代理,分别是Python版本的和Node.js版本的,不过我选择了其他人写的PHP版本。前端只要配置相关参数就可以。服务器端则会在文件目录下新建cache目录存放图片并返回给前端渲染到画布上。(不知能否改成不存储图片文件而是改成输出base64或者blob数据)

7b1a2863fd90f5bc0b232adccd0f9520.png

粒子效果

粒子效果比较难的部分是怎么调整各个参数到合适的值还要保证动画不卡。其实js计算过程并不会让动画卡顿,主要瓶颈在渲染阶段。

渲染部分原来用遍历粒子直接绘制,但因为粒子较多,动画看起来有点卡。

c72b234bec694fba386d1427c2978fc9.png

后来改成每次渲染时,先得到空白画布的图像数据,然后遍历粒子,给图像数据对应的位置加上rgba,最后将图像数据放回画布。

5987ef6de35bc1e3f701b50e49b74f70.png

Google那个页面是用了多个canvas,可以参考下面的粒子

「链接」

其他

其他就是些细节调整,比如点击手套的过渡动画并加上音效,过渡时间和延迟要慢慢调到合适的使动画与音效对应。当某个DOM要消失也要加上音效,并且页面平滑滚动,使其位于屏幕中心,可以直接用scrollIntoView这个方法。

ecece027500d843352041dde49055e9a.png

素材都可以从Google彩蛋页里提取,还有其他一些细节就不逐一赘述了。

作者: vczhan来源:思否原文见链接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值