SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Graphic Programming in JS
       拔赤 bachi@taobao.com
     http://www.uedagazine.com
             2010-10-20
我们已经离不开Animation!
   Slide,Menu,Tab
Floating advertisement…
•   动画基础
•   Animate的优雅降级
•   更纯粹的图形编程
•   在可预见的未来
• 动画基础
• Animate的优雅降级
• 更纯粹的图形编程
• 在可预见的未来
/* Jquery 生成一段动画 */
        $(element).animate({
            opacity: 0.25,
            left: '+=50'
        },5000,function(){
            //callback
        });



                                 在Jquery中
                                 我们通常这样创建动画
http://api.jquery.com/animate/
/* YUI3 生成一段动画 */
     var myAnim = new Y.Anim({
         node: element,
         to:{opacity:0.25,
             width: function(node) {
                return
                   node.get('region').left
                    + 50;
             }
         }
     }).on('end',function(){/* callback */});
     myAnim.run();

                                         在YUI3中
                                         我们是这样创建动画
http://developer.yahoo.com/yui/3/anim/
“库”
为我们封装了动画的细节
动画原理
 – 关键帧(始末状态)
 – 路径(补间状态)
 – 帧频(运动速度)



 DOM Animation:
 就是在一段时间内,连续改变 DOM元素的属性
/* Animation 的实现 */

while(condition)//控制动画结束
{
    doSomething();//输出”补间”
    delay(sometime);//控制”帧频”
}



     Animation 的实现
JS实现Dom动画

  setInterval
 clearInterval
  setTimeout
 clearTimeout
/* setTimeout */

setTimeout(function(){
     /* Some code... */
     setTimeout(arguments.callee, 10);
}, 10);


/* setInterval */

setInterval(function(){
     /* Some code... */
}, 10);

     setTimeout vs setInterval
纠结
setInterval和SetTimeout都很耗CPU
 setInterval甚至会把页面“冷冻住”
http://ejohn.org/blog/how-javascript-timers-work
/* setTimeout */

setTimeout(function(){
     /* Some code... */
     setTimeout(arguments.callee, 10);
}, 10);




           合理的帧频?
应用场景          帧频
动画片       16帧/秒
电影胶片      24帧/秒
电视        25帧/秒
 CS       30帧/秒


      常见的帧频
库        帧频      间隔(毫秒)
Jquery   77帧/秒       13
KISSY    77帧/秒       13
YUI3     50帧/秒       20
YUI2     1000帧/秒     1



常用 JS 库 Anim“默认”帧频
“100毫秒”的最大理想帧频
    理想帧频:<10帧/秒
 时间间隔:1000 / 10 = 100毫秒



   Response Time Overview
  http://www.useit.com/papers/responsetime.html
Nicholas C. Zakas
    最佳延时:50ms
    最低延时:25ms



Timed array processing in JavaScript
  http://www.nczonline.net/blog/2009/08/11/timed-array-
                processing-in-javascript/
“曲线”动画
    平滑函数 – Easing Function




http://www.robertpenner.com/easing/easing_demo.html
/**
   easeIn - 先慢后快
     t 用来计算当前状态的时间值
     b 初始值
     c 始末位置之间的偏移量
     d 整个动画跨度
     返回:t时刻的状态值
*/
function easeIn(t, b, c, d) {
      return c*(t/=d)*t + b;
}


     JS 实现的平滑函数
适度的Dom动画


  动画          页面性能损耗
         VS
(体验提升)        (体验下降)
浏览器性能果真不可救药?
•   动画基础
•   Animate的优雅降级
•   更纯粹的图形编程
•   在可预见的未来
浏览器      渲染引擎    JS引擎       发布日期 性能
     IE6    Trident JScript   2001.8.27 -
Firefox3.0+ Gecko    Trace    2008.6.17 +
                   Monkey
 Opera9.0+  Presto Carakan    2008.6.12   ++
Chrome4.0+ Webkit     V8      2009.5.29   ++
 Safari4.0+ Webkit   Nitro    2009.6.18   ++


越现代的浏览器,性能越好,动画体验更佳
CSS3 Transitions
div {
   transition-property: opacity, left;
   transition-duration: 2s, 4s;
   background:opacity:0;
   left:100px;
}


   使用浏览器 Native API 实现动画
         http://www.w3.org/TR/css3-transitions/
CSS3 Transitions
                中的平滑函数
                cubic-bezier



cubic-bezier(x1,y1,x2,y2)
P1:(x1,y1)
P2:(x2,y2)
应用CSS3 Transitions
YUI3、KISSY 的 Anim 均实现了
      Transitions 动画

   YUI2 和 Jquery 未实现
/* YUI3 的实现 */
 YUI().use('transition',function(Y){
      node.transition({...},callback);
 });
            http://developer.yahoo.com/yui/3/transition/



  /* KISSY 的实现 */
  KISSY.use('ks-core',function(S){
       node.animate({...},d,ease,callback);
  });
        http://kissyteam.github.com/kissy/docs/anim/index.html

Demos:
http://jayli.github.com
http://lifesinger.github.com/lab/2010/popnum.html
•   动画基础
•   Animate的优雅降级
•   更纯粹的图形编程
•   在可预见的未来
http://developers.facebook.com     http://fx.inetcat.com/
           /animation/




       http://jsanim.com/        http://moofx.mad4milk.net/



              Dom Anim JS 库的流行
风生水起的 HTML5 Canvas!
  https://developer.mozilla.org/cn/Canvas_tutorial
2D图形编程
原点(坐标系)
 点(坐标)
 线(线段)
   形状
   颜色
2D编程数学基础




http://en.wikipedia.org/wiki/Analytic_geometry
Rene Descartes – 笛卡尔(法)
3D图形编程
     原点(坐标系)
      点(坐标)
      线(线段)
        形状
        颜色
 空间变换(空间坐标系的倾斜)
投影(3D图形在2D画布上的呈现)
3D编程数学基础




http://en.wikipedia.org/wiki/Linear_Algebra
Gottfried Wilhelm Leibniz – 莱布尼茨(德)
Demos
• 2D Demo
 – http://jayli.github.com/gallery/canvas/g.html


• 3D Demo
 – http://jayli.github.com/gallery/canvas/3d.html
http://hyper-metrix.com/#Burst




     http://www.c3dl.org/




     http://raphaeljs.com/


Canvas JS 库的流行
有了这些……
我们能用JS开发大规模
 图形程序了吗?
•   动画基础
•   Animate的优雅降级
•   更纯粹的图形编程
•   在可预见的未来
JS是解释性语言
运行速度本身就是硬伤!
从JS运算出结果到最终在
  显示器渲染出图形
  要经过层层调用!
JS code…

 JS解释器(JS引擎)


浏览器内核(渲染引擎)
                    CPU消耗
   X window         在层层调
                    用中
   OS kernel




               硬件
我们需要更生猛的“硬件”加速!
JS code…

 JS解释器(JS引擎)


浏览器内核(渲染引擎)         CSS3 Transition
                    WebGL API
   X window


   OS kernel
                                减少
                                调用
               硬件               层级
WebGL is coming!
http://www.khronos.org/webgl/
WebGL的浏览器支持
• Firefox 4.02beta
• Chrome Development Branch
• WebKit Nightly Builds




     http://www.khronos.org/webgl/wiki/Getting_a_Web
                    GL_Implementation
WebGL 需要 OpenGL 的支持




     http://www.mesa3d.org/
真正原生的API




        基于WebGL的建模/开发
http://www.ambiera.com/coppercube/
WebGL Demos
• 简单特效
 – http://webglsamples.googlecode.com/hg/
• 3D建模
 – http://www.ibiblio.org/e-
   notes/webgl/webgl.htm
• Quake 3 Map Demo
 – http://media.tojicode.com/q3bsp
更多WebGL Demos
“浏览器”性能的革命!?
Q&A

Contenu connexe

Similaire à Graphic programming in js

Script with engine
Script with engineScript with engine
Script with engine
Webrebuild
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
Tony Deng
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
jay li
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-app
lydiafly
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
Hsu Ping Feng
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化
li qiang
 

Similaire à Graphic programming in js (20)

Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
Berserk js
Berserk jsBerserk js
Berserk js
 
Kissy design
Kissy designKissy design
Kissy design
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
杜增强 Flash移动开发优化技巧
杜增强 Flash移动开发优化技巧杜增强 Flash移动开发优化技巧
杜增强 Flash移动开发优化技巧
 
Behind Tetris5
Behind Tetris5Behind Tetris5
Behind Tetris5
 
Script with engine
Script with engineScript with engine
Script with engine
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 
Html5 canvas 游戏开发实例详解
Html5 canvas 游戏开发实例详解Html5 canvas 游戏开发实例详解
Html5 canvas 游戏开发实例详解
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-app
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化
 
YUI 3 菜鳥救星
YUI 3 菜鳥救星YUI 3 菜鳥救星
YUI 3 菜鳥救星
 

Plus de jay li (20)

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版
 
Jswebapps
JswebappsJswebapps
Jswebapps
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼
 
F2e security
F2e securityF2e security
F2e security
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
 
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developer
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Html5form
Html5formHtml5form
Html5form
 
Slide
SlideSlide
Slide
 
Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkit
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计
 
赤骥 用户研究入门
赤骥 用户研究入门赤骥 用户研究入门
赤骥 用户研究入门
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 

Graphic programming in js