ผมไปเจอปลั๊กอินของ jQuery ตัวหนึ่งชื่อว่า spritely เป็นปลักอินที่ไว้สำหรับสร้างแอนิเมชั่นบนหน้าเว็บ น่าสนใจจริงๆครับปลักอินตัวนี้
จากคำกล่าวที่ว่า 1 ภาพสามารถแทนได้คำพูดได้ หนึ่งล้านคำ ผมก็ขออาศัยคำนี้มาใช้หน่อย เพราะผมคิดว่าให้ท่านดู Live Demo น่าจะอธิบายสิ่งที่ปลั๊กอินนี้ทำได้ ดีกว่าผมนั่งอธิบายจนน้ำลายเปรอะเป็นกระโถน
คลิกดูครับ Live Demo หรือจะดูที่นี่ก็ได้ http://www.quadrifogliorosso.com
ดาวน์โหลดโค้ดตัวอย่างที่ผมทำไว้ และไฟล์ที่จะใช้ในการสอนบทนี้
หลังจากดูตัวอย่างกันพอให้น้ำลายสอแล้ว เราก็เดินทางกันต่อดีกว่าครับ
หลักการทำงาน จะคล้ายๆ กับที่เราสร้างภาพ .gif คือสร้างภาพนิ่งหลายๆภาพ โดยแต่ละภาพก็ให้มีส่วนใดส่วนหนึ่ง แตกต่างออกไป เมื่อเอาภาพมาเรียงต่อกันแล้วเล่นต่อเนื่อง มันก็จะเป็นภาพเคลื่อนไหว
ปลักอินตัวนี้ประกอบไปด้วย method หลักๆ 3 ตัว คือ
.pan() ไว้สำหรับทำฉากหลังเคลื่อนที่ เหมือนการแพนกล้อง
.sprite() สำหรับทำให้วัตถุเคลื่อนไหว
.spRandom() สำหรับทำให้วัตถุเคลื่อนที่ เคลื่อนตำแหน่ง
ว่าแล้วก็มาดู วิธีสร้างฉากหลังกันก่อน
1. อินคลูดไฟล์ jQuery ที่จำเป็นเข้ามาก่อน
<script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript" src="jquery.spritely-0.1.js"></script> |
2. สร้าง div id=clound เปล่าๆขึ้นมาตัวนึง ภาพและรายละเอียดต่างๆ เราจะต้องไปกำหนดในส่วนของ css
<div id="clound"></div> |
3. ตกแต่งรายละเอียดฉากของเรา
<style type="text/css"> body{background:#0033FF;} #clound{ background:url(cloud.png); height:114px; width:100%; } </style> |
เปลี่ยนสีหน้าเว็บให้เป็นสีน้ำเงิน ถ้าไม่เปลี่ยนเดี๋ยวเราจะมองไม่เห็นก้อนเมฆลอยล่องของเรา กำหนดความสูงให้เท่ากับภาพที่จะนำมาทำฉาก และกำหนดความกว้างล่อซะให้เต็มหน้าเลย
4. เรียกใช้ปลั๊กอิน ก้อนเมฆเราจะได้วิ่งปริ้ดๆ
<script type="text/javascript"> $(document).ready(function() { $('#clound').pan({fps: 30, speed: 2, dir: 'left'}); }); </script> |
fps คือ frame per second ให้แสดงกี่เฟรมต่อวินาที
speed คือ ความเร็ว ตัวเลขยิ่งมากยิ่งวิ่งเร็ว
dir คือ direction ทิศทางในการเคลื่อนที่
โค้ดทั้งหมด
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript" src="jquery.spritely-0.1.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#clound').pan({fps: 30, speed: 2, dir: 'left'}); }); </script> <title>Sprite</title> <style type="text/css"> body{background:#0033FF;} #clound{ background:url(cloud.png); height:114px; width:100%; } </style> </head> <body> <div id="clound"></div> </body> </html> |
เมื่อท่านทำมาถึงตอนนี้ แล้วลองรันดูนะครับ ท่านจะได้เห็นก้อนเมฆค่อยๆลอยเคลื่อนตัวไปทางซ้าย บนท้องฟ้า ที่สำคัญ ไม่กระตุกนะเฮีย
เอาละสร้างฉากหลังเสร็จแล้ว ถ้าไม่มีอะไรลอยๆอยู่เหนือก้อนเมฆสักหน่อย ก็ดูเหมือนจะขาดชีวิตชีวา
5. เพิ่ม div ขึ้นมาอีกตัว เพื่อทำบอลลูน
<div id="balloon"></div> |
6. ตกแต่งสีสรร
#balloon { background:url("balloon.png") no-repeat scroll left top transparent; height:118px; width:82px; position:absolute; } |
ถ้าท่านดูภาพลูกโป่งที่ผมให้ดาวน์โหลดไป ท่านจะเห็นว่าในภาพนั้นประกอบไปด้วยลูกโป่ง 3 ลูกเหมือนๆกัน ถ้าเปลี่ยนเป็นภาพนก ท่านจะเข้าใจได้ทันทีว่าทำไมต้องใช้ 3 ภาพ ภาพแรกนกหุบปีก ภาพสองกำลังกางปีกหน่อยหนึ่ง ภาพสามกำลังบิน เมื่อนำมาเล่นต่อเนื่องไปเรื่อยๆ ท่านก็จะเห็นภาพนกบินตีปีกพั่บๆๆๆๆๆ (เสียงนกตีปีก ไม่ใช่เสียงเปิดบริสุทธิ์)
height ให้มีขนาดเท่ากับความสูงของภาพ
width ให้มีขนาด เศษ 1 ส่วน 3 ของภาพ ก็เพราะมันมี 3 ภาพ ใน 1 ภาพ (อธิบายได้ไม่งงเนอะ)
position ต้องเป็น absolute ลูกโป่งเราจะได้ลอยได้
7. เรียกใช้ปลักอิน สร้างลูกโป่งเคลื่อนไหว
$('#balloon') .sprite({fps: 3, no_of_frames: 3}) .spRandom({ top: 20, left: 100, right: 978, bottom: 150, speed: 8500, pause: 1000 }); |
.sprite สำหรับกำหนดว่าจะให้แสดงกี่เฟรมต่อวินาที และภาพที่เราเตรียมไว้มีกี่เฟรม
.spRandom สำหรับกำหนดบริเวณให้ลูกโป่งลอยไปลอยมา ถ้าท่านต้องการให้มันอยู่กับที่ ก็ไม่จำเป็นจะ้ต้องใช้ method นี้
โค้ดทั้งหมดทั้งสิ้น
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript" src="jquery.spritely-0.1.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#clound').pan({fps: 30, speed: 2, dir: 'left'}); $('#balloon') .sprite({fps: 3, no_of_frames: 3}) .spRandom({ top: 20, left: 100, right: 978, bottom: 150, speed: 8500, pause: 1000 }); }); </script> <title>Sprite</title> <style type="text/css"> body{background:#0033FF;} #clound{ background:url(cloud.png); height:114px; width:100%; } #balloon { background:url("balloon.png") no-repeat scroll left top transparent; height:118px; width:82px; position:absolute; } </style> </head> <body> <div id="clound"></div> <div id="balloon"></div> </body> </html> |
แหล่งข้อมูลอ้างอิง :
http://www.spritely.net/
Bowwy says:
25/03/2553 at 25/03/2553
ขอบคุณมากๆ เป็นประโยชน์จริงๆ
mrsitti says:
27/03/2553 at 27/03/2553
ขอบคุณครับ
JQuery สารพัดนึกจริงๆ
administrator says:
28/03/2553 at 28/03/2553
โ้อ้ว คุณ sitti เดี๋ยวนี้มีภาพอวตาร์แล้วเหรอครับ ภาพน่ารักมาก
koii says:
28/10/2553 at 28/10/2553
ถ้าเราจะเอา code นี้ไปวางใน template ของ joomla ต้องปรับอะไรหรือเปล่าคะ เพราะว่าเอาไปวางแล้วภาพมา แต่ไม่เคลื่อนไหวค่ะ รบกวนดู code ให้หน่อยนะคะ ขอบคุณค่ะ
params->get(“templateColor”,”blue”);
$moduleheading = $this->params->get(“moduleheading”,”h3″);
/* === End parameters =========================================== */
$template_name = ‘bj_venus’;
global $template_font;
define( ‘_TEMPLATE_PATH’, JPATH_BASE . DS . ‘templates’ . DS .$template_name);
define(‘_TEMPLATE_URL’,JURI::base().’templates/’.$template_name);
$iso = split( ‘=’, _ISO );
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="language; ?>” lang=”language; ?>” >
countModules(‘user1’)) { $user1 = 1;$user_count++;}
if($this->countModules(‘user2’)) { $user2 = 1;$user_count++;}
if($this->countModules(‘user3’)) { $user3 = 1;$user_count++;}
if($this->countModules(‘user4’)) { $user4 = 1;$user_count++;}
if($this->countModules(‘user5’)) { $user5 = 1;$user_count++;}
if($this->countModules(‘user6’)) { $user6 = 1;}
if($this->countModules(‘left’)) { $left = 1;}
if($this->countModules(‘right’)) { $right = 1;}
if($this->countModules(‘advert1’)) { $advert1 = 1;}
if($this->countModules(‘header’)){$header=1;}
if($this->countModules(‘toolbar’)){$toolbar=1;}
if($this->countModules(‘bottom’)){$bottom=1;}
if($this->countModules(‘top’)){$top=1;}
if($this->countModules(‘banner’)){$banner=1;}
if($this->countModules(‘headline’)){$headline=1;}
?>
<script type="text/javascript" src="/func/jquery-1.4.2.js”>
jQuery.noConflict();
var _TEMPLATE_URL = ”;
$(document).ready(function() {
$(‘#clound’).pan({fps: 30, speed: 2, dir: ‘left’});
$(‘#balloon’)
.sprite({fps: 3, no_of_frames: 3})
.spRandom({
top: 20,
left: 100,
right: 978,
bottom: 150,
speed: 8500,
pause: 1000
});
});
<link rel="stylesheet" type="text/css" href="/css/template_css.css” />
<link rel="stylesheet" type="text/css" href="/css/bj_dropdownmenu.css” />
<link rel="stylesheet" type="text/css" href="/css/typo.css” />
<link rel="stylesheet" type="text/css" href="/css/.css” />
div.componentheading .left{margin-top:-15px}
/* FIX COLOR IN IE */
.venus-textbox-2 div.blue{background:#002545;}
.venus-textbox-2 div.green{background:#173100}
.venus-textbox-2 div.purple{background:#321039}
.venus-textbox-2 div.orange{background:#D16500}
.venus-textbox-2 div.brown{background:#2F261B}
.venus-textbox-2 div.red{background:#610004}
#BJ_Search .typo-search{margin:-26px -25px 0 0}
div.bjmod-style-2 h3 .bjmod-head-r,div.bjmod-style-3 h3 .bjmod-head-r,div.bjmod-style-2 h4 .bjmod-head-r,div.bjmod-style-3 h4 .bjmod-head-r,div.bjmod-style-2 h5 .bjmod-head-r,div.bjmod-style-3 h5 .bjmod-head-r{margin:-19px -7px 0 0;}
div.componentheading .left{margin-top:-7px}
div.componentheading .right{margin-top:-49px}
.button-1-,.button-1-blue{padding:0;}
.button-2-,.button-2-blue{padding:9px 0}
a.button-2 .front{top:10px}
koii says:
01/11/2553 at 01/11/2553
สามารถใช้กับ .php ได้มั้ยคะ ขอบคุณค่ะ
administrator says:
01/11/2553 at 01/11/2553
ใช้ได้ครับ jQuery ก็คือจาวาสคริปต์ มันรันในฝั่งไคลแอนท์ สามารถใส่ไปใน server side script ได้ทุกภาษา
koii says:
01/11/2553 at 01/11/2553
ลองใส่เข้าไปใน template ของจูมล่า ภาพขึ้นหมด ยกเว้นตัว animation ที่ไม่เคลื่อนไหว ไม่ทราบว่าผิดพลาดตรงไหนคะ
koii says:
02/11/2553 at 02/11/2553
ทำได้แล้วค่ะ แค่ย้ายไฟล์ไปอยู่ directory เดียวกันกับ template เส้นผมบังภูเขาแท้ๆ
administrator says:
02/11/2553 at 02/11/2553
ยินดีด้วยนะครับ
koii says:
06/11/2553 at 06/11/2553
ขอบคุณค่ะ k.platoosom แต่พอใส่scriptg เข้าไปแล้ว มันทำให้ module พวก slideshow ของ joomla ใช้ไม่ได้ค่ะ พอเอา script ออก module ก็ใช้ได้ปกติ พอจะทราบมั้ยคะว่าต้องเข้ไปแก้ที่ไหน ขอบคุณค่ะ
administrator says:
15/11/2553 at 15/11/2553
น่าจะเป็นเพราะ javascript ชนกันครับ ไม่แน่ใจว่าโมดูลของจูมล่าตัวที่คุณ koii ใช้สร้างมาจาก mootool หรือเปล่า
ลองอ่านวิธีแก้ที่ลิ้งก์นี้ครับ http://www.unzeen.com/archives/981
koii says:
16/11/2553 at 16/11/2553
ใช่ค่ะ ใช้ mootool และได้เข้าไปลองอ่าน link ที่ให้มาแล้วค่ะ แต่ไม่ค่อยเข้าใจ รบกวนช่ยดู code ส่วน head ให้ทีนะคะ
_scripts[$this->baseurl . ‘/media/system/js/caption.js’]);
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="language; ?>” lang=”language; ?>”>
<link rel="stylesheet" href="baseurl() ; ?>templates/system/css/system.css” type=”text/css” />
<link rel="stylesheet" href="baseurl() ; ?>templates/system/css/general.css” type=”text/css” />
getParam(‘jv_google_fonts’)) : ?>
<link rel="stylesheet" href="templateurl(); ?>css/template.css.php?rtl=&googlefont=getParam(‘jv_google_fonts’)){echo ‘1’;}else{echo ‘0’;} ?>” type=”text/css” />
<link rel="stylesheet" href="templateurl(); ?>css/default.css” type=”text/css” />
<link rel="stylesheet" href="templateurl(); ?>css/template.css” type=”text/css” />
<link rel="stylesheet" href="templateurl(); ?>css/template_rtl.css” type=”text/css” />
<link rel="stylesheet" href="templateurl(); ?>css/typo_rtl.css” type=”text/css” />
<link rel="stylesheet" href="templateurl(); ?>css/typo.css” type=”text/css” />
getParam(‘jv_google_fonts’)) : ?>
<link rel="stylesheet" href="templateurl(); ?>css/googlefonts.css” type=”text/css” />
var baseurl = “baseurl() ; ?>”;
var jvpathcolor = ‘templateurl(); ?>css/colors/’;
var tmplurl = ‘templateurl();?>’;
var CurrentFontSize = parseInt(‘getParam(‘jv_font’);?>’);
<script type="text/javascript" src="templateurl() ?>js/jv.script.js”>
<link rel="stylesheet" href="templateurl(); ?>css/ie6.css” type=”text/css” />
<script type="text/javascript" src="templateurl() ?>js/ie_png.js”>
window.addEvent (‘load’, function() {
ie_png.fix(‘.png’);
});
<link rel="stylesheet" href="templateurl(); ?>css/ie7.css” type=”text/css” />
//อันนี้เป็นส่วน animation//
$(document).ready(function() {
$(‘#clound’).pan({fps: 30, speed: 2, dir: ‘left’});
$(‘#balloon’)
.sprite({fps: 3, no_of_frames: 3})
.spRandom({
top: 20,
left: 100,
right: 978,
bottom: 150,
speed: 8500,
pause: 1000
});
});
administrator says:
16/11/2553 at 16/11/2553
เขียนอย่างนี้ละกัน
autthapone says:
25/08/2555 at 25/08/2555
มิน่าท่านศาสดาถึงไม่ง้อ flash
มนากร says:
27/03/2557 at 27/03/2557
ขอบคุณมาก ๆ ครับ เอาไปต่อยอดได้เยอะเลยครับ <3