سه شنبه ۰۱ آبان ۱۴۰۳

Tuesday, October 22, 2024 GMT +3:30

کنترل و تغییر اندازه فونت صفحه با جاوا اسکریپت

javascript-font-resize

از جمله قابلیت های جاوا اسکریپت (JavaScript) در صفحات وب کنترل و تغییر مقادیر ویژگی های به کار رفته در کدنویسی HTML است که بعضا لزوم کاربرد این زبان در این زمینه ها کاملا محسوس به نظر می رسد، به طور مثال اگر بخواهیم به کاربران خود امکان تغییر رنگ پس زمینه سایت یا وبلاگمان را بدهیم یا به آن دسته از کاربرانی که ممکن است مشاهده فونت مطالب با اندازه معمول برایشان سخت باشد قابلیت تغییر اندازه فونت صفحه را بدهیم، بهترین گزینه انتخاب جاوا اسکریپت برای انجام این موارد است چرا که با متدهای ساده و چند خط کدنویسی در عین کم حجم بودن کلیت کار قابلیت سازگاری با مرورگرهای مختلف نیز به خوبی وجود دارد، با ذکر این مقدمه در این مطلب می خواهیم ببینیم چگونه می توانیم با این زبان اسکریپت نویسی قابلیتی ایجاد کنیم که به کمک آن کاربران بتوانند به راحتی مطالب را با اندازه مورد نظر خود مشاهده کنند.

کنترل و تغییر انداز فونت در تگ p و div با جاوا اسکریپت


ساده ترین راه برای کنترل و تغییر اندازه فونت مطالب و محتوای صفحه استفاده از متد style.fontSize است، بدین منظور در کد زیر سه تابع تعریف شده است که هر کدام به ترتیب اندازه فونت را افزایش، کاهش و یا آن را به حالت پیش فرض تبدیل می کنند، در این توابع از تگ p (پاراگراف) به عنوان تگ مقصد استفاده شده (مطابق با نیاز خود می توانیم p را با مقادیر دیگر مانند div یا آی دی خاصی جایگزین کنیم)، برای استفاده از این کد ابتدا اسکریپت زیر را بین تگ head کپی می کنیم:
<script>
var minsize = 8;
var maxsize = 18;
function increaseFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != maxsize){
            s += 1;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}

function decreaseFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != minsize){
            s -= 1;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}

function defultFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != 12){
            s = 12;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}
</script>
سپس در هر قسمت از محتوای خود که تمایل داشتیم توابع کنترل و تغییر اندازه فونت را با درج لینک های زیر فراخوانی می کنیم:
<a href="javascript:decreaseFontSize();">کاهش اندازه فونت</a>
<a href="javascript:increaseFontSize();">افزایش اندازه فونت</a>
<a href="javascript:defultFontSize();">اندازه فونت پیش فرض</a>
برای دیدن پیش نمایش آنلاین و بررسی توابع لطفا به انتهای همین مطلب مراجعه کنید.
توضیح:
- کد بالا در تابع increaseFontSize با عنصر document.getElementsByTagName مقدار فعلی اندازه تگ های p صفحه را (به پیکسل) دریافت کرده و در حلقه for مقادیر را یک واحد افزایش می دهد.
- همین فرآیند در تابع decreaseFontSize نیز انجام می شود با این تفاوت که مقدار در این تابع در حلقه for یک واحد کاهش می یابد.
- در تابع defultFontSize اندازه فونت پیش فرض به صورت 12 پیکسل تنظیم می شود که این مقدار با توجه به اندازه فونت پیش فرض صفحه می تواند بیشتر از 8 یا کمتر از 18 پیکسل باشد.
- همان طور که مشخص است این روش با پیکسل تنظیم شده است و مقادیر دیگر مانند em را تغییر نمی دهد (برای تغییر این موارد باید کل قسمت های مربوط به px را با em و به درستی جایگزین کنیم).

کنترل و تغییر انداز فونت در تگ body با جاوا اسکریپت


با روش بالا تغییر اندازه فونت به صورت پیکسل و بر روی پاراگراف یا بلاک هایی مانند div قابل اعمال است، اما با کد زیر می توانیم کنترل و تغییر اندازه فونت صفحه را بر روی تمام عناصر موجود در تگ body انجام دهیم، بدین منظور ابتدا کد جاوا اسکریپتی زیر را در قسمت head صفحه درج می کنیم:
<script>
function resizeText(value){
    var body_font_size = document.body.style.fontSize;
    
    if(body_font_size == ''){
        body_font_size = '0.75em';
    }
    
    if(value == 0){
        document.body.style.fontSize = '0.75em';
    } else{
        document.body.style.fontSize = parseFloat(body_font_size) + (value * 0.2) + 'em';
    }
}
</script>
سپس تابع را به صورت لینک متنی یا در نظر گرفتن دکمه (Button) و رویداد onclick فراخوانی می کنیم:
<a href="javascript:resizeText(-1);">کاهش اندازه فونت</a>
<a href="javascript:resizeText(1);">افزایش اندازه فونت</a>
<a href="javascript:resizeText(0);">اندازه فونت پیش فرض</a>
<br><br>
<button type="button" onclick="resizeText(-1);">کاهش اندازه فونت</button>
<button type="button" onclick="resizeText(1);">افزایش اندازه فونت</button>
<button type="button" onclick="resizeText(0);">اندازه فونت پیش فرض</button>
برای دیدن پیش نمایش آنلاین و بررسی تابع لطفا به انتهای همین مطلب مراجعه کنید.
توضیح:
- در این کد از متد body.style.fontSize استفاده کرده ایم تا مقادیر اندازه فونت را به تگ body در صفحه وب نسبت دهیم.
- این کد بر اساس مقداردهی em اندازه فونت را تغییر می دهد و مقادیر پیش فرض به صورت 0.75em در نظر گرفته شده است که در واقع همان 12 پیکسل است (با توجه به اینکه مقدار em وابسته به بلاک والد است در اغلب موارد هر em برابر با 16 پیکسل است و 12 تقسیم بر 16 می شود 0.75em، در اینجا عدد 16 اندازه پیش فرض فونت در مرورگرها است که ممکن است در همه موارد به یک صورت نباشد).
- ساختار تابع روشن و ساده است، در قسمت دستور شرطی if اول، اندازه فونت پیش فرض با متد document.body.style.fontSize برابر با 0.75em تعیین می شود و در دستور شرطی if دوم، مقادیر برای گزینه پیش فرض (زمانی که آرگیومنت value به صورت 0 مقداردهی می شود) در نظر گرفته شده و نهایتا در قسمت else آخر، به صورت داینامیک مقدار فونت با هر کلیک کاربر کاهش یا افزایش می یابد.

کنترل و تغییر اندازه هوشمند فونت با جاوا اسکریپت


اگرچه روش هایی که در این آموزش گفتیم کاملا مناسب و کاربردی هستند اما می توانیم از جاوا اسکریپت به صورت هوشمندانه تری نیز استفاده کنیم، به طور مثال در شیوه معمول اگر کاربر فونت مطالب را متناسب با سلیقه خود تنظیم کرده و از صفحه ای به صفحه ی دیگر پیمایش کند تنظیمات اعمال شده به حالت پیش فرض برگردند و ناچار است مجددا فونت را به اندازه مطلوب خود تغییر دهد، برای رفع این مشکل راه حل متداول و کاربردی استفاده از کوکی (Cookie) و ذخیره تنظیمات در مرورگر است تا سفارشی سازی قبلی کاربر در حافظه سیستم نگهداری شود، بدین منظور ابتدا کد زیر را در قسمت head صفحه (بعد از استایل های CSS) کپی می کنیم:
<script>
function setFontSizeCookie(name, value, days){
    if(days){
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 *1000));
        var expires = '; expires=' + date.toGMTString();
    } else{
        var expires = '';
    }
    
    document.cookie = name + '=' + value+expires + '; path=/';
}

function getFontSizeCookie(name){
    var name_eq = name + '=';
    var ca = document.cookie.split(';');
    
    for(var i=0; i < ca.length; i++){
        var c = ca[i];
        
        while(c.charAt(0) == ' '){
            c = c.substring(1, c.length);
        }
        
        if(c.indexOf(name_eq) == 0){
            return c.substring(name_eq.length, c.length);
        }
    }
    
    return null;
}

if(getFontSizeCookie("page_font_size") != null){
    document.write('<style>');
    document.write('body{');
    document.write('font-size:' + getFontSizeCookie("page_font_size") + 'em');
    document.write('}');
    document.write('</style>')
} else{
    document.write('<style>');
    document.write('body{');
    document.write('font-size: 0.75em');
    document.write('}');
    document.write('</style>')
}
</script>
سپس برای فراخوانی توابع و تنظیم کوکی می توانیم از نمونه لینک های زیر استفاده کنیم:
<a href="#" onclick="javascript:body.style.fontSize='0.65em'; setFontSizeCookie('page_font_size', '0.5', 30);">اندازه فونت کوچک</a>
<a href="#" onclick="javascript:body.style.fontSize='1em'; setFontSizeCookie('page_font_size', '1', 30);">اندازه فونت بزرگ</a>
<a href="#" onclick="javascript:body.style.fontSize='0.75em'; setFontSizeCookie('page_font_size', '0.75', 30);">اندازه فونت حالت پیش فرض</a>
توضیح:
- این کد نیز فونت کل صفحه را با استفاده از تگ body تغییر می دهد و از معیار em در آن استفاده شده است.
- در حالت پیش فرض تا 30 روز تنظیمات کاربران در حافظه مرورگر آنها به صورت کوکی نگهداری می شود و اگر کاربر صفحه را رفرش کند یا پس از چند روز مجددا به سایت یا وبلاگمان مراجعه نماید آخرین اندازه انتخابی از طریق کوکی دریافت شده و فونت به همان صورت نمایش داده می شود.
- مقادیر در نظر گرفته شده برای اندازه فونت در حالت های فونت کوچک، پیش فرض و بزرگ دلخواه است و اگر با کدنویسی جاوا اسکریپت آشنا باشیم به راحتی قابل سفارشی سازی است.
- دقت کنیم رویداد استفاده شده در اسکریپت های بالا onclick (پس از کلیک کاربر) است که می توانیم از رویدادهای دیگر جاوا اسکریپت (به فرض onload) نیز در موارد خاص و مورد نیاز استفاده کنیم.

پیش نمایش آنلاین کدهای تغییر دهنده اندازه فونت صفحه


تمام کدها و روش های گفته شده را به صورت یک مجموعه جهت تست در نمونه صفحه زیر قرار داده ایم که می توانیم با استفاده از لینک درج شده در انتهای آموزش پیش نمایش آنلاین را مشاهده و بررسی کنیم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | تغییر اندازه فونت با جاوا اسکریپت</title>
<!-- Webgoo.ir -->
<style type="text/css">
body{
    font-family: Tahoma, Geneva, sans-serif;
    direction: rtl;
}
</style>
<script>
var minsize = 8;
var maxsize = 18;
function increaseFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != maxsize){
            s += 1;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}

function decreaseFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != minsize){
            s -= 1;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}

function defultFontSize(){
    var p = document.getElementsByTagName('p');
    
    for(i = 0; i < p.length; i++){
        if(p[i].style.fontSize){
            var s = parseInt(p[i].style.fontSize.replace('px', ''));
        } else{
            var s = 12;
        }
        
        if(s != 12){
            s = 12;
        }
        
        p[i].style.fontSize = s + 'px';
    }
}
</script>
<script>
function resizeText(value){
    var body_font_size = document.body.style.fontSize;
    
    if(body_font_size == ''){
        body_font_size = '0.75em';
    }
    
    if(value == 0){
        document.body.style.fontSize = '0.75em';
    } else{
        document.body.style.fontSize = parseFloat(body_font_size) + (value * 0.2) + 'em';
    }
}
</script>
<script>
function setFontSizeCookie(name, value, days){
    if(days){
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 *1000));
        var expires = '; expires=' + date.toGMTString();
    } else{
        var expires = '';
    }
    
    document.cookie = name + '=' + value+expires + '; path=/';
}

function getFontSizeCookie(name){
    var name_eq = name + '=';
    var ca = document.cookie.split(';');
    
    for(var i=0; i < ca.length; i++){
        var c = ca[i];
        
        while(c.charAt(0) == ' '){
            c = c.substring(1, c.length);
        }
        
        if(c.indexOf(name_eq) == 0){
            return c.substring(name_eq.length, c.length);
        }
    }
    
    return null;
}

if(getFontSizeCookie("page_font_size") != null){
    document.write('<style>');
    document.write('body{');
    document.write('font-size:' + getFontSizeCookie("page_font_size") + 'em');
    document.write('}');
    document.write('</style>')
} else{
    document.write('<style>');
    document.write('body{');
    document.write('font-size: 0.75em');
    document.write('}');
    document.write('</style>')
}
</script>
</head>
<body>
تغییر اندازه فونت - روش اول:<br>
<a href="javascript:decreaseFontSize();">کاهش اندازه فونت</a> |
<a href="javascript:increaseFontSize();">افزایش اندازه فونت</a> |
<a href="javascript:defultFontSize();">اندازه فونت پیش فرض</a>
<hr>
تغییر اندازه فونت - روش دوم:<br>
<a href="javascript:resizeText(-1);">کاهش اندازه فونت</a> |
<a href="javascript:resizeText(1);">افزایش اندازه فونت</a> |
<a href="javascript:resizeText(0);">اندازه فونت پیش فرض</a>
<br><br>
<button type="button" onclick="resizeText(-1);">کاهش اندازه فونت</button>
<button type="button" onclick="resizeText(1);">افزایش اندازه فونت</button>
<button type="button" onclick="resizeText(0);">اندازه فونت پیش فرض</button>
<hr>
تغییر اندازه فونت - روش سوم:<br>
<a href="#" onclick="javascript:body.style.fontSize='0.65em'; setFontSizeCookie('page_font_size', '0.5', 30);">اندازه فونت کوچک</a> |
<a href="#" onclick="javascript:body.style.fontSize='1em'; setFontSizeCookie('page_font_size', '1', 30);">اندازه فونت بزرگ</a> |
<a href="#" onclick="javascript:body.style.fontSize='0.75em'; setFontSizeCookie('page_font_size', '0.75', 30);">اندازه فونت حالت پیش فرض</a>
<hr>
<p>نمونه متن در تگ p</p>
<hr>
برای بررسی تغییراتی که هر کدام از روش های بالا در خروجی HTML صفحه ایجاد می کنند می توانیم از امکان Developer Tools در مرورگرها استفاده کنیم، به طور مثال با زدن دکمه F12 در مرورگر فایرفاکس این امکان در دسترس است.
</body>
</html>
پیش نمایش آنلاین
دسته بندی: آموزش کاربردی » JavaScript
related مطالب بیشتر:
نمایش کادر پیام شناور در سایت و وبلاگ با جاوا اسکریپت
نمایش پیام در حال بارگذاری با جاوا اسکریپت (JavaScript)
ایجاد پنل جمع شونده با جاوا اسکریپت و فریم ورک Spry
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
استفاده ترکیبی از جاوا اسکریپت (JavaScript) و PHP
دیدگاه
more ۱۰ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
S
۱۹:۴۷ ۱۳۹۱/۱۲/۲۱
بابا ایول.....ممنونممممممممم
۱۳:۴۴ ۱۳۹۲/۰۵/۲۲
خوب بود
elham
۱۲:۳۶ ۱۳۹۲/۱۱/۰۴
سلام
واقعاً دوست دارم
ایشاالله خدا بهت عمر طولانی بده دادا
منو که از دست استاد پایان نامه خلاص کردی !!!!!!!
فقط با مطالب شما پیش رفتم
واقعاً دعات میکنم
حسین
۱۴:۳۹ ۱۳۹۲/۱۲/۲۵
دمت گرم خیلی خوب توضیح دادین
ادامه بدین
موفق باشین
حسین
۲۱:۳۸ ۱۳۹۲/۱۲/۲۵
وقتی میذارم تو ابتدای قالب وبلاگم در میهن بلاگ فقط همون قسمت rss و یا عنوان رو بزرگ میکنه.
کد اول هم که میزارم همه چیز رو درشت میکنه الا متن اصلی رو.
چی کار کنم؟
کد اول به صورت پیش فرض فونت تگ های p را تغییر می دهد، می توانید به جای تگ p از div استفاده کنید:
 var p = document.getElementsByTagName('div');
نکته: تگ های موجود در صفحه نباید کلاس و استایل CSS اختصاصی داشته باشند، در این صورت کار کمی مشکل و توضیح آن سخت می شود!
حسین
۱۱:۴۰ ۱۳۹۲/۱۲/۲۹
ایا میشه که برای هر استایلی که در قالب وجود داره یک جاوا اسکرایپت مجزا گذاشت. مثلا کد بالا رو بزاریم تو استایل قسمت نظرت یا متن اصلی و........
برای این کار باید با برنامه نویسی وب آشنا باشید، اگر در وبلاگ این کار را می خواهید انجام دهید، باید از id مخصوص بلاک مربوطه استفاده کنید، به فرض بخش نظرات در بلاک div مخصوصی خروجی داده می شود، کد جاوا اسکریپتتان باید از id آن بلاک استفاده کند، اگر هم با PHP کار می کنید، اعمال این موارد ساده است، کافی است متناسب با هر صفحه، خروجی خاص آن را چاپ کنید.
مونا
۱۹:۱۳ ۱۳۹۳/۰۳/۱۱
سلام خسته نباشید ....
من میخوام یک فرم ثبت نام درست کنم .. امکانش هست آموزش فرم با جاوا اسکریپت هم توضیح دهید
با تشکر فراوان
برای ایجاد فرم ثبت نام باید با PHP آشنا باشید، جاوا اسکریپت صرفا می تواند در اعتبار سنجی سمت کاربر کاربرد داشته باشد.
مترسک
۱۲:۵۲ ۱۳۹۳/۰۶/۱۷
سلام ممنون بابت توضیح تون من یک سوال دارم
چطوري كاري كنم كه وقتي موس رو بردم روي يه لينك، لينك رنگش عوض بشه مثلا رنگ لينك سياه باشه ولي با رفتن موس روي لينك رنگش قرمز یا سفید بشه؟
از قالب وطن اسکین هم استفاده میکنم.
باید با CSS و نحوه استفاده از سلکتور a و a:hover آشنا باشید، لطفا در این رابطه در وب جستجو کنید.
مهدی
۱۱:۲۸ ۱۳۹۴/۰۵/۱۵
با سلام و خسته نباشید
واقعا مطالب خوبیه
فقط یه سوال!
همون طور که در نظرات هم گفته بودید اگه از css استفاده شده باشه یه کم کدنویسیش سخته!
اگه ممکنه یه توضیح برای این هم بدین و همینطور برای px ها به جای em
با سپاس
در آموزش سعی شده هم از روش px و هم em استفاده شود که در واقع فرق خاصی به لحاظ خروجی نهایی ندارند و تنها متدها متفاوت است، به عبارتی در صورت آشنایی با جاوا اسکریپت، به راحتی می توان حالت اول (که از px استفاده شده) را برای حالت دوم نیز تنظیم کرد و بر عکس (البته قاعدتا باید با مفهوم دستورات و نحوه کدنویسی آشنا باشید)، در مورد بخش دوم سوال، می توانید یک ID به عنصر مورد نظر نسبت دهید و با الگوبرداری از نمونه کد زیر، توابع آموزش داده شده را متناسب با نیاز خود تغییر دهید:
<span id="span">Your Span Tag</span>
<script>
var span = document.getElementById("span");
span.style.fontSize = "25px";
</script>
۱۳:۵۹ ۱۳۹۵/۰۸/۰۹
سلام میشه بگید چطوری پوشه فونت اسکریپتو تبدیل به فونت فارسی کنم
فرمت های موجود فونت در پوشه اینا هستن
svg
eot
woff
ttf
woff2
لطفا عبارت "نحوه استفاده از فونت فارسی در وب با CSS" را جستجو نمائید، پس از آشنایی با این مسئله باید فونت های خود را با همان نام، جایگزین فونت های موجود کنید (البته معمولا امکان تغییر نام نیز وجود خواهد داشت، منتها باید کل اسکریپت جستجو و عبارت فونت قبلی با مقدار جدید جایگزین شود).
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
6 × 4
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با تشکر از شما استاد خیلی خوب بود من میخوام فقط آخرین لینک رو بصورت خروجی داشته باشم که شامل post باشه یعنی فقط این...
۱۴۰۳/۰۷/۲۸

سیدعباسی
برای کدی که فرستادم من از این الگو استفاده می کنم میخواهم از لینکهایی شروع کنه که شامل عدد باشن و آدرس سایت به...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام و خسته نباشید من میخوام از سایت مپ زیر لینک اول که شامل post است رو استخراج کنم یعنی خروجی من این نباشه...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...
۱۴۰۳/۰۷/۰۷

مجتبی
سلام وقت بخیر میخوام یک روز به تاریخ دریافتی اضافه شه ممنون میشم راهنمایی کنید
۱۴۰۳/۰۶/۲۰

پرتو
سلام خوبید؟ خسته نباشیذ ببخشید مزاحم شدم می خواستم بگم من به شما ایمیل زدم ولی هنوز شما جواب ندادین می تونم بپرسم چرا سوال...
۱۴۰۳/۰۶/۱۵
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.