ראשי > dhtml חוצה דפדפנים > ספריות של פונקציות
ניתן להסתכל על טלאי תחביר כדרך ליצירת
בלוקים שיהיו אבני בניין לשפת העל, ממנה נבנה DHTML
חוצה דפדפנים. בהסתכלות כזו, טלאי תחביר
יוצרים אבני בניין קטנות מאוד—אבן בניין לכל "מילה".
חיוני, אם כן, לחבר את אבני הבניין האלה
ליחידות גדולות יותר. למשל, נוכל להשתמש בשפת
ה"ג'ונגל" כדי לומר "בית", אבל איך
נוכל להשתמש בשפה כדי לומר "איפה נמצא הבית?".
דרך אחת תהיה לחבר את כל מילות שפת ה"ג'ונגל"
שיוצרות את השאלה "איפה נמצא הבית". נניח
שעלינו לשאול את השאלה הזו שוב ושוב. הרכבת
השאלה מאבני בניין אינה יעילה במקרה כזה—הפתרון
הוא להתחיל ולבנות ספריית פונקציות של שפת
העל.
בחזרה ל-DHTML,
נניח ועלינו לדעת את המיקום השמאלי של כל תוכן
בלוק. זו פיסת מידע רבת ערך שייתכן ונזדקק לה
מספר פעמים במשך הקוד. בהנחה שקיים עבורנו
אוצר המילים שיצרנו בדוגמה הקודמת., נתקדם עם
פונקציה שמממשת את שפת העל הזו:
function whereLeft(objName)
{ leftPos=eval(obj+objName+left);
return leftPos
}
כעת, בכל פעם שנצטרך לדעת את מיקומו
השמאלי של אובייקט, פשוט נקרא לפונקציה whereLeft(),
בלי להתייחס לשינויי דפדפנים. לדוגמה:
delta=oldPos-whereLeft("block1");
יצירת ספריות
פונקציות חוצות דפדפנים מעניקה לך חירות כמעט
בלתי מוגבלת ביצירת קוד חוצה דפדפנים. נניח
ותרצה בפונקציה moveBy()
שמקבלת שני פרמטרים, dx
ו-dy,
ומזיזה את הבלוק לפי הקואורדינטות האלה—כלומר,
קריאה לפונקציה moveBy(“Block1”,5,-10)
תזיז את בלוק1 5 פיקסלים לשמאל ו- 10
פיקסלים למעלה. בעצם, ב-DOM
של נטסקייפ קיימת פונקציה בשם moveBy() כחלק מהאובייקט layer,
אבל ב-DOM
של מיקרוסופט אין פונקציה מקבילה. זו לא בעיה,
מכיוון שניצן בקלות יחסית ליצור פונקציה חדשה
של moveBy(),
שתעבוד בשני הדפדפנים. שוב, נניח שאנחנו
משתמשים באוצר המילים שהוגדר קודם:
function moveBy(objName,dx,dy)
{ newLeft=eval(obj+objName+left)+dx;
newTop=eval(obj+objName+top)+dy;
eval(obj+objName+left)=newLeft;
eval(obj+objName+top)=newTop
}
שים לב שהשורה הראשונה בפונקציה moveBy()
דומה באופן טבעי לשורה הראשונה של הפונקציה whereLeft()
שיצרנו קודם. בעצם, אם הקוד מכיל את שתי
הפונקציות הללו, בנוסף לפונקציה נוספת בשם whereTop()
שמעוצבת בצורה דומה, נוכל לכתוב את moveBy()
כך:
function moveBy(objName,dx,dy)
{ eval(obj+objName+left)=whereLeft(objName)+dx;
eval(obj+objName+top)=whereTop(objName)+dy
}
כעת, אם תפשת את הרעיון, התחלנו ביצירת
ספריה של פונקציות לשפת העל. ספריה זו היא סט
של פונקציות, שכולן פועלות לפי עקרונות של שפת-על,
ומאפשרות יצירת קוד חוצה דפדפנים. בצורה זו,
נוכל ליצור ספרית פונקציות שלמה שתהווה שפת
על מעל לשני ה-DOM-ים.
למעשה, כמה בחורים חכמים כבר יצרו כמה
ספריות של פונקציות עבור DHTML
חוצה-דפדפנים. הרעיון הוא שבאפשרותך לאמץ את
הספריות האלו לשימוש בקוד שלך, ללא צורך לדאוג
בגלל ההבדלים בין שני סוגי ה-DOM. כעת, האם תרצה להשתמש או לא להשתמש
בספריות הפונקציות המוכנות מראש, זו בחירה
אישית שלך. שימוש בפונקציות שמישהו אחר כתב
פירושו לימוד כל אותן פונקציות וחיסכון
בזמן הקידוד שלהן. יצירת ספרית פונקציות
אישית תעניק לך גמישות מקסימלית אך פיתוח כזה
לוקח זמן ודורש ידע נרחב בנושא ה-DOM.