نمایش پیام در حال بارگذاری با جاوا اسکریپت (JavaScript)

برای هدف های زیادی می توانیم از جاوا اسکریپت (JavaScript) در وب استفاده کنیم، قابلیت های متنوع و قدرت این زبان اسکریپت نویسی و مهمتر از همه ویژگی سمت کاربر (Client-side) بودن آن این امکان را به برنامه نویس می دهد تا در موقعیت های متفاوت بر فعل و انفعالات رابط کاربری صفحه کنترل داشته و عملکرد و پردازش های مرورگر را مدیریت کند، یکی از این موقعیت ها زمانی است که صفحه سایت یا وبلاگ در حال بارگذاری (Loading) است، بدین منظور در جاوا اسکریپت متدی به نام document.readyState و رویداد document.onreadystatechange وجود دارد که دقیقا با همین هدف یعنی شناسایی زمانی که صفحه وب کاملا بارگذاری می شود تعریف شده اند، به این صورت می توانیم مرحله قبل و بعد از بارگذاری صفحه را از هم تفکیک و به فرض پیامی مبنی بر شکیبایی تا بارگذاری کامل محتوا نمایش دهیم، ایجاد چنین قابلیتی به خصوص برای صفحاتی که دیتای حجیمی دارند می تواند به ارتقای رابط کاربری و عدم بستن صفحه توسط کاربر به دلیل طولانی شدن فرآیند Loading کمک کند، از این رو در مطلب پیش رو می خواهیم با استفاده از متد document.readyState با نحوه نمایش پیام و تصویر "در حال بارگذاری... لطفا چند لحظه صبر کنید!" آشنا شویم.
ایجاد تگ HTML نمایش پیام و تصویر در حال بارگذاری (Loading)
قبل از هر چیز برای نمایش پیام و تصویر در حال بارگذاری یا Loading باید در سورس HTML صفحه تگی با ID مشخص جهت نمایش پیام و انیمیشن یا تصویر تعریف کنیم، این تگ ترجیحا می تواند به صورت تگ div باشد برای نمونه کد زیر را پس از تگ body درج می کنیم، این قسمت در واقع همان بلاکی است که پیام و انیمیشن یا تصویر "صفحه در حال بارگذاری است... لطفا شکیبا باشید!" یا هر متن دلخواه دیگری را نمایش می دهد.
<div id="loading-main">
<div id="loading-animation"></div>
در حال بارگذاری... <br> لطفا چند لحظه صبر کنید!
</div>
در این نمونه کد از پیام متنی و انیمیشن مبتنی بر دستورات CSS برای ایجاد تصویر متحرک کمک گرفته ایم که در ادامه به آن خواهیم پرداخت، نکته مهم در این نمونه کد در نظر گرفتن آی دی یکتا برای تگ های div است که به صورت عبارات loading-main و loading-animation تنظیم شده است، از این آی دی ها برای استایل دهی و شناسایی تگ توسط دستورات جاوا اسکریپتی که در ادامه خواهیم دید استفاده کرده ایم.
سفارشی سازی ظاهری و شناور کردن بلاک با استایل CSS
برای سفارشی سازی ظاهری و شناور کردن بلاک نمایش پیام و انیمیشن یا تصویر در حال بارگذاری (Loading) در بالاترین قسمت صفحه (ترجیحا مابین تگ های head) استایل CSS زیر را به سورس کدها اضافه می کنیم، این استایل به صورت شناور (position: absolute) است و از تکنیک keyframes و transform: rotate برای ایجاد حالت انیمیشن "دایره گردان" استفاده شده است.
<style>
#loading-main {
display: block;
position: absolute;
font-family: Tahoma, Geneva, sans-serif;
font-size: 12px;
color: #f0c;
text-align: center;
direction: rtl;
width: 300px;
height: 200px;
line-height: 22px;
top: 25%;
bottom: 0;
left: 0;
right: 0;
margin:0 auto;
}
#loading-animation {
border: 12px solid #f5f5f5;
border-top: 12px solid #999;
border-radius: 50%;
width: 50px;
height: 50px;
margin: 0 auto;
animation: spin 1s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
</style>
دقت کنیم که فقط یک تگ در خروجی HTML سایت ما باید آی دی loading-main داشته باشد به عبارتی دیگر مقدار آی دی در صفحات وب یکتا است و نباید بین تگ های مختلف مشترک باشد، وجود آی دی همسان برای دو تگ مختلف باعث ایجاد مشکل در شناسایی عناصر صفحه خواهد شد.کنترل نمایش و مخفی سازی بلاک با JavaScript
در حالت عادی و قبل از بارگذاری کامل محتوای صفحه وب بلاک loading-main به صورت مرئی و قابل روئیت است اما زمانی که فرآیند بارگذاری کامل می شود این بلاک باید مخفی شده و نمایش داده نشود، برای کنترل نمایش یا عدم نمایش بلاک و همچنین محتوای تگ body اسکریپت زیر را در کد قالب پس از تگ body و پس از بلاک loading-main درج می کنیم، این اسکریپت در واقع تابعی مبتنی بر متدهای document.readyState، document.querySelector، display و visibility است که با تغییر وضعیت بارگذاری صفحه در رویداد document.onreadystatechange قسمت های شرطی آن اجرا می شود.
<script>
document.onreadystatechange = function() {
if(document.readyState !== "complete") {
document.querySelector("body").style.visibility = "hidden";
document.querySelector("#loading-main").style.visibility = "visible";
} else {
document.querySelector("#loading-main").style.display = "none";
document.querySelector("body").style.visibility = "visible";
}
};
</script>
رویداد document.onreadystatechange با هر تغییر وضعیت بارگذاری صفحه فراخوانی می شود و با بررسی مقدار متناظر متد document.readyState (شامل موارد loading, interactive, complete) می توانیم در صورتی که پاسخ complete بود (یا نبود) تصمیم بگیریم که کدام عنصر را به حالت مرئی و کدام مورد را مخفی کنیم.کد کامل پیام و تصویر "صفحه در حال بارگذاری..." و پیش نمایش آنلاین
همان طور که دیدیم برای ایجاد پیام "صفحه در حال بارگذاری است... لطفا کمی صبر کنید." به کمک جاوا اسکریپت کافی است از نمونه کدهای بالا به ترتیبی که گفتیم در قالب سایت یا وبلاگ خود استفاده کنیم، به این صورت پیش از اینکه صفحه به طور کامل در مرورگر بارگذاری شود پیامی به کاربر نشان داده می شود که بعد از تکمیل بارگذاری محو خواهد شد، در هر صورت برای جمع بندی توضیحات و تجمیع کدها در یک صفحه می توانیم نمونه کد زیر را بررسی و پیش نمایش آنلاین آن را امتحان کنیم ( با توجه به کش شدن تصویر در مرورگر احتمالا در حالت سرور-آنلاین فقط برای بار اول پیام بارگذاری را خواهیم دید اما برای بررسی بیشتر می توانیم کد را در صفحه ای بر روی دستکتاپ ذخیره کرده و با دستورالعملی که در انتها گفته ایم، فرآیند تست را بدون محدودیت به صورت لوکال-آنلاین انجام دهیم).
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | نمایش پیام صفحه در حال بارگذاری</title>
<!-- Webgoo.ir -->
<style>
#webgoo-logo {
display: block;
position: absolute;
background-color: #0E5076;
width: 20%;
height: 20%;
top: 25%;
bottom: 0;
left: 0;
right: 0;
margin:0 auto;
padding: 8px;
}
#loading-main {
display: block;
position: absolute;
font-family: Tahoma, Geneva, sans-serif;
font-size: 12px;
color: #f0c;
text-align: center;
direction: rtl;
width: 300px;
height: 200px;
line-height: 22px;
top: 25%;
bottom: 0;
left: 0;
right: 0;
margin:0 auto;
}
#loading-animation {
border: 12px solid #f5f5f5;
border-top: 12px solid #999;
border-radius: 50%;
width: 50px;
height: 50px;
margin: 0 auto;
animation: spin 1s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
</style>
</head>
<body>
<noscript>جاوا اسکریپت در مرورگر شما پشتیبانی نمی شود یا غیرفعال است!</noscript>
<div id="loading-main">
<div id="loading-animation"></div>
در حال بارگذاری... <br> لطفا چند لحظه صبر کنید!
</div>
<script>
document.onreadystatechange = function() {
if(document.readyState !== "complete") {
document.querySelector("body").style.visibility = "hidden";
document.querySelector("#loading-main").style.visibility = "visible";
} else {
document.querySelector("#loading-main").style.display = "none";
document.querySelector("body").style.visibility = "visible";
}
};
</script>
<!--
کدهای نمایش پیام در حال بارگذاری را در قسمت بالا درج کنید
کدهای مربوط به سایر محتوای صفحه را در قسمت پائین درج کنید
-->
<div id="webgoo-logo">
<a href="https://webgoo.ir" title="وبگو | آموزش برنامه نویسی و مهارتهای وب" target="_blank">
<!--
برای تست مجدد عملکرد کد در حالت لوکال-آنلاین، عبارت فرضی
py75mr3rtyuo1
را در قسمت
src
تغییر داده، صفحه را در دستکتاپ ذخیره کرده و آدرس مرورگر را رفرش کنید
-->
<img id="logo-img" alt="Webgoo" src="https://webgoo.ir/image/webgoo.svg?ver=py75mr3rtyuo1">
</a>
</div>
</body>
</html>
پیش نمایش آنلاین
چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
استفاده ترکیبی از جاوا اسکریپت (JavaScript) و PHP
ساخت افکت رنگی با جاوا اسکریپت (JavaScript)
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
اعتبارسنجی فرم های وب با جاوا اسکریپت (JavaScript)


اگه میشه راهنمایی کنید. چطوری میتونم با جاوا اسکریپت عکس کپچا رو لود کنم و یه دکمه برای رفرش اون بذارم.
عکسی کپچا و کد اون توی یک فایل php ساخته میشه که مسیر فایل به عنوان منبع عکس در عنصر img در صفحه لوگین گذاشتم.
مرسی
این یک مبحث مفصل است که نیاز به آموزش جداگانه دارد، البته مطلبی در همین خصوص در سایت منتشر شده، عبارت "تعویض" را در قسمت جستجو وارد کنید.
تو گوگل سرچ کردم نتونستم حتا یه کتاب یا فایل pdf اموزشی که در مورد زبان smarty باشه پیدا کنم
ممنون میشم سایت یا کتابی رو بهم معرفی کنید
لینکی هم که دادید رو کامل مطالعه میکنم
Smarty 2 Latest Stable Release
Smarty 2.6.27 (.tar.gz) (.zip) Sep 25th, 2012
Smarty 2 Previous Releases
Smarty 2.6.26 (.tar.gz) (.zip) June 18th, 2009
مال من 26 بود که نسخه جدیدترش رو دریافت کردمدستتون در نکنه باور کنید 80 درصد مشکلم رو حل کردید
ممنون
مثال :
<?php
دستورات
?>
من می خوام سیستم امار سایت رو تو قالب بذارم تو یکی از ستون ها برای همچین دستوارتی باید چی کار کرد مثلا از چه تگی استفاده کنم همین اموزشی که شما گذاشته بودیننمایش آمار سایت، این رو چه جوری نمایش بدم
{php}
کدهای PHP
{/php}
اطلاعات بیشتر:smarty.net/docsv2/en/language.function.php
از سایت پشتیبانیش حتما استفاده می کنم
اقا یه دنیا ممنون که دانش خودتون رو با دیگران به اشتراک میذارید خسته نباشید
دیگه ما کاربر وب سایت شما هستیم و خواهیم بود
سپاس فراوان
----------
به عنوان مثال من از این دستور برای به روز کردن خودکار متن کپی رایت استفاده می کنم
<script type="text/javascript">
var now = new Date();
var startYear = "2005";
var text = "Copyright © ";
if (startYear != '')
{
text = text + startYear + "-";
}
text = text + now.getFullYear() + ", Army Ants. All rights reserved";
var copyrightnotice = document.getElementById('copyrightnotice');
copyrightnotice.innerHTML = text;
</script>
و در نهایت وقتی وارد صفحه اصلی سایت میشم با چنین پیامی مواجه میشمFatal error: Smarty error: [in C:\xampp\htdocs/templates/b2b/index.tpl line 6]: syntax error: unrecognized tag 'text' (Smarty_Compiler.class.php, line 590) in C:\xampp\htdocs\library\smarty\libs\Smarty.class.php on line 1093
همش زیر سر این فایل Smarty.class.php هستش ولی نمیدونم کجاش و چرا این محدودیت رو بهش اضافه کردن{literal}
<script type="text/javascript">
var now = new Date();
var startYear = "2005";
var text = "Copyright © ";
if (startYear != '')
{
text = text + startYear + "-";
}
text = text + now.getFullYear() + ", Army Ants. All rights reserved";
var copyrightnotice = document.getElementById('copyrightnotice');
copyrightnotice.innerHTML = text;
</script>
{/literal}
اطلاعات بیشتر:smarty.net
سایتتون رو هم به علاقه مندی های مرورگرم اضافه کردم
-------------
سوال : پوسته وب سایت من فرمت tpl داره می نمیتونم از
<script type="text/javascript">
ها استفاده کنم چون اخطار میدهبه نظر شما راه حلش چیه؟
نظر لطف شما است، در مورد سوال:
از چه CMS یا برنامه ای برای مدیریت سایتتان استفاده می کنید؟، فایل های tpl قابلیت درج کدهای HTML و به تبع جاوا اسکریپت را دارند، لذا خطا ارتباطی به tpl بودن فایل ندارد، چه خطایی دریافت می کنید؟
توضيح مختصري بدين
آخه من كد را گذاشتم اتفاقي نمي افته
پس چه موقع پيغام لطفا منتظر بمانيد را نشون ميده
در مورد اینکه اتفاقی نمی افتد چند دلیل ممکن است داشته باشد:
- کد را به نحو صحیح و مطابق آموزش درج نکرده اید.
- از این کد به صورت آفلاین (به طور مثال در لوکال هاست) استفاده می کنید که در این صورت چون صفحه به سرعت بارگذاری می شود، پیامی نیز نشان داده نمی شود.
برای پاسخ دقیق تر نیاز به بررسی صفحه ای است که کد را در آن قرار می دهید.
دقیقا همون آفلاین اجرا شدنه بود چون php نبود دلیلی نمی دیدم از لوکال اجراش کنم.
سایتتون رو دنبال میکنم و ارزش کارتون رو خوب درک میکنم واسه همین میگم واقعا خسته نباشید و از اینکه در حال ارائه خدمات به طور رایگان و پایه ایی برای یک ایرانی هستید! ممنونم
خواهش می کنیم، نظر لطف شما است.
فکر کنم بد عنوان کردم. مثلا من از چند تا کد jquery واسه قالب استفاده کردم مثل گالری عکس . وقتی تو ie اجراش میکنم (از اونجایی که جاوا اسکریپت رو داخلش فعال نکردم) این کدها تا زمانی که من اجازه اجرای جاوا رو ندم اجرا نمیشن در صورتی که قالبها یا سایت هایی رو توسط همین ie تست کردم با اینکه حاوی کدهای جاوا است ولی هیچ گونه بلاکی توسط مرورگر انجام نمیشه. حالا در کل این رو میخوام که قالب من همراه با کدهای جاوا از طرف هیچ مرورگری بلاک نشه.
این مورد ممکن است چند دلیل داشته باشد که البته جواب دقیق را تنها با بررسی سورس کدها و تنظیمات مرورگر می توان داد، اما به طور کلی مرورگر IE به چند دلیل از یک صفحه ممکن است ایراد جاوا اسکریپت داشته باشد، حالت اول این که صفحه به صورت آفلاین دیده شود، به فرض صفحه بر روی هارد ذخیره شده باشد، در این حالت مرورگر یک اخطار امنیتی نمایش می دهد و در صورت تایید کدهای جاوا اسکریپت اجرا می شوند، حالت دوم وجود خطا در کدهای جاوا اسکرپت است که در نسخه های قدیمی تر باعث نمایش پنجره خطا می شود و در نسخه های جدیدتر گوشه پائین سمت چپ عبارتی مبنی بر Error نمایش داده می شود و اگر روی آن کلیلک کنید، دلیل و خط خطا مشخص است.
خارج از این موارد دلیل خاص دیگری وجود ندارد.
ببخشید این سوال و این جا مطرح می کنم.
چرا بعضی از سایت ها قالب هاشون با اینکه کدنویسی جاوا توش انجام شده بروزر هیچ اروری مبنی بر تایید جاوا نمیده ولی قالبی که من داخلش اسکریپت دارم بروزر ازم تاییدیه میخواد؟
اصلا کدی وجود داره که داخل قالب ازش استفاده کرد تا مرورگرها بدون تنظیم دستی جاوا اسکریپت اونا رو نمایش بده یا همون اجرا کنه؟
البته منظور دقیق سوال شما مشخص نیست، جاوا اسکریپت به طور معمول در مرورگرها فعال است و اغلب کدهای آن بدون دخالت کاربر اجرا می شود، مگر کدهای خاصی که به امنیت سیستم ارتباط دارد یا اینکه باعث آزار کاربر می شود (مانند صفحات pop up ناخواسته)، در این مورد هم سایت ها و وبلاگ هایی که بدون تایید، صفحات را نمایش می دهند، در واقع از یک روش غیر مستقیم استفاده می کنند که نوعی تایید است، به طور مثال کاربر روی دکمه دانلود کلیک می کند و هم زمان با اجرای دانلود چند صفحه نیز کنار آن باز می شود (این روش یک نوع تایید باز شدن آن صفحات است، چون کاربر بر روی دکمه کلیک می کند).
اصلا فکر نمیکردم با onload کار میکنه فکر میکردم یه تابع دیگه ای حتما هست که من نمیدونستم :)
دستتون درد نکنه
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.