写在前面

Omi框架正式发布了omi-transform作为Omi组件化开发特效运动解决方案,让你轻松在Omi项目里快速简便支持CSS3 Transform设置。先说说 transform.js (npm上的名字是 css3transform)。transform.js作为移动Web特效解决方案,在手Q兴趣部落、日迹、QQ群、QQ附近等项目中广泛使用,以激进的修改DOM属性为代价,带来极为便利的可编程性。

上面官网的例子都是原声js的,transformjs也拥有react版本,你也可以在react中以声明式的方式使用transformjs:render() {

return (

translateX={100}

scaleX={0.5}

originX={0.5}>

sth

);

}

3分钟掌握omi-transform

演示

通过npm安装npm install omi-transform

使用import Omi from 'omi';

import OmiTransform from '../../omi-transform.js';

OmiTransform.init();

class App extends Omi.Component {

constructor(data) {

super(data);

}

installed(){

setInterval(function(){

this.refs.test.rotateZ += 0.1;

}.bind(this));

}

render() {

return `

omi-transform

`;

}

}

Omi.render(new App(),"#container");在需要使用transformjs的DOM上标记 omi-transform 和 ref="xxx"

在组件函数里便可以使用 this.refs.xxx 来读取或者设置 css transform属性

this.refs.xxx 支持 "translateX", "translateY", "translateZ", "scaleX", "scaleY", "scaleZ", "rotateX", "rotateY", "rotateZ", "skewX", "skewY", "originX", "originY", "originZ", "perspective"这些属性设置和读取

没有标记perspective的话代码没有透视投影

性能对比

因为react版本会有diff过程,然后apply diff to dom的过程,state改变不会整个innerHTML全部替换,所以对浏览器渲染来说还是很便宜,但是在js里diff的过程的耗时还是需要去profiles一把,如果耗时严重,不在webworker里跑还是会卡住UI线程导致卡顿,交互延缓等。所以要看一看CPU的耗时还是很有必要的。

下面数据是对比omi-transform和react-transform,两种方式使用chrome profiles了一把。

先看总耗时对比:

react-transform:

omi-transform:

react在8739秒内CPU耗时花费了近似1686ms

Omi方式在9254ms秒内CPU耗时花费近似700ms

在不进行profiles就能想象到react是一定会更慢一些,因为state的改变要走把react生命周期走一遍,但是可以看到react的耗时还是在可以接受的范围,没有慢到难以接受。

而Omi的方式则和传统的原生js的耗时一模一样。以为运动过程不进行DOMI Diff!!

慢着?不进行Diff?意思就是组件不进行update?

意思就是万一组件update,所有运动的状态都会丢失?Omi怎么解决这个问题?

状态保存

组件里的某个DOM在运动过程中,可能会由于其他逻辑,进行update。有可能是用户交互,有可能是数据返回的回调。所以,update前后,DOM的状态的保留显得尤其重要,不然的话就会有闪烁、跳跃的效果或者其他显示逻辑错误。...

constructor(data) {

super(data);

//初始状态

this.rotateZ = 45;

}

installed(){

setInterval(() =>{

//sync for update 记录同步到this.rotateZ

this.rotateZ = this.refs.test.rotateZ += 0.1;

});

}

render() {

//通过 ${this.rotateZ} 设置rotateZ

return `

omi-transform

`;

}

...

上面的所有例子和代码可以在这里找到。

Omi相关如果想体验一下Omi框架,可以访问 Omi Playground

如果想使用Omi框架或者开发完善Omi框架,可以访问 Omi使用文档

如果你想获得更佳的阅读体验,可以访问 Docs Website

如果你懒得搭建项目脚手架,可以试试 omi-cli

如果你有Omi相关的问题可以 New issue

如果想更加方便的交流关于Omi的一切可以加入QQ的Omi交流群(256426170)

360安装 css3插件,Omi官方插件系列 。。支持CSS3 Transform设置相关推荐

  1. Omi官方插件系列 - omi-transform介绍

    原文链接 - https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架正式发布了omi-transform作为Omi组件化开发特 ...

  2. Omi 官方插件系列 - omi-transform 介绍

    原文链接 - https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架正式发布了omi-transform作为Omi组件化开发特 ...

  3. postgresql系列之:安装postgresql数据库日志解析插件wal2json

    postgresql系列之:安装postgresql数据库日志解析插件wal2json 一.下载wal2json 二.解压wal2json 三.激活postgresql数据库系统环境变量 四.编译wa ...

  4. 坯子库无法一键安装插件没用_坯子插件库-坯子插件库下载 v2021.1官方版 附安装教程-下载啦...

    坯子插件库是一款实用的sketchup插件管理软件,包含丰富的插件集,能够进行su插件的下载.安装.卸载和管理,软件启动速度快,支持离线使用,兼容sketchup2014-2020版本,需要的朋友可以 ...

  5. 在UE4(Unreal Engine4)中安装 Quixel Bridge Megascans bridget插件

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一.Quixel Bridge使用 二.把Bridge插件导入UE4 1.在UE4中安装Bridge 2.验证Bridge插件是否成功 三.把B ...

  6. Google Chrome浏览器、360极速浏览器必备的N个插件

    需要强调的是360极速浏览器自建有插件区,但是谷歌浏览器的插件全部可以在它上面用,下面介绍的插件,只需复制下名字,在谷歌浏览器插件商店(https://chrome.google.com/websto ...

  7. 【Flutter】Flutter 项目中使用 Flutter 插件 ( Flutter 插件管理平台 | 搜索 Flutter 插件 | 安装 Flutter 插件 | 使用 Flutter 插件 )

    文章目录 一.Flutter 包和插件管理平台 二.Flutter 插件搜索示例 三.Flutter 插件装示例 1.添加 Dart 包依赖 2.获取 Dart 包 3.使用 Dart 包 4.官方的 ...

  8. ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记

    ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记: 一.Qt Creator 5.10安装 官网下载地址: http://download ...

  9. docker build run 卡住_还在使用第三方Docker插件?SpringBoot官方插件真香!

    SpringBoot实战电商项目mall(40k+star)地址:github.com/macrozheng/- 摘要 为了方便为SpringBoot应用构建Docker镜像,我们经常会使用Maven ...

最新文章

  1. hdu_2243_考研路茫茫——单词情结(AC自动机+矩阵)
  2. Metal之简单渲染动态切换屏幕颜色
  3. jdbc增删改查有哪些步骤_用Mybatis如何实现对数据库的增删改查步骤
  4. ios 刷新遮罩遮罩_在Adobe XD中进行遮罩的3种方法
  5. git远程分支修改名字
  6. Maven实战读书笔记(3)
  7. linux思考与实验答案,linux课后习题答案教材课后习题参考答案
  8. [转载] python列表解释(list comprehension)记录
  9. python空格算一个字符吗_举例说明python中空格是属于字符
  10. Java中的并发工具类:Semaphore基本理解和底层实现
  11. 让Windows 2003 Server支持ASP程序
  12. 软件设计师易错题分析总结
  13. 深度解析 mPaaS 小程序一站式研发
  14. freeswitch java_freeSWITCH
  15. PHP的时间增加10分钟和加一天的时间
  16. Excel如何批量删除工作表中的所有空列
  17. 怎样将图片制作转换圆形图片
  18. V4L2驱动框架详解
  19. stream从list实体类筛选出符合条件的单个实体类
  20. 在php中如何实现cookie即时生效,不用刷新就可以使用 1

热门文章

  1. 关闭Linux内核打印信息方法
  2. unity3d 一键截图与调用
  3. 颜色综述何为三原色?配色原理?
  4. 《罗密欧与朱丽叶》--[英]莎士比亚
  5. 【论文笔记】虚拟领导者控制编队机动
  6. 删除二叉树节点完整c语言程序以及例子,C语言C++实现二叉树构造与查找删除节点.doc...
  7. coredns hosts插件
  8. 新东方有计算机课么,计算机课程的翻译
  9. 怎么学计算机打字输入,如何学电脑打字?成为打字员
  10. mfc 标题栏 标题字体 居中显示