IFE 热身任务解决过程手记

作者:©缉熙Soyaine
发布日期:2017-02-17

本篇主要记录完成 IFE 热身任务过程中我的思考过程和解决方法。

Warm up

IFE 热身任务解决过程手记_第1张图片
warm up

把空间延伸开来即可。

Step1

先找到一串奇怪的字符,但是发现长度不对,猜想可能是经过加密了,所以试了一些在线解密网站,用 BASE64 解出来了。

说个题外话,前一天晚上看到这串字符时丝毫没有想法,后来晚上做梦,梦见朋友起床时很兴奋的和我说“我解出来啦!是达芬奇密码。” 23333333 这个诡异的梦境。

IFE 热身任务解决过程手记_第2张图片
Step1 - vue or ctrl+a
IFE 热身任务解决过程手记_第3张图片
Step1 - BASE64

相关知识:
Base64是一种编码方法,特点如下:

  • 用64个字符
  • 表示任意二进制数据
  • 查表实现
  • 适合少量数据
  • 常用于在URL、Cookie、网页中传输
  • 不能用于加密

其实 JavaScript 自带有相关的处理方法 WindowBase64.atob() ,所以也可以直接在 Console 中调用语句来解码。

编码解码调用的方法名称正好相反。

var encodedData = window.btoa("Hello, world"); // 编码
var decodedData = window.atob(encodedData); // 解码

// encodedData: "SGVsbG8sIHdvcmxk"
// decodedData: "Hello, world"

### Step2

揣摩题意,标注引号的两个字影射了 `window` 和 `height` 两个特性,所以直接在 Console 里输入语句获取当前窗口高度,然后将密码值调整到相应数值即可。

`注: 此处截图时调整过窗口,所以密码值有些不一致。`

![Step2 - window.height](https://cl.ly/2H2z2r0c2B3D/[bdc80d68359c95fb6ce5fd2d8faadbe7]_Image%25202017-02-17%2520at%25207.17.11%2520PM.png)

这个页面仿真做得还不错,在 Elements 面板用 Shift 调整元素的 CSS 属性值时,伴随着过渡效果,的确有在拨动密码锁的感觉。

![Step2 - css](https://cl.ly/1F061l0m1f1M/[e763068c0434be287b0217b076c9a876]_Image%25202017-02-17%2520at%25207.19.34%2520PM.png)

### Step3

这一步就是 CSS 的位置与变换。比较繁杂的是字母 E。最开始我是使用的 `matrix` 作水平镜像翻转,需要经过一些计算。

![Step3 - matrix counting](https://cl.ly/042e1V2D360r/Image%202017-02-17%20at%209.21.42%20PM.png)

```css
.letter-e {
  position: absolute;
  transform: matrix(-0.94, 0.342, 0.342, 0.94, 560, -191);
}

http://www.boogdesign.com/examples/transforms/matrix-calculator.html -- 这是一个在线换算角度的网站。

后来看到了一种更好的解决办法,也就是下图中的写法,使用 rotateY,更好理解一些。

IFE 热身任务解决过程手记_第4张图片
Step3

总结一下,下面几种写法的效果是相同的:

{
//CSS 2D 变换
transform: matrix(-0.94, 0.342, 0.342, 0.94, 0, 0);
transform: rotate(-20deg) scaleX(-1);

//CSS 3D 变换
transform: rotate(20deg) rotateY(180deg);
}

Step4

IFE 热身任务解决过程手记_第5张图片
Step4 - route mao

步骤如下:

  1. 画出路线图,标记需要的坐标点
  2. 点击页面中各个点,在 Console 面板获得坐标值
  3. 处理语句
function moveBall(ball) {
    ball.at (9 , 47, ball => ball.wait(2000));
    ball.at (80 , 47, ball => ball.turnRight());
    ball.at (80 , 129, ball => ball.turnLeft());
    ball.at (221,  129, ball => ball.turnRight());
    ball.at (221,  236, ball => ball.turnRight());
    ball.at (79 , 236, ball => ball.turnLeft());
    ball.at (79 , 362, ball => ball.turnRight());
    ball.at (24 , 362, ball => ball.turnBack());
    ball.at (166,  362, ball => ball.turnRight());
    ball.at (166,  472, ball => ball.turnRight());
    ball.at (26 , 472, ball => ball.turnBack());
    ball.at (366,  472, ball => ball.turnLeft());
    ball.at (366,  50, ball => ball.turnLeft());
    ball.at (311,  50, ball => ball.turnBack());
    ball.at (367,  50, ball => ball.turnRight());
    ball.at (367,  100, ball => ball.turnLeft());
    ball.at (465,  100, ball => ball.turnLeft());
    ball.at (465,  14, ball => ball.turnRight());
    ball.at (544,  14, ball => ball.turnRight());
    ball.at (544,  99, ball => ball.turnLeft());
    ball.at (621,  99, ball => ball.turnRight());
    ball.at (621,  180, ball => ball.turnRight());
    ball.at (572,  180, ball => ball.turnLeft());
    ball.at (572,  472, ball => ball.turnLeft());
}

有几个注意点:

  1. 所写代码是用于定义小球到达某个点时的动作,所以对于经过两次的点,最好选取不同坐标使其错开。
  2. 由于路线需要衔接上,所以坐标也同样需要衔接。
  3. 入口处的星星出现有延迟,所以需要在开始时等待几秒。
IFE 热身任务解决过程手记_第6张图片
Step4 - code
[END]
若有更好的解决方案,欢迎讨论。

你可能感兴趣的:(IFE 热身任务解决过程手记)