admin 发布于 08月22, 2017

设计 Timeline 时间轴来更精确地控制动画

Firefox 偷偷实现了一个 AnimationTimeline,用来为动画提供时间轴。根据文档,它是一个抽象类,被 DocumentTimeline 继承。

由于是非标准的特性,MDN的文档里面也没有解释的很清楚,只是说它用来让多个动画共享时间轴,但是具体该怎么用,并没有详细的说明。

今天在这篇文章里,我并不想解释 Firefox 实现的这个 Timeline 该怎么用,而是借着这个 Timeline 的概念进行一些扩展,实现了一个全新的 Timeline 库。让我们看看如果为动画或者其他依赖于时间的行为设计一个 Timeline,我们能做什么。

阅读全文 »

admin 发布于 08月05, 2017

用信号来控制异步流程

我们知道,JavaScript 不管是操作 DOM,还是执行服务端任务,不可避免需要处理许多异步调用。在早期,许多开发者仅仅通过 JavaScript 的回调方式来处理异步,但是那样很容易造成异步回调的嵌套,产生 “Callback Hell”。

阅读全文 »

admin 发布于 06月26, 2017

漫谈 JS 函数式编程(一)

这可能是最简单易懂的函数式编程介(扯)绍(淡)了

目前前端界(以及其他一些领域)对函数式编程大体上两种态度,一些人是觉得函数式编程特牛逼,尤其是现在许多新生的框架和库都在标榜自己的函数式特征。而另一些人,又觉得函数式编程学起来很难,而且似乎也没有什么卵用,理由是在自己经历的项目里面很难看到具体的函数式编程应用场景,甚至其中许多人认同一个观点,觉得函数式编程只适合于学术研究,很难在工程项目中实际使用。

阅读全文 »

admin 发布于 06月15, 2017

JavaScript 最新特性实现的三大黑科技

依次执行多项异步任务

有时候,我们希望批量执行一组异步任务,但是不是并行,而是依次执行,这组任务是动态的,在一个数组里,当然我们可以用 for 循环然后一个一个 await 执行,但是还有另外一种方式:

阅读全文 »

admin 发布于 04月19, 2017

如何用原生 JS 实现手势解锁组件

这是第三届 360 前端星计划的选拔作业题。600多名学生参与了解答,最后通过了60人。这60名同学完成的不错,思路、代码风格、功能完成度颇有可取之处,不过也有一些欠考虑的地方,比如发现很多同学能按照需求实现完整的功能,但是不知道应当如何设计开放的 API,或者说,如何分析和预判产品需求和未来的变化,从而决定什么应当开放,什么应当封装。这无关于答案正确与否,还是和经验有关。

在这里,我提供一个参考的版本,并不是说这一版就最好,而是说,通过这一版,分析当我们遇到这样的比较复杂的 UI 需求的时候,我们应该怎样思考和实现。

阅读全文 »

admin 发布于 04月18, 2017

使用 babel 插件来打造真正的“私有”属性

大家都知道 JavaScript 的对象属性默认是可以被从外部访问和修改的,也就是说,JavaScript 本身不存在完全“私有”的对象属性。例如:

class Point{
    constructor(x, y){
        this._x = x;
        this._y = y;
    }
    get length(){
        const {_x, _y} = this;
        return Math.sqrt(_x * _x + _y * _y);
    }
}

let p = new Point(3, 4);
console.log(p._x, p._y, p.length); //3, 4, 5

在上面的代码里,我们约定俗成地用下划线开头来表示私有变量。我们希望 _x、_y 不被外部访问,然而,这只是我们一厢情愿,使用者还是可以访问到这两个变量。

在这里,我们不讨论 ES 的 private 标准提案,而是讨论如何使用工具来将约定变成真正的私有。

阅读全文 »