تحميل الـ SlideShow
ملاحظه : قمت بطرح الموضوع في مدرسه كليبرز ايضا (الاستاذ يوسف) لكن اسمي هناك مختلف
السلايد شو , الجميع يعرفه , نراه كثيرا , او ربما سمعنا عنه
اصبح جزء وعنصر مهم ويستخدم بكثره في التصاميم العصرية
هناك اشكال وانماط وتأثيرات مختلفه له , اليوم سوف اشرح لكم
طريقه من عشرات الطرق تمكننا من عمل السلايد شو وبانماط مختلفه
في البدايه اود ان اوضح ان الكود من اجتهادي الخاص , واحببت ان اشرحه لكم
لكي اعطيكم الفكره التي من خلالها نستطيع ان نقوم باشياء عده غير السلايد شو
كما ويمكن للبعض استخدام الامثله ان ارادو لا يوجد اي مشكله
سنبدأ باسم الله
النمط الاول - في البدايه اود ان اوضح كيف سنعمل
اولا النمط الاول هو عباره عن سلايد شو يعمل تلقائيا ويعرض فيه نص او اذا احببت صور ونص كما تريد وتستطيع ايقاف العمل التلقائي ويمكنك ايضا اعاده تشغيله
التأثير : اختفاء المحتوى الحالي ومن ثم ظهور تدريجي للمحتوى الجديد
اولا كيف ستكون التركيبه للسلايد شو اي الـ (html)
رمز Code:
<h2></h2> <div class="container"><!-- start container --> <div class="con"> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> </div> <a class="stop" href="#">stop</a> <a class="start" href="#">start</a> </div><!-- end container -->
رمز Code:
<div class="slide"></div>
لنبدأ بالـ css
اولا تنسيق الصندوق الخارجي (الذي يحتوي جميع العناصر الداخليه) - container
رمز Code:
.container { width:600px; /* عرض الصندوق الخارجي */ height:290px;/* ارتفاع الصندوق الخارجي */ background:#ddd;/* الخلفية */ margin:40px auto;/* لكي يتم توسيطه وسط الصفحه بالاضافه للبعد من الاسفل والاعلى */ overflow:hidden;/* مهم جدا لكي يخفي كل العناصر الخارجه من الصندوق */ -moz-box-shadow:2px 3px 5px #000; /*ظل للنص يعمل مع الفيرفوكس*/ -webkit-box-shadow:2px 3px 5px #000;/*كروم وسفاري*/ box-shadow:2px 3px 5px #000;/*ظل للنص يعمل مع الاوبرا*/ position:relative;/* مهم لاننا سوف نحتاج لاعطاء عناصر داخليه بوزشن */ }
الذي يحتوي على صناديق المحتويات(slide) وعرضه سوف يكون حسب عدد صناديق المحتويات وبما انن قمنا باعطاء الصندوق الخارجي خاصيه
وكل (slide)سوف تأخذ نفس عرض الـ container بذلك نضمن اننا سوف نرى فقط
(slide)واحده امامنا والاخريات سوف تختفي لانها خارج حدود الـ container
لكن كيف سنرى الاخريات , ببساطه سوف نقوم بتحرك الـ con الذي يحتوي على الـ
دعونا لا نستبق الامور ونركز والان
تنسيق الـ con overflow:hidden; slide وسوف نحركه بمقدار عرض الـ slide الواحده وبذلك سنرى واحده تلو الاخرى
رمز Code:
.con { margin:22.5px auto; /* تحديد البعد من الاعلى والاسفل*/ height:240px;/* الارتفاع*/ background:#bbb;/* لون الخلفية */ position:relative;/*مهم جدا لانها ستسمح لنا بتحريك هذا الصندوق*/ border-top:1px solid #fff;/*اطار علوي*/ border-bottom:1px solid #fff;/*اطار سفلي*/ color:#333;/*لون النص*/ text-shadow:0px 1px 0px #ddd;/*ظل للنص - سنعالج الخلل في الاكسبلورر باستخدام اضافه للجيكيوري*/ font-family:"Times New Roman",Georgia,Times, serif;/*نوع الخط*/ font-size:17px;/*حجم الخط*/ left:0; /* مهمه جدا في سفاري والاكسبلورر وكروم لانه القيمه الاصليه فيهم تعطى auto ونحن نريدها صفر وسنستخدم هذه الخاصيه في الانماط التي فيها اسمهم تستخدم في التحريك */ }
لكي يكون مرن بحيث العرض يتغير حسب عدد الـ slides
وهذا يعطينا مرونه كبيره
الان سوف نقوم بعمل الـ css للـ slide
رمز Code:
.slide { width:560px;/* غير مهم */ padding:20px; /* 560+40 = 600 (عرض الـ con)*/ height:200px;/* 200+40 = 240* (ارتفاع الـ con)/ float:left; }
حسب عرض الـ container وبذلك حتى لو قمنا بتوسيع الـ container سوف
توسع هذه تلقائيا او حتى لو قلصناها شيء جميل اليس كذلك
سوف نعود لتنسيق الـ ايقونات البدايه والايقاف فيما بعد
الان لنبدا بالـ jquery
نستدعي ملف المكتبه والملف الذي نريد ان نكتب فيه الاكواد
رمز Code:
<script src="scripts/last.js" type="text/javascript" ></script> <script src="scripts/script.js" type="text/javascript" charset="utf-8" ></script>
رمز Code:
$(function(){ نكتب هنا الاكواد});
شرح كامل في التعليقات
رمز Code:
$(function(){ var realWidth= $('.slide').size(); //ايجاد عدد الـ slide var realslideWidth = $('.slide').outerWidth(); //ايجاد العرض الخارجي للـ slide var realslidewidth2 = $('.slide').width();//ايجاد عرض الـ slide var real_w = realslideWidth - realslidewidth2 ; //لمعرفه الـ padding var containerWidth= $('.container').width(); //عرض الـ container /*الان سنحدد عرض الـ slide ,وسوف يكون العرض هو نفس عرض الـ container لكن ننقص منه الـ padding الخاص بـ slide لكي تكون النتيجه متساويه تماما */ $('.slide').css('width',containerWidth-real_w); //تحديد عرض الـ slide /*الان سوف نحدد عرض ال con وسوف يكون حسب عدد الـ slide */ $('.con').width((containerWidth)*realslideWidth); //تحديد عرض الـ con var i=1; //تعريف متغير var count = 0; //تعريف متغير function animation(){ // الفنكشن الخاص بالحركه if(count != realWidth-1){ /* الشرط يتحقق باننا لسنا في اخر سلايد لانناان كنا في اخر سلايد نريده ان يرجعنا للاولى بعدها اما ان لم نكن فعليه ان يتقدم للسلايد التاليه */ $('.con').fadeOut('slow'); //اختفاء تدريجي للسلايد الحاليه $('.con').animate({'left':(-containerWidth)*i},500); /* كيف سنجعله يعرض لنا السيلايد التاليه ؟ نحرك الصندوق الكلي (con) بنفس عرض السلايد الواحده وبذلك تظهر السلايد التاليه وهذا ما فعلناه هنا حركنا الـ con بمقدار عرض الـ slide الى اليسار لكنك لن تشاهد الحركه لان السلايد مختفيه ! المتغير i يبين لنا في اي سلايد نحن الان الاولى الثانيه الثالثه اي واحده ؟ لانه حسب اي واحده سوف نقرر كم مقدار الازاحه لليسار بالنسبة لل con */ $('.con').fadeIn(1500); /* بعد انتهاء الحركه سوف يتم عرض السلايد الجديده وسوف تشاهدها */ i++; /* زياده المتغير بمقدار واحد */ count++; /* زياده المتغير بمقدار واحد */ } else { //في حال كنا في السلايد الاخيره $('.con').fadeOut('slow');//اخفاء السلايد الاخيره $('.con').animate({'left':0},500); /* ارجاع الـ con للبدايه اي انه سيعود للسلايد الاولى */ $('.con').fadeIn(1500);//اظهار السلايد والتي سوف تكون الاولى count=0;//ارجاع القيم الافتراضيه للمتغيرات i=1;//ارجاع القيم الافتراضيه للمتغيرات } } /* تشغيل الفنكشن animation مره كل 7 ثواني */ var e = setInterval(animation,7000); });
اولا الـ css
رمز Code:
.stop { position:absolute; /*مهم*/ left:35px;/*البعد من يسار الـ container*/ bottom:1px;/*البعد من اسفل الـ container*/ width:24px;/*العرض*/ height:24px;/*الارتفاع*/ text-indent:-999999px;/*لاخفاء النص*/ background:url('../images/stop.png');/*مسار الخلفيه*/ } .start { position:absolute; /*مهم*/ left:85px;/*البعد من يسار الـ container*/ bottom:1px;/*البعد من اسفل الـ container*/ background:url('../images/start-clicked.png');/*مسار الخلفيه*/ width:24px;/*العرض*/ height:24px;/*الارتفاع*/ text-indent:-999999px;/*لاخفاء النص*/ }
رمز Code:
.start:hover {background:url('../images/start-hover.png');} .stop:hover {background:url('../images/stop-hover.png');} .stop:active {background:url('../images/stop.png');} .start:active('../images/start.png');}
رمز Code:
$('.stop').click(function(){ //عند الضغط على الايقاف $(this).css({'background':'url("images/stop-clicked.png")'}); //تغيير الخلفيه للايقاف $(this).next().css({'background':'url("images/start.png")'}); // تغيير الخلفيه للـ تشغيل clearInterval(e); // ايقاف الـ slideshow return false; //تعطيل التصرف الافتراضي للرابط }); $('.start').click(function(){//عند الضغط على التشغيل $(this).css({'background':'url("images/start-clicked.png")'}); // تغيير الخلفيه للـ تشغيل $(this).prev().css({'background':'url("images/stop.png")'}); //تغيير الخلفيه للايقاف e = setInterval(animation,7000); //بدء الـ slideshow return false;//تعطيل التصرف الافتراضي للرابط });
النمط الثاني هو عباره عن سلايد شو يعمل تلقائيا ويعرض فيه نص او اذا احببت صور ونص كما تريد وتستطيع ايقاف العمل التلقائي ويمكنك ايضا اعاده تشغيله
التأثير : تحريك المحتوى امامك بدون اخفاء وظهور
النمط الثاني مطابق للاول في كل شيء الا في شي بسيط سوف اوضحه
ونفس الشيء في الـ html
لكن نغير الكلاسات - فضلت وضع كلاسات وليسid
مع العلم ان كل نمط كلاسات مختلفه لكي لا يحدث اخلاط في الـ jquery
والكلاسات افضل لانه ممكن اكرر نفس لسلايد ولكن انت تستطيع اختيار ما تشاء
حسب استخدامك للسلايد
رمز Code:
<h2>slideshow(auto scroll)</h2> <div class="container-scroll"> <div class="con-scroll"> <div class="slide-scroll"></div> <div class="slide-scroll"></div> <div class="slide-scroll"></div> <div class="slide-scroll"></div> </div> <a class="stop-scroll" href="#">stop</a> <a class="start-scroll" href="#">start</a> </div>
مثل هذا
رمز Code:
.container, .container-scroll {}
اما الاختلاف فهو في الـjquery
وبالتحديد في الدالهـ المسؤوله عن التأثير
لنرى الاختلاف
رمز Code:
function animationscrolling(){ if(countscroll != realWidth_scroll-1){ $('.con-scroll').animate({'left':(-containerWidth_scroll)*iscroll},500); iscroll++; countscroll++; } else { $('.con-scroll').animate({'left':0},500); countscroll=0; iscroll=1; } }
داخل فنكشن لكن افضل تغييرها
وقمنا بوضع اسماء الكلاسات الجديده
والاختلاف اننا حذفنا الـ fadeOut & fadeIn
---------------------------------------------------------------------------------
اسف لعدم عنايتي بتصميم الصور الموجوده في الموضوع بسبب ضيق الوقت
انا تعبت بصراحه يا جماعه في المره القادمه سوف اشرح اما النمطين 3 و 4
او ممكن جميع الانماط الباقيه والانماط القادمه فيها تنوع اكثر وتعقيد اكثر قليلا
ليست هناك تعليقات:
إرسال تعليق