اليوم نبدأ الفصل قبل الاخير الفصل الثالث عشر
وانتظروا الحلقه الاخيره من المسلسل باحداث دراميه غير متوقعه :D
الفصل الثالث عشر يحتوي على
*** بروتوكول جافا سكربت
*** السمات الخاصه بالطبقات
*** امكانيه رؤيه الطبقه
*** المحتويات الفعاله
*** عرض الشرائح
*** تغيير وضع الطبقات
*** تمرير الطبقات
*** الطبقات المنبثقه
*** القائمه النشطه
*** الخيارات الحديثه
بروتوكول جافا سكربت
يمكن تحديده لسمه herf في عنصر anchor الخاص بـ html بحيث تكون داله جافا سكربت
بمثابه هدف الارتباط التشعبي ويجب ان يكون اسم الداله متبوعا باسم بروتوكول لتحديد
كود النص البرمجي الذي يتم تنفيذه او ادراج الاجزاء الصغيره للكود في سطر بعد الاسم
مباشره ويحتوي المثال التالي على كل من الكود الذي يتألف من سطر واحد وكذلك استدعاء
الداله بحيث يتم تنفيذ كل منهما عندما يقوم المستخدم بالنقر على الرابط الخاص بهما
كود:
<SCRIPT TYPE="text/javascript"> <!-- function respond(){ alert("Script-block code"); } //--> </SCRIPT> <A HERF="javascript:alert('In-line code')">NaWaL #1</A> <A HERF="javascript:respond()">NaWaL #2</A>
**** ملاحظه ****
يمكنك ايضا انشاء عنصر anchor لا يحمل اي دلاله في البعض باستخدام //:JavaScript وبذلك
سيمكنك استخدام ايه سمات اخرى مثل onmouseover
السمات الخاصه بالطبقات
تعتبر id و top و left و z-index و visibility و bgColor بمثابه السمات الست
الخاصه بالطبقات التي يمكن استخدامها في dhtml يمكن استخدام هذه السمات في
علامه الترميز <Layer> في ادوات التصفح الخاصه بالنت سكيب لتحديد مكونات الطبقه
وانشاء خصائص متعلقه بكائن layer ويتم كتابه الجزء العلوي للاطار الخاص بالطبقه
lyr في النص على هذا النحو document.lyr.top وهناك اختلافات كبيره في ادوات
التصفح الخاصه بمايكروسفت حيث انها تستخدم سمه style في علامه الترميز <div>
تحديد مكونات النص من خلال الاستعانه بالفاصلات المنقوطه ويتم كتابه الجزء العلوي
للاطار الخاص بالطبقه lyr على هذا النحو lyr.style.top ويقوم المثال التالي
بانشاء طبقه وتسجيل قيم خاصه بالجزء العلوي للطبقه والمكونات اليسرى
كود:
<SCRIPT TYPE="text/javascript"> <!-- if(document.layers){ document.write('<LAYER ID="lyr"top="15"left="170"width="50"height="50"z-index="10"bgColor="silver"visibility="visible">Layer</LAYER>'); document.write("Top="+document.lyr.top+"Left="+document.lyr.left);} if(document.all){ document.write('<DIV ID="lyr"STYLE="position:absolute;top:15;left:170;width:50;height:50;z-index:10;background-color:silver;visibility:visible">Layer</DIV>'); document.write("Top="+document.all.lyr.style.top+"Left="+document.all.lyr.style.left); } //--> </SCRIPT>
**** ملاحظه ****
السمه الخاصه بلون الخلفيه في مستعرض الانترنت اكسبلور هي background-color
بدلا من bgColor
امكانيه رؤيه الطبقه
عندما تقوم بتحديد كيفيه انشاء طبقات باستخدام جافا سكربت في كل من انترنت اكسبلور
والنت سكيب يمكنك استخدام جافا سكربت في يمكنك الاستعانه بالامكانيات الخاصه بلغه
جافا سكربت لتغيير قيم السمات الخاصه بكل منهما بطريقه ديناميكيه على سبيل المثال
اذا قمت بتغيير القيمه الخاصه بسمه visibility الى hidde فان هذا سيؤدي الى اخفاء
الطبقه من الشكل وعلى النقيض من ذلك يمكن اظهار الطبقه التي تم اخفاؤها من خلال
تغيير هذه القيمه الى visible ويقوم النص البرمجي التالي بتبديل امكانيه رؤيه
طبقه واحده باستخدام معالج الحدث onmouseover و onmouseset ومن الممكن ان يقوم
النص ايضا بتبديل العديد من الطبقات بسهوله لمزيد من التأثير
كود:
<SCRIPT TYPE="text/javascript"> <!-- if(document.layers){ document.write('<LAYER ID="lyr"top="15"left="100"width="140"height="140"z-index="10"visibility="hidden"><IMG SRC="NaWaL.jpg"WIDTH="140"HEIGHT="140"BORDER="0"></LAYER>'); } if(document.all){ document.write('<DIV ID="lyr"STYLE="position:absolute;top:15;left:170;width:50;height:50;z-index:10;visibility:hidden"><IMG SRC="NaWaL.jpg"WIDTH="140"HEIGHT="140"BORDER="0"></DIV>'); } function showNaWaL(){ if(document.layers)document.lyr.visibility="visible"; if(document.all)lyr.style.visibility="visible"; } function hideNaWaL(){ if(document.layers)document.lyr.visibility="hidden"; if(document.all)lyr.style.visibility="hidden"; } //--> </SCRIPT>
ويبدو الكود الخاص برابط html على النحو التالي
كود:
<A HERF="javascript://"ONMOUSEOVER="showNaWaL()"ONMOUSEOUT="hideNaWaL()">NaWaL Link</A>
المحتويات الفعاله
يمكن ان تستخدم لغه جافا سكربت في كتابه المحتويات على الطبقه التي قمت
بانشائها دون تأثير على المحتويات الموجوده في اي مكان على الصفحه وسيظل
مكان الطبقه كما هو ولكن ارتفاعها سيزيد بشكل تلقائي اذا كان المحتوى لا
يتناسب مع حجم الطبقه الحالي ويمكن للنص ان يلتف بشكل تلقائي على حد
الطبقه وبالتالي لن يتم تقسيم الكلمات ويقوم المثال الذي يعرض هذه الامكانيه
بانشاء طبقه ثم يقوم بكتابه النص الذي يتم ادخاله عن طريق المستخدم في مربع
النص بشكل فعال عند الضغط على زر input لاحظ التركيب الخاص بادوات التصفح
نت سكيب حيث يحتوي طبقه المستند نفسها على خاصيه document
كود:
<SCRIPT TYPE="text/javascript"> <!-- if(document.layers){ document.write('<LAYER ID="lyr"top="90"left="10"width="200"height="20"z-index="10"bgColor="silver"></LAYER>'); } if(document.all){ document.write('<DIV ID="lyr"STYLE="position:absolute;top:90;left:10;width:200;height:20;z-index:10;background-color:silver"></DIV>'); } function write_entry(){ var str=document.n.txt.value; if(document.all)lyr.innerHTML=str; if(document.layers){ document.lyr.document.open(); document.lyr.document.write(str); document.lyr.document.close();} } //--> </SCRIPT>
ويبدو الكود الخاص برابط html على النحو التالي
كود:
Please enter some text below: <FORM NAME="n"> <INPUT TYPE="text"VALUE=""NAME="txt"> <INPUT TYPE="button"VALUE="Write Entry"ONCLICK="write_entry()"> </FORM>
عرض الشرائح
يمكن لجافا سكربت ان تقوم بتدوير الصور لعرض الشرائح بشكل تلقائي والتي تقوم
بتحديث الصوره بعد فتره يتم تحديدها من قبل وفي هذا النص يقوم برنامج التحميل
السابق بتنزيل كل الصور على الذاكره حتى يتمكن عرضها ويتم تحديد زمن التدوير بالملي
ثانيه من خلال القيمه التي تم تعيينها للمتغير المسمى بـ pause ويعتبر المتغير المسمى
بـ n بمثابه عداد تعين قيم متزايده فيه من خلال داله rotate ويمكن استخدامه لعرض
الصوره في رقم الفهرس الذي تم تحديده داخل مصفوفه imgs[] يجب ان تحتوي كل الصور
على نفس الابعاد وان تكون ملفاتها صغيره الحجم لتجنب اي تأخير في عمليه التزيل
كود:
<SCRIPT TYPE="text/javascript"> <!-- var pause=3000; var n=0; var imgs=new Array("butterfly.gif","globe.gif","fish.gif",clock.gif"); var preload=new Array(); for(var i=1;i<imgs.length;i++){ preload[i]=new Image(); preload[i].src=imgs[i]; } function rotate(){ document.images.pic.src=imgs[n]; (n==(imgs.length-1))?n=0:n++; setTimeout(''rotate()'',pause); } window.onload=rotate; //--> </SCRIPT>
ويقوم كود html المستخدم في عرض الشرائح الخاصه بجافا سكربت بتحديد
اسم pic للصوره الاصليه حتى يمكن للنص البرمجي ان يشير الى كائن image
على هذا النحو التالي document.images.pic
كود:
Enjoy the show<BR> <IMG NAME="pic"SRC="bfly.gif"WIDTH="72"HEIGHT="72"ALT=""VSPACE="5"HSPACE="10">
**** ملاحظه ****
يجب التـأكد من ان جميع الصور تبدو بالحجم الفعلي الذي يسمح بعرضها
حتى لا يكون المتصفح بحاجه الى تغيير الحجم عند العرض
تغيير وضع الطبقات
يمكن تعديل الاحداثي الايسر للطبقه في جافا سكربت من اجل تغيير الطبقه على
امتداد محور X ويقوم المثال التالي بانشاء طبقه تحتوي على صوره لمركب شراعي
خارج الحد الايسر للاطار ثم تتولى داله timer تنفيذ عمليه ابحار المركب على الشاشه
عندما تختفي صوره المركب من الحافه اليمنى للاطار فان جافا سكربت تقوم بجعل
المركب الشراعي يتجه الى الناحيه المعاكسه وبالتالي فان النص البرمجي يقوم
بتغيير اتجاه المركب من اليمين الى اليسار وعندما تختفي صوره المركب من الحافه
اليسرى للاطار فانها ستعود الى وضعها الاصلي بحيث يعاود المركب الابحار من الناحيه
اليمنى وهكذا ويتحكم المتغير goright في اتجاه السير او الابحار ويتم ضبط المتغير
على قيمه true وينعكس اتجاه المركب عند وصوله الى اقصى اليمين او اقصى اليسار
ويمكن رؤيه داله setsail في شطرين بحيث يقوم في الشطر الاول بتشغيل الكود في
متصفح انترنت اكسبلور بينما يقوم الشطر الثاني بتشغيل الكود الخاص بالنت سكيب
ويعتبر هذا بمثابه توضيح جيد لكود جافا سكربت الذي يقوم بتحقيق نفس التأثير
في كل متصفح ولكنه يتم تجاهله من قبل ادوات التصفح الاخرى
كود:
<SCRIPT TYPE="text/javascript"> <!-- var preload=new Image();preload.src="sail_1.gif";var goright=true; if(document.all)document.write("<div id='boat'style='position:absolute;top:20;left:-75;width:70;height:85'><img name='boat_image'src='sail_r.gif'alt=''></div>"); if(document.layers)document.write("<layer id='boat'top='20'left='-75'width='70'height='85'><img name='boat_image'src='sail_r.gif'alt=''></layer>"); function setsail(){ if(document.all) { if(goright) boat.style.left=(parseInt(boat.style.left)+1); else boat.style.left=(parseInt(boat.style.left)-1); if(parseInt(boat.style.left)>=(document.body.clientWidth+5)){ goright=false; document.images.boat_image.src="sail_1.gif";} if(parseInt(boat.style.left)<=-75){ goright=true; document.boat_image.src="sail_r.gif";} } if(document.layers) { if(goright) document.boat.left+=1 else document.boat.left-=1 if(document.boat.left>=(window.innerWidth+5)) { goright=false; document.boat_image.src="sail_1.gif";} if(document.boat.left<=-75){ goright=true; document.boat_image.src="sail_r.gif";} } window.setTimeout("setsail()",50); } setsail(); //--> </SCRIPT>
**** ملاحظه ****
استخدم animated gifts للحصول على نتائج مثيره ويجب ان تكون القيم الخاصه بوحدات
البكسل متبوعه بـ Px في النهايه داخل متصفح انترنت اكسبلور ولذلك فان تقنيه
Parse Int تكون مطلوبه لاستخراج الجزء الصحيح للتعامل معه
تمرير الطبقات
تم تعديل الخاصيه left في المثال السابق لسمه layer ولكن هذا المثال يقوم
بالتعامل مع خاصيه top الخاصه بالطبقه بهدف تمرير هذا الجزء الى اعلى او اسفل
على الاحداثي Y يقوم النص اولا بانشاء طبقه محدده خاصه بالمتصفح تحتوي على
صوره لطائره هيلكوبتر ويقوم كود html باضافه ارتباطات تشعبيه تقوم باستدعاء
دوال جافا سكربت ولكن هذه الارتباطات لا تحتوي على العنوان المطلوب وعندما يقوم
المستخدم بوضع المؤشر على الرابط التشعبي الذي يطلق عليه Soar فان داله timer
تقوم بزياده القيمه في خاصيه top وبالتالي الطبقه تتحرك الى اعلى الاطار عند
وضع المؤشر على الرابط التشعبي المسمى بـ Sink والذي يحمل التأثير العكسي
فان الطبقه تتحرك اسفل الاطار وفي كل حاله يتم الغاء داله timer عندما يتحرك
المؤشر بعيدا عن الرابط التشعبي وكذلك عندما تتوقف حركه الطبقه
كود:
<SCRIPT TYPE="text/javascript"> <!-- var timer; var &@#&@#&@#&@#&@#&@#&@#='<IMG SRC="copter.gif"WIDTH="100"HEIGHT="50"ALT="">'; if(document.layers){ document.write('<LAYER ID="lyr"top="100"left="150">'+&@#&@#&@#&@#&@#&@#&@#+'</LAYER>');} if(document.all){ document.write('<DIV ID="lyr"STYLE="position:absolute;top:100;left:150">'+&@#&@#&@#&@#&@#&@#&@#+'</DIV>');} function soar(){ if(document.all)lyr.style.top=parseInt(lyr.style.top)-1; if(document.layers)document.lyr.top-=1; timer=setTimeout("soar()",50); } function sink(){ if(document.all)lyr.style.top=parseInt(lyr.style.top)+1; if(document.layers)document.lyr.top+=1; timer=setTimeout("sink()",50); } function stop(){ clearTimeout(timer); } //--> </SCRIPT> <A HERF="javascript://"ONMOUSEOVER="soar()"ONMOUSEOUT="stop()">Soar</A> <A HERF="javascript://"ONMOUSEOVER="sink()"ONMOUSEOUT="stop()">Sink</A>
**** ملاحظه ****
عند وضع المشر على Soar فان الرابط سيؤدي الى تحريك الصوره الى اعلى الرابط
تعتبر تقنيه parseInt مطلوبه للحصول على اعلى قيمه للطبقه بواسطه متصفح انترنت
اكسبلور لتعديل سرعه التمرير قم بتغيير داله timer من 50
الطبقات المنبثقه
يقوم هذا المثال باستكمال امكانيه رؤيه واخفاء الطبقات المذكوره في المثال
السابق في هذا الفصل من خلال انشاء طبقات متعدده ومحدده خاصه بالمتصفح والتي يتم
فيها التبديل بين امكانيه والرؤيه والاخفاء من خلال تخطيطات الصوره وعندما يتم وضع
المؤشر على الرابط التشعبي فان داله جافا سكربت ستقوم بعرض الطبقه المناسبه ولكنها
ستقوم باخفاء هذه الطبقه عندما يتحرك المؤشر بعيدا عن الرابط
كود:
<SCRIPT TYPE="text/javascript"> <!-- var bod='<IMG SRC="harsal.gif"WIDTH="190"HEIGHT="100"USEMAP="#harsal"BORDER="0">'; var sal='<IMG SRC="hisal.gif"WIDTH="100"HEIGHT="40">'; var har='<IMG SRC="hihar.gif"WIDTH="100"HEIGHT="40">'; if(document.layers){ document.write('<LAYER ID="lyr"top="80"left="50">'+bod+'</LAYER><LAYER ID="sal"top="30"left="130"z-index="10"visibility="hidden">'+sal+'</LAYER><LAYER ID="har"top="30"left="55"z-index="20"visibility="hidden">'+har+'</LAYER>');} if(document.all){ document.write('<DIV ID="lyr"STYLE="position:absolute;top:70;left:30">'+bod+'</DIV><DIV ID="sal"STYLE="position:absolute;top:20;left:110;z-index:10;visibility:hidden">'+sal+'</DIV><DIV ID="har"STYLE="position:absolute;top:20;left:35;z-index:10;visibility:hidden">'+har+'</DIV>');} function talk(n){ if(document.all){ if(n==0)document.all.har.style.visibility="visible"; if(n==1)document.all.sal.style.visibility="visible";} if(document.layers){ if(n==0)document.har.visibility="visible"; if(n==1)document.sal.visibility="visible";} } function hush(n){ if(document.all){ if(n==0)document.all.har.style.visibility="hidden"; if(n==1)document.all.sal.style.visibility="hidden";} if(document.layers){ if(n==0)document.har.visibility="hidden"; if(n==1)document.sal.visibility="hidden";} } //--> </SCRIPT>
وفيما يلي كود html الخاص بتخطيط الصوره المستخدم في كود جافا سكربت
كود:
<MAP NAME="harsal"> <AREA SHAPE=RECT COORDS="0,0,60,100"HERF="javascript://"ALT=""ONMOUSEOVER="talk(0)"ONMOUSEOUT="hush(0)"> <AREA SHAPE=RECT COORDS="130,0,190,100"HERF="javascript://"ALT=""ONMOUSEOVER="talk(1)"ONMOUSEOUT="hush(1)"> </MAP>
القائمه النشطه
يستخدم هذا المثال الاحداثيات الخاصه بالماوس من اجل تغيير امكانيه الرؤيه الخاصه
بطبقات القائمه بالاضافه الى انه يستخدم انماط style sheet لتحديد المكونات الخاصه
بطبقه الشريط الرئيسي والطبقات الخاصه بالقوائم
كود:
<SCRIPT TYPE="text/javascript"> <!-- if(document.layers)document.captureEvents(Event.MOUSEMOVE); document.onmousemove=track; divref=(document.all)?"":"document."; stlref=(document.all)?"style.":""; function track(e){ var x=(document.all)?event.x:e.pageX; var y=(document.all)?event.y:e.pageY; if(x<1||x>65||y<53||y>123) eval(divref+"b."+stlref+"visibility='hidden'"); if(x<80||x>145||y<53||y>123) eval(divref+"c."+stlref+"visibility='hidden'"); if(x<160||x>225||y<53||y>123) eval(divref+"d."+stlref+"visibility='hidden'"); } function reveal(menu){ eval(divref+menu+"."+stlref+"visibility='visible'"); } //--> </SCRIPT> <STYLE TYPE="text/css"> <!-- .bar{position:absolute;left:0;top:50;color:black;width:800;height:20px;background:silver;font-family:verdana;font-size:10pt;border-color:white;border-width:1; } .menu{position:absolute;width:65;height:50;background:silver;top:71px;visibility:hidden;font-family:verdana;font-size:10pt;border-color:white;border-width:1px;} //--> </STYLE>
وكود الـ HTML الخاص بهذا المثال على النحو التالي
كود:
<DIV ID="a"CLASS="bar"> <A HERF="javascript://"ONMOUSEOVER="reveal('b')"> Menu 1</A>| <A HERF="javascript://"ONMOUSEOVER="reveal('c')"> Menu 2</A> | <A HERF="javascript://"ONMOUSEOVER="reveal('d')"> Menu 3</A> | </DIV> <DIV ID="b"CLASS="menu"STYLE="left:0"LEFT="0"> <A HERF="target1.htm">Item 1</A> <A HERF="target2.htm">Item 2</A> <A HERF="target3.htm">Item 3</A></DIV> <DIV ID="c"CLASS="menu"STYLE="left:80"LEFT="80"> <A HERF="target4.htm">Item 1</A> <A HERF="target5.htm">Item 2</A> <A HERF="target6.htm">Item 3</A></DIV> <DIV ID="d"CLASS="menu"STYLE="left:160"LEFT="160"> <A HERF="target7.htm">Item 1</A> <A HERF="target8.htm">Item 2</A> <A HERF="target9.htm">Item 3</A></DIV>
الخيارات الحديثه
في هذا المثال تقوم جافا سكربت بتغيير قائمه الخيارات النشطه والقيم
الخاصه بها طبقا لزر الاختيار الذي يتم تحديده
كود:
<SCRIPT TYPE="text/javascript"> <!-- function setcities(){ if(document.n.rad[0].checked)jap(); if(document.n.rad[1].checked)usa(); } function jap(){ with(document.n.s.options[0]){ selected=true;text="Select Ctiy...";value="";} with(document.n.s.options[1]){ text="Kyoto";value="kyoto";} with(document.n.s.options[2]){ text="Osaka";value="osaka";} with(document.n.s.options[3]){ text="Tokyo";value="tokyo";} showvalue(); } function usa(){ with(document.n.s.options[0]){ selected=true;text="Select Ctiy...";value="";} with(document.n.s.options[1]){ text="New York";value="new york";} with(document.n.s.options[2]){ text="Los Angeles";value="los angeles";} with(document.n.s.options[3]){ text="Washington";value="washington";} showvalue(); } function showvalue(){ document.n.txt.value=document.n.s.option[document.n.s.selectedIndex].value;} //--> </SCRIPT> <FORM NAME="n"> Selected Value:<BR> <INPUT TYPE="text"NAME="txt"VALUE=""SIZE="16"><BR> <INPUT TYPE="radio"NAME="rad"ONCLICK"setcities()">Japan <INPUT TYPE="radio"NAME="rad"ONCLICK"setcities()">USA <BR> <SELECT NAME="s"ONCHANGE="showvalue()"> <OPTION VALUE=""SELECTED>Select Country...</OPTION> <OPTION VALUE=""></OPTION> <OPTION VALUE=""></OPTION> <OPTION VALUE=""></OPTION> </SELECT> </FORM>