如何利用ExtJS自定义皮肤中的交互动画效果
如何让ExtJS的皮肤动画变得「有呼吸感」?
老张最近在项目复盘会上被老板点了名:"咱们后台系统的按钮点击效果,怎么死气沉沉的?"作为团队里最熟悉ExtJS的老鸟,我摸着日渐稀疏的头发,决定把压箱底的动画调校技巧整理出来。
一、ExtJS皮肤系统的「隐形开关」
很多人不知道ExtJS主题包里藏着个animate配置项,就像汽车的运动模式开关。在theme-custom.scss里加上这段代码,整个UI瞬间活过来:
$include-animations: true !default; $animation-easing: cubic-bezier(0.4, 0, 0.2, 1);
1.1 给按钮加点「弹性」
修改经典蓝色主题的按钮动画参数:
- 悬停时缩放从0.95改为0.92
- 点击反馈时长从120ms延长到180ms
- 添加0.3秒的涟漪扩散效果
.x-btn-over { transform: scale(0.92); transition: all 0.18s $animation-easing; .x-btn-pressed:after { animation: ripple 0.3s linear;
二、让表格行像手风琴般展开
传统的数据表格展开效果太生硬,试试这个仿物理引擎的动画方案:
参数 | 默认值 | 优化值 | 效果差异 |
---|---|---|---|
展开速度 | 300ms | 420ms | 更符合人眼追踪规律 |
缓动函数 | ease-out | cubic-bezier(0.68, -0.55, 0.27, 1.55) | 出现回弹效果 |
透明度变化 | 无 | 0.8→1 | 增加空间层次感 |
2.1 代码实现细节
在网格面板的配置项里注入动画配置:
Ext.define('Custom.grid.Panel', { expandBodyTemplate: new Ext.Template( '' ), onExpand: function{ Ext.create('Ext.fx.Anim', { target: expanderEl, duration: 420, easing: 'backOut', from: { opacity: 0.8, scaleY: 0 }, to: { opacity: 1, scaleY: 1 } }); });
三、表单校验动效的「温柔提醒」
错误提示太生硬?试试这个渐进式动效方案:
- 错误图标先水平震动3次(振幅5px)
- 然后垂直方向轻微弹跳2次
- 背景色从浅粉红渐变到警告红
.x-form-error-icon { animation: shake 0.4s ease-in-out, bounce 0.6s 0.4s ease-out; @keyframes shake { 0%,100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); }
四、树形菜单的「自然生长」
通过贝塞尔曲线模拟植物生长曲线:
.x-tree-node-collapsed .x-tree-node-icon { transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 1.94); .x-tree-node-expanded .x-tree-node-icon { transform: rotate(90deg); transition-duration: 0.3s;
项目上线后,运营部的莉莉跑来问:"张哥,咱们系统是不是换皮肤了?总觉得操作起来更跟手了。"我笑着把咖啡递给她,深藏功与名。窗外的梧桐树沙沙作响,电脑屏幕上的按钮还在欢快地跳着圆舞曲。
评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网友留言(0)