55
Верстка Canvas-ом Алексей Охрименко Twitter: @Ai_boy Telegram: Ai_boy IPONWEB

Верстка Canvas, Алексей Охрименко, MoscowJS 31

Embed Size (px)

Citation preview

Page 1: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Верстка Canvas-омАлексей Охрименко

Twitter: @Ai_boy

Telegram: Ai_boy

IPONWEB

Page 2: Верстка Canvas, Алексей Охрименко, MoscowJS 31

IPONWEB

Page 3: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 4: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Зачем?

Page 5: Верстка Canvas, Алексей Охрименко, MoscowJS 31

https://www.youtube.com/watch?v=QszjZfvl9vw

Page 6: Верстка Canvas, Алексей Охрименко, MoscowJS 31

about:blank

Page 7: Верстка Canvas, Алексей Охрименко, MoscowJS 31

about:blank yoursite.com

Page 8: Верстка Canvas, Алексей Охрименко, MoscowJS 31

about:blank yoursite.com

Page 9: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 10: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 11: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 12: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 13: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 14: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 15: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 16: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 17: Верстка Canvas, Алексей Охрименко, MoscowJS 31

19 properties37 methods

http://www.w3schools.com/tags/ref_canvas.asp

Page 18: Верстка Canvas, Алексей Охрименко, MoscowJS 31

19 properties37 methods

http://www.w3schools.com/tags/ref_canvas.asp

Page 19: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Retained Mode VS

Immediate Mode

https://www.kirupa.com/html5/dom_vs_canvas.htm

Page 20: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 21: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 22: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 23: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Как?

Page 24: Верстка Canvas, Алексей Охрименко, MoscowJS 31

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script type="application/javascript"> function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 50, 50); } } </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html>

Page 25: Верстка Canvas, Алексей Охрименко, MoscowJS 31

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script type="application/javascript"> function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 50, 50); } } </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html>

Page 26: Верстка Canvas, Алексей Охрименко, MoscowJS 31

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script type="application/javascript"> function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 50, 50); } } </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html>

Page 27: Верстка Canvas, Алексей Охрименко, MoscowJS 31

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script type="application/javascript"> function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 50, 50); } } </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html>

Page 28: Верстка Canvas, Алексей Охрименко, MoscowJS 31

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script type="application/javascript"> function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 50, 50); } } </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html>

Page 29: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 30: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Ai2Canvas

Page 31: Верстка Canvas, Алексей Охрименко, MoscowJS 31

https://www.youtube.com/watch?v=MviAo7wc9go

Page 32: Верстка Canvas, Алексей Охрименко, MoscowJS 31

http://blog.mikeswanson.com/ai2canvas

Page 33: Верстка Canvas, Алексей Охрименко, MoscowJS 31

If then else

Design.js Logic.js

Page 34: Верстка Canvas, Алексей Охрименко, MoscowJS 31

If then else

Design.js Logic.js

Page 35: Верстка Canvas, Алексей Охрименко, MoscowJS 31

If then else

Design.js Logic.js

Page 36: Верстка Canvas, Алексей Охрименко, MoscowJS 31

React-canvas

http://engineering.flipboard.com/2015/02/mobile-web/

https://github.com/Flipboard/react-canvas

Page 37: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 38: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Zebra Kit

Page 39: Верстка Canvas, Алексей Охрименко, MoscowJS 31

http://www.zebkit.com

Page 40: Верстка Canvas, Алексей Охрименко, MoscowJS 31

http://repo.zebkit.org/latest/samples/uidemo.html

Page 41: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 42: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 43: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 44: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 45: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 46: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 47: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 48: Верстка Canvas, Алексей Охрименко, MoscowJS 31

zebra.ready(function() { eval(zebra.Import("ui", "layout")); // create canvas var canvas = new zCanvas(); var root = canvas.root; canvas.fullScreen(); root.properties({ layout : new BorderLayout(8,8), border : new Border(), padding: 8, kids: { TOP: new zebra.ui.Label('some label'), CENTER: new zebra.ui.HtmlTextField(), BOTTOM: new Button("Clear").properties({ canHaveFocus: false }) } }); root.find("//zebra.ui.Button").bind(function() { root.find("//zebra.ui.HtmlTextField").setValue(""); }); });

window.onresize = canvas.fullScreen.bind(canvas);

Page 49: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 50: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Быстрее чем React Native

Page 51: Верстка Canvas, Алексей Охрименко, MoscowJS 31

https://www.ludei.com

Page 52: Верстка Canvas, Алексей Охрименко, MoscowJS 31

23 FPS VS 119 FPS

Page 53: Верстка Canvas, Алексей Охрименко, MoscowJS 31
Page 54: Верстка Canvas, Алексей Охрименко, MoscowJS 31

Когда использовать Canvas?

Page 55: Верстка Canvas, Алексей Охрименко, MoscowJS 31

FAQАлексей Охрименко

Twitter: @Ai_boy

Telegram: Ai_boy

IPONWEB

http://bit.ly/296D9Qf