HTML5 has a bunch of cool features, which are now mostly supported by all major browsers on desktops and mobile devices. We will briefly introduce some of these features and explain how they fit into the HTML/CSS/JavaScript ecosystem.
Then, we will talk about the HTML5 Canvas API, which can be used to draw shapes inside standard web pages and apply transformations and zooms.
3. Why HTML5?
Internet has changed a lot since 1996
SpaceJam vs. Google Docs
HTML5 is the latest HTML standard
Delivers rich content without the need for external
plugins
Replaces some scripting with more markup
All major browsers support it (to some extent*)
* http://html5test.com/
4. What’s New in HTML5?
<canvas> element for 2D drawing
<video> and <audio> for media playback
Local storage support
Geolocation API
Web Workers for background calculations
Semantic elements like <article>, <footer>,
<header>, <aside>
Tons of input controls: color, email, date, time
And much more…
5. What Can Canvas do for You?
Well, pretty much anything…
Cloth Experiment
Angry Birds
Shared Canvas
Lots of other (less cool) examples
6. Canvas Basic
The Canvas element allows you to draw 2D graphics,
on the fly, on a Web page, using JavaScript
The HTML5 canvas is a lot like a real-world painting
canvas
You can use different colors and different brushes
You can rotate it or move it around
Anything you paint on it stays in place until you delete it
You can resize it
But it’s also a bit different, duh
8. Canvas Basic Recipe
Get Canvas element
Get drawing context from element
Repeat:
Save context properties
Set new properties: fill style, stroke style, transform
Begin path
Define path
Close path (if needed)
Fill and/or stroke
Restore original properties
9. What is a Path?
A path is a series of points connected by lines
Use beginPath to initialize a path
Use lineTo, arcTo, etc. to connect lines
Stroke and/or fill as see fit
A path can be closed
Use closePath to connect last point to first point
A path doesn’t have to be continuous
Use moveTo to create discontinuous sections in a path
שלום לכולן. קוראים לי דינה גולדשטיין. אני מפתחת תוכנה בחברת ברייטסורס. אני חלק מצוות תשתיות תוכנה שמתעסק בהרבה מאוד תחומים וכותב בכמה שפות ומשתמש בהרבה טכנולוגיות. בשנה האחרונה התחלנו להיכנס לתחום הווב ולי ספציפית יצא להתעסק די הרבה עם ה-canvas. החברה שאני עובדת בה בונה שדות סולריים שמורכבים מעשרות אלפי מראות שמכוונות את אנרגיית השמש לדוד שמש גדול. שם המים מתחממים עד שנוצר קיטור ואני אמנם לא מומחית בזה אבל הפיסיקאים מספרים שמשם המרחק לחשמל הוא כבר לא מאוד גדול. בכל מקרה, המשימה העיקרית שלי בצוות התשתיות הייתה ליצור תשתית שמאפשרת תצוגה של השדה הסולרי הזה, עם עשרות אלפי המראות שיכולות לזוז ולהיצבע בצבעים שונים לפי פרמטרים שונים. אלה מכן שקצת יש להן ניסיון בווב בטח יודעות שאי אפשר לשים ב-HTML אלפי אלמנטים, שלא לדבר על עשרות אלפים. בשביל תצוגה בסדר גודל כזה שתהיה גם יפה ויעילה וללא תתקע את הדפדפן צריך לפנות לשיטות אחרות. ה-canvas הוא שבא לעזרה.
בסוף ההרצאה תכירו מושגים בסיסיים ושיטות עבודה עם ה-canvas ותוכלו להתחיל לכתוב פיצ׳רים מגניבים לאתרים שלכן
נחלק היום את הזמן שלנו לכמה חלקים.
ראשית, אציג בפניכן את הסטנדרד החדש HTML5 אשר canvas הוא חלק ממנו.
אחר כך נסתכל על כמה דוגמאות מגניבות לשימוש ב-canvas. אני אמנם לא יכולה להראות לכן את מה שעשיתי בברייטסורס אבל האינטרנט מלא מדברים ממש מגניבים ומרשימים.
לאחר מכן נעשה דוגמה קצרה סגנון hello world ואז נפנה למשימה העיקרית שלנו שהיא פיתוח אתר שאת התוכן שלו אשמור בסוד עד רגע האמת (אלה שקראו את התקציר בפייסבוק או ב-meetup מתבקשים לשמור על ההפתעה יחד איתי)
אני הולכת לחזור על חלק קטן מהרצאת המבוא שהייתה כאן לפני כמה דקות אז לאלה שהיו בהקדמה – אני מתנצלת. זה לא יהיה ארוך.
כדי להעריך את מה שאנחנו הולכים ללמוד היום אני רוצה להראות לכן איך האינטרנט נראה פעם. הרבה דברים קרו מאז שנת 1996. חיפשתי קצת באינטרנט ויש אתר ממש מפורסם ששרד בצורתו המקורית עוד משנת 1996. זה האתר של הסרט ספייס ג׳אם. הכל סטטי ודי מכוער אם לומר את האמת. ממש זועק מזה שנות ה-90 ככה
לעומתו, כבר מזה זמן מה יש לנו גישה לאתרים כמו גוגל דוקס. זה ממש מדהים בעיני. זו כבר לא אפליקציה שצריך להתקין (שלא לדבר על לקנות) ואז להתקין עדכונים ועוד עדכונים ועוד עדכונים, ולחכות שנה עד שתצא גרסה חדשה עם כל תיקוני הבאגים. זה פשוט אתר אינטרנט שהגרסה שלו יכולה להתעדכן פעם בשבוע או אפילו יותר מפעם אחת ביום בלי שהמשתמשים בכלל ישימו לב, והוא מתפקד כמו וורד או אקסל או פאוור פוינט. אפשר לשמור מסמכים, לחלוק מסמכים עם חברים, אפילו לערוך מסמכים במקביל בזמן שאתם מחוברים לרשת. ומצד שני כל הפלא הזה יכול לעבוד אפילו אם אתם לא מחוברים. וכשמתישהו תתחברו אז הכל יסתנכרן ויעבוד כאילו לא קרה כלום.
אז אכן הרבה השתנה מאז 1996...
לאחרונה גם הצטרף לחגיגה הסטנדרט החדש HTML5. הוא מוסיף כל מיני פיצ׳רים חדשים שעד כה היה צורך בפלאגינים חיצוניים בשבילם (למשל פלאש) או בכתיבת קוד מאחורי העמוד. כל הדפדפנים הראשיים תומכים בו (לא באופן מלא אבל כמעט הכל). את הפיצ׳רים הנתמכים אפשר לבדוק באינטרנט. יש הרבה אתרים שמספקים את הרשימות. זה אחד מהם. יש גם ספריה שנקראית modernizer שמאפשרת לבדוק בקוד תמיכה בפיצ׳ר מסוים בדפדפן שאתם רצים בו.
הסטנדרט החדש נותן המון פיצ׳רים חדשים. את הרשימה המלאה אפשר למצוא באינטרנט אבל כתבתי כאן את הדברים שנראו לי יותר מעניינים.
הדבר הראשון הוא כמובן ה-canvas שעליו אנחנו נבלה את שאר הזמן שלנו ביחד. אבל יש עוד כמה דברים נחמדים מאוד. למשל, אלמנטים חדשים לתצוגה של וידאו או לקבצי שמע. זה אפילו תומך בהצגה של כתוביות.
יש תמיכה בשמירה מקומית של נתונים (ככה אתם יכולים לכתוב מיילים בג׳ימייל למרות שאתם לא מחוברים לאינטרנט).
יש ממשק חדש שמאפשר לכם לקבל מיקום גיאוגרפי של המשתמש. אז למשל תוכלו להתאים את שפת האתר לפי הארץ שממנה מתחברים או שתוכלו לברר באיזו עיר נמצא המשתמש ולהציג לו נתונים של מזג אוויר או מפת פקקים.
עד שהגיע HTML5 כל העבודה של הג׳אווה סקריפט והתצוגה של האתר היו מתבצעות בתהליכון אחד. כעת בעזרת web workers ניתן להעביר עבודות ארוכות שעלולות לתקוע את הממשק לתהליכון שיריץ אותן ברקע. כשהעבודה מסתיימת ניתן להעביר הודעה לתהליכון הראשי ולעדכן את ממשק המשתמש בהתאם.
יש גם הרבה אלמנטים חדשים שבאים לתת משמעות סמנטית. הם לא משנים את האופן שבו הדף נראה, אבל כשמשתמשים בהם ניתן להבין קצת יותר בקלות מה הכוונה. למשל article מייצג תוכן שקשור לנושא מסוים. בעמוד אחד יכולים להיות כמה articles. ואילו header ו-footer מייצגים את ראש העמוד ותחתיתו בהתאמה. אם נשים את ה-header בלמטה של ה-HTML הוא יופיע בתחתית העמוד. זאת הכוונה כאשר אנחנו אומרים שאלה אלמנטים סמנטיים. האחריות היא עלינו לשים אותם במקום הנכון, אבל כשנקרא את הקוד אחר כך תהיה ברורה הכוונה שהאזור הזה הוא הלמעלה של הדף ואילו אזור אחד הוא הלמטה. aside לעומת זאת זה משהו שאמור להופיע בצד הדף.
יחד עם האלמנטים הסמנטיים נוספו גם המון אלמנטים חדשים לסוגים שונים של קלט – צבעים, אימייל, תאריכים, זמן וכו׳. זה דווקא משהו שלא כל הדפדפנים תומכים בו באופן מלא וחלק מהדפדפנים לא מממשים חלק מסוגי הקלט. אבל מה שנחמד הוא שבמקרה הגרוע פשוט תופיעה לכם תיבת טקסט שצריך להכניס בה את הערכים ידנית, אז אמנם ההכנסה לא תהיה מאוד נוחה אבל חוץ מזה ניתן להשתמש בערך שהוכנס כרגיל. את האלמנט שמאפשר בחירת צבעים אנחנו נראה בהמשך.
לפני שניכנס לפרטים הטכניים אני רוצה לתת קצת מוטיבציה.
מה קורה מאחורי הקלעים?
אלמנט ה-canvas מאפשר למפתח לצייר גרפיקה דו-ממדית על המסך בזמן אמת (לא במובן של מערכות זמן אמת אלא במובן שבזמן שהאתר רץ והמשתמש עושה פעולות – online לעומת real time) באמצעות כתיבת קוד ג׳אווה סקריפט.
שמעתי באיזו הרצאה אנלוגיה שהקנבס של HTML הוא ממש כמו קנבס ציור בעולם האמיתי. מאוד התחברתי לאנלוגיה הזאת ואני חושבת שכדאי לזכור אותה. הדימיון העיקרי הוא לדעתי בשני דברים: הראשון, כל מה שמציירים על הקנבס נשאר שם עד שמוחקים אותו באופן מפורש והשני, אם מזיזים או מסובבים את הקנבס אז הוא לא חוזר למצב המקורי שלו עד שלא עושים זאת באופן מפורש. חוץ מזה כמובן שיש את הדברים המתבקשים – אפשר לבחור צבעים שונים, לסייר בסוגים שונים של מכחולים (בגודל שונה או בצורה שונה), אפשר לשנות את הגודל (ע״י הדבקה של קנבס נקי בצדדים או חיתוך לגודל קטן יותר על חשבון איבוד מידע).
ובכל זאת, כמובן שזה לא בדיוק אותו הדבר
זאת תהיה דוגמת ה-hello world שלנו. נעשה משהו ממש בסיסי שמצייר מלבן ומציג קצת טקסט.
אז מה למדנו מההדגמה הקודמת?
למדנו את שיטת העבודה הכללית עם ה-canvas.
מסלולים מאפשרים לנו להגדיר כל צורה שאותה נרצה לצייר – לא רק מלבנים ומעגלים.
מסלול הוא פשוט אוסף נקודות שמחוברות ביניהם בקווים (ישרים או מעוגלים). המסלול יכול להיות סגור או פתוח והוא יכול להיות רציף למקוטעין.
מה שנחמד במסלולים הוא שלא צריך לצבוע על קטע בנפרד. אפשר להגדיר את המסלול פעם בבת אחת והתשתית זוכרת את כל הרכיבים אותו. בסיום ההגדרה ניתן לצייר את הקו ו/או למלא את הצורה.
זה הרבה יותר יעיל מאשר לצייר כל קו בנפרד ולצבוע אותו. אבל שימו לב שכל המסלול כולו משתמש באותו הצבע לקו ובאותו הצבע למילוי. אם כל צלע בצורה שלנו היא בעלת צבע אחר אין ברירה אלא לצבוע כל צלע בנפרד.
כאן אנחנו רואים רשימת מכולת של פונקציות ושדות שיש ל-canvas. זו לא רשימה מלאה אך אלה הדברים שנראו לי יותר חשובים.
בגדול אנחנו יכולים לראות שיש חלוקה לכמה קבוצות: קווים, צורות, טקסט, תמונות, עיצוב, מידע גולמי וטרנספורמציות.
טרנספורמציות זה נושא מאוד חשוב לקנבס, אבל מאחר שבדמו הראשי שלנו לא יהיה שימוש בטרנספורמציות אני רוצה להראות לכם דוגמה בנפרד.