مدونة علم البرمجة والحاسوب
من حقك ان تتعلم اكثر

دورة جافا سكربت - Javascript الدرس الثالث عشر


اليوم نبدأ الفصل قبل الاخير الفصل الثالث عشر

وانتظروا الحلقه الاخيره من المسلسل باحداث دراميه غير متوقعه :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')">&nbsp;

Menu 1</A>|

<A HERF="javascript://"ONMOUSEOVER="reveal('c')">&nbsp;

Menu 2</A>&nbsp;|

<A HERF="javascript://"ONMOUSEOVER="reveal('d')">&nbsp;

Menu 3</A>&nbsp;|

</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>

أرشيف المدونة الإلكترونية

من انا ؟