ראשי > תפריטי dhtml נשלפים > תקרית העכבר באקספלורר 4

 

תקרית העכבר באינטרנט אקספלורר 4

function testOut(topic) 
{ toElement=window.event.toElement;
  if (toElement)
   {
    if (toElement.id!="backdrop")
     { inside=eval(topic+".contains(toElement)");
       if (!inside) 
        { clearPop2=self.setTimeout("self.resizeTo(0,0);
opener.focus()",1000); 
        }
  }
}
else { clearPop2=self.setTimeout("self.resizeTo(0,0);
opener.focus()",1000);

}

הפונקציה testOut() קיימת עבור אינטרנט אקספלורר 4. אספקט חשוב של התפריטים הנשלפים הוא לא רק איך הם נשלפים, אלא איך הם נעלמים. בכיוון הזה יש סידרה של  כללים ששולטים על ההיעלמות של התפריטים:

1. כשהתפריט נשלף, למשתמש יש 5 שניות להזיז את העכבר על חלון התפריט. אם במשך 5 השניות המשתמש לא יזיז את העכבר, התפריט ייעלם.

2. כאשר המשתמש מזיז את העכבר מעל חלון התפריט, התפריט יישאר נשלף ללא הפסקה עד ש...

3. כאשר המשתמש מזיז את העכבר מחלון התפריט, התפריט ייעלם בתוך שנייה אחת. אם בתוך השנייה הזו המשתמש מזיז את העכבר באזור חלון התפריט, נחזור לכלל מס' 2.

לבסוף, הפונקציה testout() משרתת את חוק מס' 3 באינטרנט אקספלורר. למה רק באינטרנט אקספלורר? הטיפול באירועים באקספלורר שונה מהטיפול בהם בנוויגטור. האקספלורר משתמש בתפישה שידועה בשם בעבוע (“bubbling "). כאשר מתרחש מאורע כמו תזוזת עכבר, מופיע אלמנט שאולי יטפל במאורע ואולי לא. אם לא נמנע מפורשות מהמאורע לבעבע, הוא עשוי לבעבע ולעבור לטיפול אצל האלמנט הבא בתור לפי ההיררכיה של האלמנטים. בצורה זו, אם המשתמש יזיז את סמן העכבר מקישור שנמצא בתוך טבלה שנמצאת בתוך תג <div>, תיגרם פעולה של הפונקציה MouseOut קודם באלמנט הקישור, אחר כך באלמנט הטבלה ולבסוף באלמנט ה-div .

למה כל זה קורה? כל התפריט המופיע בחלון יושב בתוך רובד, שידוע בשם div block באינטרנט אקספלורר. נרצה לדעת מתי העכבר עוזב את הרובד הזה. אבל, אם נבדוק כל הזמן אם מתרחש MouseOut בתוך ה-div block , נקבל שמתרחש MouseOut בכל רגע שבו המשתמש מזיז את העכבר, כיוון שהזזת עכבר לאלמנט מסוים פירושה הורדת העכבר מאלמנט אחר, וכך נקבל MouseOut שיבעבע למעלה עד ל-div block .

כדי לבחון את כלל 3, נשתמש אפוא בפונקציה testOut() . הפונקציה בודקת לאיזה אלמנט עבר העכבר, ע"י שימוש בתכונת window.event.toElement . אם האלמנט הזה אינו צאצא של ה-div block , נדע שהעכבר באמת עבר מחוץ לתפריט ולא מאלמנט לאלמנט באותו התפריט. במקרה כזה יפעל המתזמן, ובתוך שנייה אחת ייעלם חלון התפריט, בהתאם לכלל מס' 3.

לעמוד הקודם      לעמוד הראשי        לעמוד הבא