ראשי > dhtml חוצה דפדפנים > מאמר חלק 2 > יחידת בונוס

 

יחידת בונוס: מעט אנימציה לא תזיק

מעל הכל, מותר וכדאי לשאוב קצת הנאה מהעבודה, אז שיניתי את האפליקציה של אינדקס הכרטיסים. יצרתי עמוד עם ביצת פסחא. אם המושג לא מוכר לך, "ביצת פסחא" בהקשר של אפליקציית מחשב היא הדגמה נסתרת, בדרך כלל אנימציה, שניגשים אליה במהלך רצף האירועים. הביצה שלי היא אנימציה פשוטה  שמחביאה את הבלוקים של הניווט      "”Previous Card ו-"Next Card", ומוסיפה רצף למחסנית הכרטיסים שישמש בזמן גישה אל הכרטיסים. אנימציה משמשת להוספת רצף.

הפונקציה objSetLeft משמשת למיקום אופקי של הרצף. האנימציה נוצרת ע"י שימוש בפונקציות חוצות הדפדפן objGetTop ו-objSetTop, כדי להתאים את המיקום העליון של האלמנטים. המיקום מתואם בעזרת מתזמן אירועים, מה שיוצר אפקט של "צמיחה" של כרטיסי האינדקס מאחורי מחסנית הכרטיסים.

ברגע שהרצף של כרטיסי האינדקס מופיע, ניתן לגשת אל הכרטיסים ע"י לחיצה עליהם בתוך הרצף, במקום ע"י שימוש בכפתורי ניווט.

הקוד המושלם עבור האפליקציה של האנימציה:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" 
	"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>Index Card Application - Version 2.0</TITLE>
<STYLE type="text/css">
	body { background-color: white; font-family: Arial }
      DIV { position:absolute }
      H2 { color: red;  }
      .indexcard { 	left: 100;
	  	top: 80;
		width: 300;
		visibility: hidden;
		z-index: 3 }
      .card { margin-left: 20px;
	  background-color: white;
	  font-size: 10pt;
	 layer-background-color: white;
	 width: 300;
	z-index: 3}
      DIV A { text-decoration: none;
	  color: black;
	font-weight: bold}
	.tags { top: 90;
	           visibility: hidden;
	          width: 80; z-index: 1 }
	.names { top: 25;
		visibility:hidden;
		z-index: 2 }
	.nameshref { color	: red;
		      font-weight: 400;
		      font-size: 10pt }
	.diff { color   : red;
	         font-weight: 400 }
</STYLE>
<SCRIPT src="ns4_obj.js" language="javascript1.2">
</SCRIPT>

<SCRIPT src="ie4_obj.js" language="jscript">
</SCRIPT>

<SCRIPT LANGUAGE = "JAVASCRIPT">
<!--
// global
var cardNumber = 1;
LASTCARD = 5;

// show navigational text, first index card
// position tag elements
function start() {
   wdvlObjs["contents1"].objShow();
   wdvlObjs["nextbutton"].objShow();
   for (var i = 1; i <= 5; i++) {
	wdvlObjs["tag" + i].objSetLeft(i * 80);
      wdvlObjs["tag" + i].objShow();
      wdvlObjs["name" + i].objSetLeft(i * 80 + 15);
	}
}

// show card based on which tag clicked
function show_card(cardnum) {
   wdvlObjs["contents" + cardNumber].objHide();
   cardNumber = cardnum;
   wdvlObjs["contents" + cardNumber].objShow();
}

// show card based on using navigational text
// next card
function next_card() {
   wdvlObjs["contents" + cardNumber].objHide();
   cardNumber++;
   wdvlObjs["contents" + cardNumber].objShow();
   set_buttons();
}

// show card based on using navigational text
// previous card
function prev_card() {
   wdvlObjs["contents" + cardNumber].objHide();
   cardNumber=cardNumber - 1;
   wdvlObjs["contents" + cardNumber].objShow();
   set_buttons();
}

// show/hide navigational buttons 
// depending on which card is showing
function set_buttons() {
   if (cardNumber > 1)
      wdvlObjs["prevbutton"].objShow();
   else
      wdvlObjs["prevbutton"].objHide();

   if (cardNumber < LASTCARD)
      wdvlObjs["nextbutton"].objShow();
   else
      wdvlObjs["nextbutton"].objHide();
}

// globals for animation
MOVEINCR = 7;
LASTCOUNT = 10;
count = 0;

// create tag animation
function move_tags() {
   if (count == 0) {
	wdvlObjs["nextbutton"].objHide();
	wdvlObjs["prevbutton"].objHide();
	}

   // if animation is not finished
   // find current top position and 
   // decrement it by animation movement amount
   if (count < LASTCOUNT) {
	var topVal = wdvlObjs["tag1"].objGetTop();
	topVal = topVal - MOVEINCR;
      for (var i = 1; i <= 5; i++)
	   wdvlObjs["tag" + i].objSetTop(topVal);
	count++;
      setTimeout("move_tags()", 100);
	}

   // show tag text
   else
	for (i = 1; i <= 5; i++)
	    wdvlObjs["name" + i].objShow();
}     
//-->
</script>
</HEAD>

<BODY onload="wdvlCreateObjects();start()">

<!-- index card background -->
<DIV style="position:absolute;
		left: 80;
		top: 50;
		width: 400;
		z-index: 2">
<img src="Card.jpg" width=400>
</DIV>

<!-- index card contents -->
<DIV id="contents1" class="indexcard">
<h2>Adams</h2>
<DIV class="card">
Terry Adams<br>
1234 SomeWhere Lane<br>
SomeTown, Vt. 05458<p>
(802) 555-1212
</DIV>
</DIV>

<DIV id="contents2" class="indexcard">
<h2>Butler</h2>
<DIV class="card">
Sara Butler<br>
P.O.Box 1<br>
Glad Town, Wa. 99141<p>
(206) 555-1212
</DIV>
</DIV>

<DIV id="contents3" class="indexcard">
<h2>Carter</h2>
<DIV class="card">
Joey Carter<br>
18 Nonesuch Lane<br>
Township, OR  98272<p>
(503) 555-1212</DIV>
</DIV>


<DIV id="contents4" class="indexcard">
<h2>Dunard</h2>
<DIV class="card">
Bill Dunard<br>
Box 1.<br>
Anna, WI.  01000<p>
(888) 555-0000
</DIV>
</DIV>

<DIV id="contents5" class="indexcard">
<h2>Jones</h2>
<DIV class="card">
Mark and Helen 
<a href="" onclick="move_tags();
	return false" class="diff">Jones</a><br>
1600 Penn Ave.<br>
Bigtown, MT.  01000<p>
(501) 555-1212
</DIV>
</DIV>

<!-- index card tags -->
<DIV id="tag1" class="tags">
<img src="tag.jpg" width=80>
</DIV>
<DIV id="name1" class="names">
<a href="" onclick="show_card(1);
	return false" class="nameshref">Adams</a>
</DIV>
<DIV id="tag2" class="tags">
<img src="tag.jpg" width=80>
</DIV>
<DIV id="name2" class="names">
<a href="" onclick="show_card(2);
	return false" class="nameshref">Butler</a>
</DIV>
<DIV id="tag3" class="tags">
<img src="tag.jpg" width=80>
</DIV>
<DIV id="name3" class="names">
<a href="" onclick="show_card(3);
	return false" class="nameshref">Carter</a>
</DIV>
<DIV id="tag4" class="tags">
<img src="tag.jpg" width=80>
</DIV>
<DIV id="name4" class="names">
<a href="" onclick="show_card(4);
	return false" class="nameshref">Dunnard</a>
</DIV>
<DIV id="tag5" class="tags">
<img src="tag.jpg" width=80>
</DIV>
<DIV id="name5" class="names">
<a href="" onclick="show_card(5);
	return false" class="nameshref">Jones</a>
</DIV>

<!-- navigational buttons -->
<DIV id	= "nextbutton"
		style= "left: 500;
		top: 120;
		visibility:hidden">
<a href="" onclick="next_card();
	return false">Next Card</a>
</DIV>
<DIV id	= "prevbutton"
		style= "left: 500;
		top: 140;
		visibility: hidden">
<a href="" onclick="prev_card();
	return false">Previous Card</a>
</DIV>

</BODY>
</HTML>

ניתן ללחוץ כאן ע"מ לראות את הקוד בפעולה

תוכל לנסות את הגרסה הזו של האפליקציה. ברגע שתגיע לכרטיס האחרון  (ששמו "Jones"), לחץ על השם האחרון בחלק הכתובות בשביל להתחיל את האפקט.

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