به نام خدا
سلام دوستان عزیز
تو این مطلب میخوام گونه متفاوتی از رابط کاربری نظرسنجی رو با هم پیاده سازی کنیم. تو اینجور رابط کاربری غالبا از چک باکس و یا دکمه رادیویی برای انتخاب گزینه و یا گزینههای مورد نظر استفاده میشه که خب طبیعیه. حالا شاید دیده باشین که بعضی از سایتها از این حالت استفاده نمیکنه و اون گزینه ممکنه رو به صورت گرافیکی به کاربر “نشون بدن”. این که گفتم نشون “بدن” دلیل داشت که در طور کار متوجه میشیم.
ما تو این کار از چک باکس و دکمه رادیویی استفاده میکنیم چون میخوایم از طریق متد POST و یا GET اطلاعات رو ارسال کنیم ولی اون رو به کاربر نشون نمیدیم. تنها چیزی که کاربر میبینه یک div گرافیکی که با کلیلک روی اون استایل div تغییر میکنه یعنی کاربر اون رو در حالت انتخاب قرار داده و در پشت پرده اتفاقات ما چک باکس یا دکمه رادیویی با کلیک روی div مورد نظر تیک میخوره و با حذف اون تیکش هم برداشته میشه. بعدشم با ارسال اون بر اساس دکمه تیک خورده اطلاعات منتقل میشه نه یه div گرافیکی. البته اگه بخوایم با ای جکس نظرسنجی رو ارسال کنیم میشه چک باکس هم نذاشت.
بریم سراغ کارمون:
کد HTML :
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>طراحی رابط کاربری نظرسنجی بوسیله HTML و CSS3 و jQuery</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <script type="text/javascript"> //jQuer Code is here </script> </head> <body> <div id="wrapper"> <div class="pollbox poll1"> <h3>نظرسنجی</h3> <p>نظر شما در مورد طراحی قالب چیست؟</p> <div class="case green"> خیلی خوب <input type="radio" name="poll1" value="verygood"> </div> <div class="case green"> خوب <input type="radio" name="poll1" value="good"> </div> <div class="case green"> معمولی <input type="radio" name="poll1" value="medium"> </div> <div class="case green"> بد <input type="radio" name="poll1" value="bad"> </div> <div class="case green"> خیلی بد <input type="radio" name="poll1" value="verybad"> </div> <input type="submit" value="ثبت"> </div> <div class="pollbox poll2"> <h3>نظرسنجی</h3> <p>کدام از زبانهای زیر را دوست دارید؟</p> <div class="case dark"> PHP <input type="checkbox" name="php" value="php"> </div> <div class="case dark"> HTML <input type="checkbox" name="html" value="html"> </div> <div class="case dark"> CSS <input type="checkbox" name="css" value="css"> </div> <div class="case dark"> MySQL <input type="checkbox" name="mysql" value="mysql"> </div> <div class="case dark"> JavaScript <input type="checkbox" name="javascript" value="javascript"> </div> <input type="submit" value="ثبت"> </div> </div> </body> </html>
طبق معمول اول فایل کتابخانه جی کوئری رو بارگذاری میکنیم. داخل قسمت اسکریپت خالیه که قراره کدهای جاوا اسکریپت داخلش قرار بگیره. divبا شناسه wrapper که کل محتوا رو داخلش قرار میدیم.(دوست داشتین نذارین!) خب ما دو سیستم نظرسنجی رو پیاده میکنیم که یکی از دکمه رادیویی استفاده کرده یعنی میتونیم فقط یه مورد رو انتخاب کنیم و دومی از از چک باکس یعنی حق انتخاب چند مورد رو داریم. این قسمتها کاملا مشخصه اصل مطلب اینجاست که ما بجای یه دکمه چک باکس یا رادیویی اومدیم از div استفاده کردیم و دکمه رو برای نگه داشتن اطلاعات و ارسال اونا به سمت سرور داخل همون div قرار دادیم. کلاس green و dark رو فقط برای استایل به گزینه انتخاب شده قرار دادیم. تا اینجا هر div به منزله یه دکمه انتخابی حساب میشه. خب حالا میریم سراغ استایل دهی. میخوایم کاری کنیم تا وقتی کاربر روی گزینه که div هست کلیک کنه یه استایل به اون داده میشه یعنی الان کاربر اون رو انتخاب کرده.
کد CSS :
body{ direction: rtl; text-align: right; } #wrapper{ padding: 50px; } .pollbox{ border-radius: 5px; background: #F7F7F7; border: 1px solid #CACACF; width: 300px; padding: 15px; float: right; margin: 10px; border-right: 3px solid #C9C9C9; border-bottom: 3px solid #C9C9C9; overflow: hidden; } .pollbox h3{ margin : -18px; padding: 12px 15px; border-bottom: 1px solid #E0E0E0; background-image: -webkit-linear-gradient(#B9FF91,#FFF); background-image: -moz-linear-gradient(#B9FF91,#FFF); background-image: -ms-linear-gradient(#B9FF91,#FFF); background-image: -o-linear-gradient(#B9FF91,#FFF); } .pollbox p{ padding: 10px 4px; } .pollbox .case{ margin: 4px 5px; padding: 10px; border-radius: 5px; background: #F8F8F8; border: 1px solid #E2DCDC; border-bottom: 4px solid #CFCFCF; border-right: 4px solid #CFCFCF; cursor: pointer; color: #5A5A5A; -webkit-transition:all 0.2s linear; -moz-transition:all 0.2s linear; transition:all 0.2s linear; } .pollbox .case:hover{ background: #E8FCF0; border-color: #C4EEEC } .pollbox .case.active.green{ background: #4CA12B; background-image: -webkit-linear-gradient(#4CA12B,#2B6813); background-image: -moz-linear-gradient(#4CA12B,#2B6813); background-image: -ms-linear-gradient(#4CA12B,#2B6813); background-image: -o-linear-gradient(#4CA12B,#2B6813); border-bottom: 4px solid #438F26; border-right: 4px solid #438F26; color: #FFF; box-shadow: inset 2px 2px 19px rgba(4, 70, 2, 0.55); } .pollbox .case.active.dark{ background: #555; background-image: -webkit-linear-gradient(#8A8B8B,#5E5B5B); background-image: -moz-linear-gradient(#8A8B8B,#5E5B5B); background-image: -ms-linear-gradient(#8A8B8B,#5E5B5B); background-image: -o-linear-gradient(#8A8B8B,#5E5B5B); border-bottom: 4px solid #000; border-right: 4px solid #000; color: #FFF; box-shadow: inset 2px 2px 19px rgba(4, 70, 2, 0.55); } .pollbox input[type='submit']{ border: 1px solid #D3CCCC; padding: 12px 70px; border-radius: 5px; margin: 20px auto; margin-bottom: 5px; display: block; background: #E4DEDE; background-image: -webkit-linear-gradient(#E4DEDE,#F7F7F7); background-image: -moz-linear-gradient(#E4DEDE,#F7F7F7); background-image: -ms-linear-gradient(#E4DEDE,#F7F7F7); background-image: -o-linear-gradient(#E4DEDE,#F7F7F7); border-bottom: 5px solid #D1D4D6; border-right: 5px solid #D1D4D6; cursor: pointer; -webkit-transition:all 0.03s linear; -moz-transition:all 0.03s linear; transition:all 0.03s linear; } .pollbox input[type='submit']:active{ border-bottom-width: 2px; border-right-width: 2px; margin-bottom: 8px; } .pollbox input[type='submit']:focus{ outline: none; } .pollbox input[type='radio'],.pollbox input[type='checkbox']{ display: none; }
به هر کدام از بخشهای مربوطه رو استایل دادیم. مثلا خود div با کلاس pollbox و سرتیتر و هر کدام از گزینهها که به صورت انتخاب نشده استایل اونارو اعمال میکنیم. از خط 50 شروع به استایل برای زمانی که گزینه در حالت انتخاب قرار داره میکنیم. یه کلاس رنگ سبز برای نظر سنجی یک انتخابی و کلاس مشکی برای چند انتخابی. همونطور که میبینید هر دو دارای کلاس active در قبل از خود هستند. یعنی وقتی این کلاس با گزینه انتخاب شده باشه استایلش به استایل انتخاب شده تبدیل میشه وقتی هم نباشه همون استایل معمولی خط 32 رو میگیره. تا اینجا میتونیم بفهمیم که اگه با جاوا اسکریپت یا جی کو ئری بتونیم با کلیک رو گزینه کلاس active رو به اون اضافه و یا کم کنیم نمای گرافیک کار رو ساختیم و کاربر میتونه با کلیک روی گزینه اون رو انتخاب کنه (که در بخش جاوا اسکریپت بهشم میرسیم) و یا از انخاب خارج کنه(البته انتخابی در کا نیست چون فقط با استایل بازی کردیم یعتی تا اینجا فقط برا سرگرمی خوبه). باقی استایلها رو جاش نیست توضیح بدم.
نکته اصلی رو تو خط 99 میتونیم ببینیم جایی که دکمه چک باکس و دکمه رادیویی رو از چشم کاربر مخفی کردیم و به جاش یه گزینه گرافیکی به اون نشون دادیم.
تا اینجای کار فقط تونستیم گرافیک اولیه رو آماده کنیم. فعلا کلیک کردن روی گزینه فایده ای نداره. پس بهتره بریم سراغ جی کوئری:
$(function () { $("div.poll1>.case").click(function(){ $(this).parent().find("input:radio").attr("checked",false); $(this).siblings(".case").removeClass("active").end().addClass("active").children("input").attr("checked",true); }); $("div.poll2>.case").click(function(){ $(this).toggleClass("active"); var check = $(this).children().attr("checked"); if(check != "checked"){ $(this).children().attr("checked",true); }else{ $(this).children().attr("checked",false); } }); });
در مورد حالت یک انتخابی یعنی دکمه رادیویی : با کلیک روی هر یک از گزینهها (خط2) اول میره سراغ عنصر والد گزینه کلیک شده و تمام دکههای رادیویی رو پیدا میکنه و تیکش رو برمیداره. بعدش(خط4) اول تمام عناصر همتراز گزینه انتخاب شده(یعنی تمام div هایی که به عنوان گزینه در اختیار کاربر قرار دادیم) رو انتخاب میکنه کلاس active هر کدوم رو حذف میکنه. بعدش با متد end زنجره رو تموم میکنه یعنی الان دوباره داخل this که گزینه انتخاب شده س هستیم. حالا کلاس active رو اعمال میکنه و اینجاست که رنگ گزینه انتخابی به حالت اننتخابی در اومده. حالا نوبت فرزندیه که نوعش input هست و اون رو تیک میزنه.
در مورد چند انتخابی یعنی چک باکس : اول از همه میتونیم از متد toggleClass کلاس اکتیو رو روش بدون دردسر کنترل کنیم یعنی با هربار کلیک کلاس active حذف میشه و کلیک بعدی اضافه میشه که خودش یعنی انتخاب و خروج از انتخاب گزینه مورد نظر(خط7). تو خط 8 وضعیت حالت انتخابی گزینه کلیک شده رو بررسی میکنیم و داخل متغیر check قرار میدیم تا ببینم اگه گزینه تیک خورده تیکش رو برداریم و بالعکس. خط 9 تا 13 هم همین کارو بررسی کردیم و انجام دادیم.
با این کار میبینید که بعد کلیک روی هرگزینه ای کلاسش عوض میشه که استایل انتخابی رو اعمال میکنه و به کاربر نشون میده که این گزینه انتخاب شده و در پشت پرده به معنای واقعی هم گزینه رو انتخاب میکنه و میتونین به اسکریپت پی اچ وی ارسالش کنین. بازهم اشاره میکنم حالت دیگه هم وجود داره که تیک زدن گزینه روبرا وقتی که فرم رو ارسال میکنین موکول میکنه که به نظر من این روش راحت تره پس خودتون میتونین انجامش بدین. با استفاد از InspectElement مرورگر کروم میتونین با کلیک اضافه و کم شدن checked و همچنین کلاس active رو مشاهده کنید.
دوستان عزیز دوست داشتم با آموزش ویدیویی در خدمت شما باشم که متاسفانه نشد. امیدوارم مطلب به دردبخور باشه. در ضمن زیبایی کار شما به استایلهای زیبای شما بستگی داره
موفق باشید:.
برا اموزش مبتدی شون زمان زیاد می بره؟
باید مباحث دوره طراحی وب رو بررسی کنید. یادگیری دوره کلا از یک تا سه ماه زمانبر هست.