آموزش ساخت ToolTip

Milad

Well-Known Member
بعد از مدتها امروز فرصت کردم یه آموزش کوچیک تهیه کنم ؛ امیدوارم مفید باشه .

قصد داریم توی چند مرحله برای فرم هامون یک Tool tip تهیه کنیم که با کمی تغییرات میتونید به هر شکل که تمایل دارید تغییرش بید توی این تایپیک میبینید که چقدر ساده با دستورات معمولی jquery و css میشه کارای جالبی کرد .

دمو این ToolTip رو میتونید اینجا مشاهده کنید .


preview.png


مرحله اول )

دقت کنید که ما برای ساخت این ToolTip از jquery استفاده میکنیم در نتیجه با رفتن به jquery.com آخرین نسخه این فریم ورک رو دانلود کنید و توی پوشه پروژتون قرار بدید

( این فایل در فایل های پروژه نهایی که اتچ کردم قرار داره )

در اولین مرحله باید فرم خودمون رو طراحی کنیم :

کد:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml">
<head>
<title>Milad Roxeta Tool Tip</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="jquery-1.5.min.js"></script>
</head>
<body>
<div id="form">
    <form>
        <input class="form_items" type="text" title="نام" />
        <input class="form_items" type="text" title="ایمیل" />
        <input class="form_items" type="text" title="فیلد" />
        <input style="width:190px" class="form_items" type="text" title="فیلدی دیگر" />
        <textarea  class="form_items" title="متن" /></textarea>
    
        <input type="button" value="send" />
        
        <div id="description"></div>
    </form>
    
</div>
</body>
</html>
- در خط 7 فریم ورک jquery رو به فایل html خودمون ضمیمه کردیم .
- در خط 10 یک div زدیم و فرم خودمون رو در اون درج کردیم برای استایل دهی به این div ای دی Form رو دادیم .
- در خط 12 تا 18 عناصر فرممون رو درج کردیم و بهشون کلاس form-items رو دادیم تا بعدا در js اگر کاربر خواست توشون مطلبی بنویسه ما متوجه بشیم و tooltip رو نمایش بدیم همینطور در شاخص title براشون متنی درج کردیم که بعدا به عنوان tooltip نمایششون میدیم .
- در خط 20 یک div زدیم با ایدی description که از این div برای نمایش متن tooltip استفاده خواهیم کرد .

مرحله دوم )

حالا باید با استفاده از Css یکمی به فرممون سر و سامون بدیم و امکان جا به جایی رو برای description div فراهم کنیم .

کد:
<style type="text/css">
body{background-color:#636262;}

#form{
position:relative;
width:275px;
height:273px;
text-align:center;
margin:50px auto;
}

input,textarea{
display:block;
margin-top:5px;
border:1px solid #FFF;
background:#cfcfcf url(input.png) repeat-x;
}

#description{
position:absolute;
display:none;
top:0px;
left:0px;
width:110px;
height:45px;
color:#FFF;
margin:0px;
padding-top:10px;
text-indent:50px;
font:12px tahoma;
background-image:url(tooltip.png);
}
</style>
در این قسمت به عناصر صفحمون استایل مورد نظرمون رو دادیم ، توجه کنید برای اینکه div ما بتونه حرکت کنه ( موقعیتش قابل تعیین و تغییر باشه ) باید دارای absolute position باشه ، همینطور برای اینکه از ابتدا مشخص نباشه باید مخفیش کنیم .

کد:
display:none;
مرحله سوم )

خوب رسیدیم به قدم نهایی ! در این قسمت باید کد jquery رو برای کنترل tooltip بنویسیم .

کد:
$(document).ready(function(){
    $('.form_items').focus(function(){
        
        var position = $(this).position();
        
        var description = $(this).attr('title');
        var field_width = $(this).css('width');
        field_width = /\d+(?:\.\d+)?/.exec(field_width);
        field_width -= 30;
        
        $('#description').text(description);
        
        $('#description').animate({top : position.top - 38,left : field_width },'fast');
            
        $('#description').toggle();
    });
    
    $('.form_items').blur(function(){
        $('#description').toggle();
    });
    
});
با گرفتن فکوس توسط هر کدوم از عناصر فرم ما که کلاس form-items دارند کد بالا اجرا میشه !

در خط سوم موقعیت عنصری که فکوس گرفته رو توی متغیر position میریزیم ( فاصله اون از طرفین ) .
در خط چهارم محتوای شاخص title هر عنصر فرممون رو در متغیر description میریزیم که همون tooltip ما هست .
در خط پنجم اندازه فیلدی که فکوس گرفته رو در متغیر field_width ذخیره میکنیم تا tooltip خودمون رو نسبت به اون نمایش بدیم . ( نسبت به سمت چپ )
در خط ششم مقداری که توی متغیر field_width ریختیم رو قسمت عددیش رو نگه میداریم ، چون این مقدار یک رشته هست ، در واقع یک px کنارش داره ! حالا چرا عدد کردیمش ؟ چون میخوایم مقداری از این عدد کم کنیم تا بعد از موقعیت دادن به tooltip ، روی عنصر نمایش داده بشه .
در خط هفتم هم که مقدار مورد نظرمون رو از field_width کم کردیم
در خط هشتم مقداری که در متغیر description قرار دادیم ( همون متن tool tip ) رو در div ای که برای Tool tip در نظر گرفتیم قرار میدم .
در خط نهم با استفاده از animate موقعیت description div رو با موقعیت عنصر مورد نظر که فکوس گرفته ، توسط اطلاعاتی که پیشتر به دست آوردیم تنظیم میکنیم .
و در خط بعدی tooltip div خودمون رو از حالت مخفی در میاریم تا دیده بشه ...

در قسمت بعدی کد ، یعنی اینجا :

کد:
    $('.form_items').blur(function(){
        $('#description').toggle();
    });
از رویداد blur استفاده کردیم ، تا در زمانی که عناصر مورد نظر ما فکوس رو از دست دادند tooltip مخفی بشه .

کد کامل به این صورت میشه :

کد:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml">
<head>
<title>Milad Roxeta Tool Tip</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
body{background-color:#636262;}

#form{
position:relative;
width:200px;
margin:50px auto;
}

input,textarea{
display:block;
margin-top:5px;
border:1px solid #FFF;
background:#cfcfcf url(input.png) repeat-x;
}

#description{
position:absolute;
display:none;
top:0px;
left:0px;
width:110px;
height:45px;
color:#FFF;
margin:0px;
padding-top:10px;
text-indent:50px;
font:12px tahoma;
text-align:center;
background-image:url(tooltip.png);
}
</style>

<script type="text/javascript" src="jquery-1.5.min.js"></script>
<script>

$(document).ready(function(){
    $('.form_items').focus(function(){
        
        var position = $(this).position();
        
        var description = $(this).attr('title');
        var field_width = $(this).css('width');
        field_width = /\d+(?:\.\d+)?/.exec(field_width);
        field_width -= 30;
        
        $('#description').text(description);
        
        $('#description').animate({top : position.top - 38,left : field_width },'fast');
            
        $('#description').toggle();
    });
    
    $('.form_items').blur(function(){
        $('#description').toggle();
    });
    
});
</script>
</head>
<body>
<div id="form">
    <form>
        <input class="form_items" type="text" title="نام" />
        <input class="form_items" type="text" title="ایمیل" />
        <input class="form_items" type="text" title="فیلد" />
        <input style="width:190px" class="form_items" type="text" title="فیلدی دیگر" />
        <textarea  class="form_items" title="متن" /></textarea>
    
        <input type="button" value="send" />
        
        <div id="description"></div>
    </form>
    
</div>
</body>
</html>
فایل های آموزش رو به صورت آماده دانلود و استفاده کنید . ( اتچ شدند ) .

خیلی ممنون که باهام همراه بودید ، اگر مشکلی میبینید خوشحال میشم بیان کنید تا رفع بشه ، روشی که استفاده کردیم فقط یک نمونه بود که به ذهن من رسید ، قطعا روش های بهتری هم وجود داره و با کمی خلاقیت میشه به روش های مختلف این کار رو انجام داد .

موفق باشید ، میلاد ..

:rose:

منبع آموزش : روتیکس
Regards , Roxeta
 

پیوست ها

  • Milad-Roxeta-ToolTip.zip
    35.7 کیلوبایت · بازدیدها: 75
آخرین ویرایش:

farik

Well-Known Member
سلام میلاد جان..
آموزش جالبی بود..من رو برد به 2 سال پیش که با جاوا یک تول تیپ ساده نوشتم که فقط یادمه برای بدست آوردن موقعیت موس تو مرورگرهای مختلف چقدر پدرم در اومد...تازه نتیجه کار هم به این قشنگی نشد...خوساتین بزارم تا دوستان یک مقایسه ای بکنن و قدر جی کوئری رو بدونن...:wink:
موفق باشید...
 

eAmin

Well-Known Member
سلام
ممنون میلاد جان، چنین آموزشهایی باعث میشه سطح این قسمت از انجمن بیاد بالاتر و اینکار شما قابل تحسینه.
من رو برد به 2 سال پیش که با جاوا یک تول تیپ ساده نوشتم که فقط یادمه برای بدست آوردن موقعیت موس تو مرورگرهای مختلف چقدر پدرم در اومد...تازه نتیجه کار هم به این قشنگی نشد...خوساتین بزارم تا دوستان یک مقایسه ای بکنن و قدر جی کوئری رو بدونن...
البته اون شیرینی خاص خودش رو داره:wink:
در مورد فریم ورکها باید بگم که در حال حاضر بیشتر فریم ورکهای بزرگ مثل MooTools , PrototypeJS, Dojo, YUI و Web Application هایی مثل ExtJS هم بسیار قدرتمند هستن، منتها چون کتابخانه jQuery کاربرانی که اطلاعات کافی از JavaScript ندارن و سادگی و کد نویسی کمتر رو نشونه گرفته موفق تر بوده. در واقعیت هم همینطوره متاسفانه افراد زیادی از طراحان وب سعی نمی کنن برن دنبال یادگیری اصولی اون زبان وقتی که می تونن همون چیزی رو که با 100-150 خط کد نوشتن رو با 10-20 خط کد ساده ی jQuery پیاده سازی کنن و از همه مهمتر نگران این هم نیستن که کدشون در تمامی مرورگرها بدرستی کار میکنه یا خیر.

ولی خودم شخصا MooTools و Dojo Toolkit رو بیشتر میپسندم. زیبایی کدی که با MooTools نوشته میشه اصلا قابل مقایسه و با jQuery نیست! و Dojo قدرتمند به معنای واقعی کلمه هست، میشه گفت تقریبا هرچیزی رو که بخواید داره و حتی چیزهایی که فکرش رو هم نمیکنید از قبل در اون پیاده شده و به تنهایی میتونه نیاز شما رو برطرف کنه.

شرمنده، تاپیک کلا از بحث اصلی منحرف شد!
 

جدیدترین ارسال ها

بالا