奇技指南

我们常说的彩蛋,一般是指影视剧在剧情结束之后出现的影视片段,或者是游戏中制作者特意为玩 家留下的、隐藏在游戏中的一些有趣的内容。

对于搜索引擎来说,彩蛋是指搜索引擎在特定的检索 词下,刻意为用户展示的一些额外信息。搜索引擎彩蛋的出现往往在用户的预期之外,其独立于正 常的搜索结果流,是用户在检索时预期之外的信息获取方式,用途常为态度表示、社会责任、商业 推广等。在本文中,“彩蛋”特指“搜索引擎彩蛋”

360搜索彩蛋的发展历程

在以往很长的一段时间内,360搜索彩蛋的开发方式为按需开发。当发起一个彩蛋需求后,前端开 发工程师会按照需求逐步拆解,将设计出的彩蛋效果还原到网页中。比如下图1呈现的碎屏彩蛋 ——当用户搜索某个词时,页面呈现出碎裂效果。

图1 碎屏彩蛋

像这类彩蛋需求往往都比较复杂,并且无共通性,前端开发人员除了需要处理彩蛋本身复杂的实现逻辑外,还需要考虑彩蛋的浏览器兼容性、定时退出、主动关闭次数、窗口自适应等逻辑,开发周期较久。由于此类彩蛋需要优秀的创意支撑,因此需求量并不大,按需开发带来的消耗我们还可以接受。

从去年开始,360搜索UED团队发起了节气彩蛋计划——二十四节气当天,与该节气相关的搜索词的搜索结果页面都会将一副优美的插画作为彩蛋呈现给用户。此时按需开发的复杂性便无法接受了,尤其是重复的逻辑处理。因此,我们将彩蛋的公用部分代码提取封装后,制作成通用节气彩蛋生成工具,只需要简单配置一下即可生成彩蛋脚本,见下图2。

图2 通用节气彩蛋生成工具 - PC版

基于这个工具,我们完成了2018年初至今全部的节气彩蛋上线工作,设计同学与运营同学直接对接,无需前端开发人员参与。这里必须盛赞一下360搜索UED团队,二十四节气插画真的全部都超级好看,敬请大家在24节气当天来360搜索(so.com)找插画彩蛋哟。

图3 二十四节气彩蛋插画

如果对往期插画感兴趣也可以去站酷

关注360搜索UED,查看更多高清大图。

有了通用节气彩蛋生成工具后,我们都尝到了“偷懒”的乐趣,“点点按钮”就发布上线,成为了前端 同学和运营同学的共同追求,更多的彩蛋生成工具先后诞生了。如通用单图彩蛋生成工具,服务于 弹出单张图片蒙层类型的彩蛋;通用飘落彩蛋生成工具,适用于一切飘落、掉落类效果彩蛋的生 成。有了这些生成工具之后,彩蛋成为了一种常规且便捷的运营手段,使用率大大提升。据作者的 不完全统计,截止目前使用生成工具上线的彩蛋数量非常可观,见下图4。

图4 部分使用自动工具上线的彩蛋

动画类彩蛋的自动化开发

到这里,一般的彩蛋需求都可以很好地被满足了,但具有动画效果的彩蛋仍然没有很好的解决办法 ——要么使用gif图,要么则需要占用前端人力进行开发。于是,针对An(Adobe Animate CC) 和 Ae(Adobe After Effects CC)两个设计师常用的动画编辑软件,我们探索了两种方式来避免前端开发工作。

An动画彩蛋自动生成

An自带了动画预览功能,可以将设计师制作好的动画导出为浏览器可执行的脚本资源。我们通过分 析An导出后文件的特点和脚本结构,开发了An动画彩蛋自动生成工具

图5 An动画彩蛋自动生成工具

下表1列举出了此工具的优点和不足。

可以看出基于An的自动生成工具通用性不高,不具备普适价值,但仍然可以很好的满足我们团队内部的使用需求。经过验证,借助此工具自动生成的脚本可以正常地将插画师设计出的动效彩蛋还原至360搜索结果页。

Ae动画彩蛋自动生成

与An不同,得力于bodymovin插件和lottie-web库,Ae制作的动画可以被稳定地导出和还原。使用bodymovin插件,可以将Ae帧动画描述为一个json文件。这个json文件至关重要,通过lottie-web脚本库可以将动画还原至浏览器环境中。事实上,还有lottie-androidlottie-ios等多个库, 可以将动画还原到Native App、React Native、Flutter等开发环境中。在这里,我们只关注一 下lottie-web

lottie-web提供了丰富的动画播放API,比如播放、暂停、设置播放速度、指定播放某段动画等,有 了这些还原基础,只需要处理一下脚本执行时机,就可以把动画还原到搜索结果页中了。但仅仅如 此似乎不能满足复杂一些的交互需求,比如当我们希望用户点击某个按钮来触发某段动画的执行 时,就必须进行二次开发了。

为此,我们引入状态机机制,可以将复杂的动画切割为多个状态,通过状态机机制来控制动画执行的顺序。引入事件机制,除了状态机产生的自动状态切换,事件也可以引起状态切换,从而实现动画与用户之间的交互。

一句话概括Ae动画的还原思路:使用bodymovin生成的json用来描述动画的执行过程,使用状态机 和事件生成的json来描述动画的执行顺序。

为此,我们开发了Ae动画编辑器,来生成描述动画执行过程和执行顺序的json文件,再通过Ae动画彩蛋自动生成工具生成360搜索结果页的内嵌脚本并完成发布上线。

图6 Ae动画彩蛋生成工具和Ae动画编辑器

Ae动画编辑器的主要实现原理是基于动画关键帧的区间播放。lottie-web的API这里不再详细说 明,其中有一个API允许用户依据起始帧和结尾帧进行区间播放。我们引入状态机和事件机制后, 就可以用状态机自动触发或通过事件手动触发来引起播放区间的切换,从而实现整个动画顺序可编 辑、可交互。

举个例子,假设我们的期望是“动画在初始时停留在第1帧,直至用户点击后,开始在第1~50帧循环”,状态机和事件的配置即如下图7所示。

图7 状态机与事件配置

在设置状态机和事件之前,必须先规定动画的总帧数。状态机和事件都可以根据动画期望无限制的添加。可以设置“结束后自动前往”来自行改变动画状态,也可以通过事件来手动改变。事件类型包括常见的浏览器事件,触发事件后除了前往某个状态,还可以跳转到新页面等。上面配置的json描述如下。

将我们的意愿描述成上面的json后,结合lottie-web提供的API和事件,再将json还原成我们的描述 就比较容易了。这里只提一点注意事项,在还原事件时需要首先将事件类型去重,避免同一个事件重复绑定,事件触发后通过判断当前动画阶段来定位需要执行的任务。

访问下面的网址,可以在线体验Ae动画编辑器:

http://www.eastta.com/ae/index.html

Ae动画生成工具的缺点和不足之处如下表2所示

尽管有一些缺点,但仍无法掩盖其得强大的自动化开发的能力。借助Ae动画编辑器,我们可以对动画进行二次组装,且可实现简单的交互。目前,360搜索借助Ae动画彩蛋生成工具已经生成并上线了如2019母亲节、2019世界地球日等多个动画彩蛋。设计师使用Ae动画导出时,注意事项可以参考官方说明:

http://airbnb.io/lottie/#/after-effects?id=creating-lottie-animations

总 结

Ae动画编辑器具有很好的普适性,如果你还在使用传统的帧动画或者gif图来实现动画效果,可以尝试一下bodymovin + lottie技术,不仅可以帮我们还原动画,还可以做一些简单的交互设计。

生命不息,探索不止。通过回顾360搜索彩蛋开发方式的发展历程,我们可以看到相关人员通过不断努力地探索更加自动和智能的开发方式来解决工作中遇到的种种繁复的工作,从而有效降低成本,提高需求的落地效率。彩蛋开发方式的发展历程只是你我在工作道路上的一个小小的缩影,我自认为这种探索精神应该渗透到一切项目的迭代优化过程中,因此特意分享一下。

关于360技术

360技术是360技术团队打造的技术分享公众号,每天推送技术干货内容

更多技术信息欢迎关注“360技术”微信公众号

java 自动下载自动搜索_360搜索彩蛋自动化开发实践相关推荐

  1. 360搜索彩蛋自动化开发实践

    本文首发于360技术公众号,360搜索彩蛋自动化开发实践. 引子 我们常说的彩蛋,一般是指影视剧在剧情结束之后出现的影视片段,或者是游戏中制作者特意为玩 家留下的.隐藏在游戏中的一些有趣的内容.对于搜 ...

  2. 谷歌搜索技巧:搜索语法 隐藏彩蛋 高级设置

    谷歌搜索技巧:搜索语法 隐藏彩蛋 高级设置 Google是一个非常精密成熟的搜索引擎,其搜索结果的丰富性和准确度较其他搜索引擎都要好,但大多数用户都还只是停留在搜索框中输入一两个关键字,然后点击&qu ...

  3. 谷歌搜索技巧:搜索语法+隐藏彩蛋+高级设置

    Google是一个非常精密成熟的搜索引擎,其搜索结果的丰富性和准确度较其他搜索引擎都要好,但大多数用户都还只是停留在搜索框中输入一两个关键字,然后点击"搜索"按钮的阶段,这一过程是 ...

  4. 做人工智能必看的 45 篇论文,附下载地址 | 文末有彩蛋

    而AI领域的发展会是IT中最快的.我们所看到的那些黑客技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进,就必须改 ...

  5. java过滤微信表情符号_微信隐藏彩蛋!表情加符号就能传递“神秘信息”

    微信翻译出彩蛋. 而有的语音信息在转文字后也会有表情翻译的信息出现,比如「太生气了」就能召唤出一个的表情. 类似的小彩蛋还有很多,你很难说这是产品经理的小趣味还是产品对词语识别的 bug. 最近,用户 ...

  6. java 自动下载自动搜索_必应美图下载 - 自动更换批量下载的壁纸

    必应( Bing )搜索 每天 都会在 搜索界面 内更换 非常好看 的 背景图片,因此有不少网友将这些 图片 下载下来设置成 桌面壁纸 使用.同时,也有不少 站长 在自己的 网站 上通过 接口 将自己 ...

  7. STC12C5A60S2单片机实现ISP自动下载

    STC12C5A60S2自动下载程序 在我们使用STC系列单片机开发项目时,最烦人的就是每次点击Download之后的时候都要断电重新上电才能下载.相信很对朋友们都会遇到这样的问题; 如果仅仅是调试项 ...

  8. 【Electron】酷家乐客户端开发实践分享 — 软件自动更新

    作者:钟离,酷家乐PC客户端负责人 原文地址:webfe.kujiale.com/electron-au- 酷家乐客户端:下载地址 www.kujiale.com/activity/13- 文章背景: ...

  9. 双十一 天天开彩蛋入口

    超级红包领取入口 第一次抢的100%中奖,领取淘口令:¥YkdnciQvcdh$,长按复制本条信息,到[手机淘宝]即可查看 天猫双十一领红包地址:https://1111.tmall.com (每天都 ...

最新文章

  1. 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
  2. Linux下查看进程IO工具iopp
  3. CSV格式文件注意细节
  4. 电脑显示链接网络正常但是不能上网,用某些软件会提示系统丢失libeay32.dll
  5. centos7.3安装mysql5.7 解决 Access denied for user 'root'@'localhost' (using password: NO)
  6. 网上收集总结一下mssql( 部分)
  7. 下载Spring framework源码
  8. c语言项目图书馆借书,C语言打造—齐全的图书馆借阅系统
  9. CSS:border的属性
  10. C语言程序设计——猜数字游戏
  11. 什么是HashTable?HashMap和HashTable的区别
  12. python markdown2 样式_Python markdown2.markdown方法代碼示例
  13. word标题4降级标题5无法显示
  14. mysql备份 1044_Navicat访问MySQL出现1044/1045错误的解决方法
  15. Opencv-python 求原坐标点透视变换后对应坐标点
  16. 世界上最贵的跑车大全
  17. iOS 9 App Search教程
  18. 【论文简述】EPP-MVSNet: Epipolar-assembling based Depth Prediction for Multi-view Stereo(ICCV 2021)
  19. 2022-2028全球牛油果市场专题研究及投资评估报告
  20. linux查看网卡驱动信息,linux 查看网卡驱动信息

热门文章

  1. Ansible8:Playbook循环
  2. 25. 文件系统——源程序的编译安装(make,make install,ldd,ldconfig -v)
  3. Android学习之路五:Dialog和Toast
  4. @ImportResource和@PropertySource两个注解的区别
  5. [惊!] IE 10.0,你没看错! IE10 Platform Preview 1出来啰~
  6. 利用swoole coroutine协程实现redis异步操作
  7. 批量解决win10图标上有两个蓝色箭头的方法
  8. 几种c++字符串split 函数实现的比较
  9. 搭建dubbo框架的遇到的一些问题
  10. 【win32汇编】0x04 第一个窗口程序