AlloyTouch 0.2.0发布--鱼和熊掌兼得

原文链接:github.com/AlloyTeam/A…

背景

公司师姐昨日在KM发了篇长文,主要结论RAF+transform3d就是不如transition+transform3d平滑流畅,但是transition+transform3d没有translate属性变更change回调,只有transitionend的事件回调。最后得出的解决方案:

支持动态切换 raf 和 transition~~

AlloyTouch在这个基础上更加激进,直接支持change事件,不用用户去关系RAF还是transition,也不用用户去手动切换。那么是怎么做到了?往下看。

主要更新

AlloyTouch CSS版本已经支持change事件回调了

鱼和熊掌兼得!慢,什么是鱼?什么是熊掌?
鱼,性能。由于RAF+transform3d就是不如transition+transform3d平滑流畅。CSS版本在处理DOM局部滚动的时候明显更加smooth。

熊掌,change回调。以前使用CSS版本是无法监听到dom的translate属性变更change回调,只有transitionend的事件回调。

现在鱼和熊掌可以兼得!

举个例子

这里就是使用CSS版本制作的,而且滚动过程中可以执行chang回调,所以头部的动画都在在change回调里进行处理的。

原理分析

  • 用户touchstart的时候开启RAF定时器
  • 定时器一直计算读取滚动元素的translate属性,并抛给用户传入的change事件
  • transitionend的时候关闭RAF定时器

对,就是这么简单!

代码分析

...
...
_start: function (evt) {
    cancelAnimationFrame(this.tickID);
    this._tick();
...
...
_tick: function () {
    this.change.call(this, this.getComputedPosition());
    this.tickID = requestAnimationFrame(this._tick.bind(this));
},
...复制代码

touchstart的时候会去触发_start事件,先去cancelAnimationFrame取消掉当前的循环,再重新开启一个,滚动点停。还可以看到,在不断tick的过程中,change函数是一直会被执行,而且计算出的translate会传给change回调。再看getComputedPosition:

getComputedPosition: function () {
    var matrix = window.getComputedStyle(this.scroller, null);
    matrix = matrix[transform].split(')')[0].split(', ');
    return this.vertical ? (+(matrix[13] || matrix[5])) : (+(matrix[12] || matrix[4]));
},复制代码

这里会通过getComputedStyle去计算出滚动DOM的matrix,然后提取出translate出来。

读取

...
...
if (this.step) {
    this.correction();
    if (this._endCallbackTag) {
        this._endTimeout = setTimeout(function () {
            this.animationEnd.call(this, current);
            cancelAnimationFrame(this.tickID);
        }.bind(this), 400);
        this._endCallbackTag = false;
    }
} else {
    this.animationEnd.call(this, current);
    cancelAnimationFrame(this.tickID);
}
...复制代码

当触发了_transitionEnd之后,会去清除定时器。这里需要注意,当用户传了step配置,会延迟400ms清除定时器,因为校正step的过程需要400ms。

Q&A

问:那么非CSS版本还有存在的意义吗?
答:有的,因为非CSS不仅仅可以用于DOM,还能用于WebGL、Canvas,并且运动属性无关。CSS版本没有这些功能。

问:AlloyTouch如何做到这么小的尺寸?
答:AlloyTouch专注于数字的加速减速和回弹,抽象级别较高,而且适用场景较广。

问:有没有出React版本的计划?
这个正在计划当中,但是事实上,不是所有页面都适合React,比如无限滚动,不使用React性能会更优。有的时候要在体验最优和工程化最优做一个权衡,如果体验达不到预期,要学会放弃工程化最优的方案。

问:AlloyTouch和transformjs什么关系?
没有关系。AlloyTouch专注于触摸和运动,transformjs提供DOM和任意对象transformation能力以及一些基础工具函数。
但是建议一起使用。这里需要注意的是,CSS版本的AlloyTouch强制必须和transformjs一起使用。

开始AlloyTouch

Github:github.com/AlloyTeam/A…

任何意见和建议欢迎new issue,我们会第一时间反馈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: fontmin-v0.2.0-win64.zip是一个字体转换工具,它可以将TTF和OTF格式的字体文件转换成其他格式的字体文件,比如说EOT、SVG、WOFF、WOFF2等。这个工具主要用于Web前端开发中,因为Web页面中使用不同格式的字体文件可以提高不同浏览器的兼容性和网站的渲染速度。Fontmin-v0.2.0-win64.zip实现了优质的字体压缩和优化算法,可以把字体文件大小压缩到极限,同时不影响字体的显示效果。此外,这个工具还支持多风格、多语言的字体转换,并且可以根据用户自定义的字符集,仅提取其中需要的文字部分进行转换,减小字体文件的大小。总之,fontmin-v0.2.0-win64.zip是一个非常实用的字体转换工具,可以帮助Web前端开发者在字体选择和转换方面更加灵活和高效。 ### 回答2: fontmin-v0.2.0-win64.zip 是一个字体压缩工具,可用于压缩字体文件,降低字体文件大小,减少字体加载时间,提高网页性能。这个工具适用于 Web 前端开发者和设计师,可以帮助他们优化网站字体的加载速度,提高用户的访问体验。该工具支持 TrueType 和 OpenType 字体格式,并提供了一系列的字体转换、合并和优化功能,例如子集化、映射、字符替换、字形优化等等,用户可以根据自己的需要进行设置和调整。在使用这个工具的时候,用户应该遵循一定的规范,例如选择合适的字体、合理设置字体大小和字体样式、压缩字体文件大小、减少字体文件的下载次数等等,这样才能使网页字体达到最佳的性能表现,增强网站的可用性和访问效果。总之,fontmin-v0.2.0-win64.zip 是一个非常实用的字体优化工具,可以为 Web 前端开发者和设计师带来很大的帮助,提高网站的用户体验,减少字体加载时间,优化网页性能,是一个值得推荐的工具。 ### 回答3: Fontmin-v0.2.0-win64.zip是一个字体压缩工具,可以将大型字体文件压缩成小型字体文件。这样做有助于在Web应用程序中快速加载字体。字体文件使用了大量的带宽,因此压缩文件减少了网络传输时间,提高了网站速度。Fontmin-v0.2.0-win64.zip是Windows系统下的版本,它可以在64位操作系统上运行。它使用的是Node.js和npm来运行,所以用户需要安装它们才能使用Fontmin-v0.2.0-win64.zip。使用Fontmin-v0.2.0-win64.zip的好处在于压缩的字体在品质上不会有太大的损失。压缩后的字体文件的大小要小得多,但它们在页面上看起来几乎与原始文件相同。这使Web开发人员可以通过减少字体文件的大小来提高页面的性能,而不会减小字体的外观质量。总之,Fontmin-v0.2.0-win64.zip是一个非常实用的工具,能够帮助Web开发人员改善网站的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值