ในบทก่อน ๆ เกี่ยวกับการเปลี่ยนธีมตามช่วงเวลาที่กำหนดไว้ เช่น เช้า สาย บ่าย เย็น
ซึ่งอาจจะยังไม่สามารถสร้างความหลากหลายให้กับผู้เข้าชมได้อย่างเพียงพอ
ไม่เป็นไร ยังเหลือเทคนิคสุดยอดแห่งการเปลี่ยนธีมอีกหนึ่งอย่าง นั่นคือ ...

การเปลี่ยนธีมแบบสุ่ม

จากที่หลาย ๆ คนได้เห็นธีมเฉพาะกิจ:แฮร์รี่พอตเตอร์ในบล็อกนี้มาหนึ่งอาทิตย์แล้ว
นั่นแหละคือการเปลี่ยนธีมแบบสุ่มและในวันนี้เราจะมาเฉลยเทคนิคให้ทราบกัน

ขอแจ้งให้ทราบไว้ก่อนว่า ถ้าใครยังไม่เคยอ่านบทความเกี่ยวกับการเปลี่ยนธีม
ในบทความก่อนหน้านี้ สามารถตามไปอ่านได้
ที่นี่เพื่อที่จะได้ไม่งงจนเกินไป
(หรือไม่ก็จะงงยิ่งกว่าเดิม เฉกเช่นเหยื่อคนอื่น ๆ ที่หลงเข้าไปอ่านก่อนหน้านี้)

ลักษณะการทำงานของฟังก์ชั่นเปลี่ยนธีมแบบสุ่มก็คือ เป็นการสุ่มเลือกค่าออกมา
จากขอบเขตที่กำหนดไว้ เช่น ขอบเขตที่กำหนดไว้คือ7 เลขที่จะถูกสุ่มออกมา
ก็จะอยู่ระหว่าง 0 ถึง 6 เท่านั้น

ให้ลองศึกษาสคริปต์ข้างล่างดูนะครับ

function getCSS()
{ 
// สร้างตัวแปรเพื่อระบุ url ที่ใช้ฝากไฟล์ css
url = 'http://www.yourhost.com/folder/'; // สร้างอาร์เรย์ (Array) เพื่อเก็บสมาชิกของชื่อไฟล์ธีมต่าง ๆ ที่จะนำมาใช้
themes = new Array ("style1", "style2", "style3", "style4",
"style5", "style6", "style7");
// ขอบเขตก็คือจำนวนสมาชิกในอาร์เรย์นั่นเอง นับดูตอนนี้จะเท่ากับ 7
range = themes.length;
today = new Date();		// สร้างตัวแปรรับค่าวันเวลาปัจจุบัน
second = today.getSeconds(); // ดึงเฉพาะเลขวินาทีออกมาใส่ตัวแปร
// เอาค่าวินาทีมา mod กับขอบเขต จะได้ค่าระหว่าง 0 ถึง 6
var i = second%range;
// ค่าที่สุ่มออกมาได้จะเป็นตำเหน่งของสมาชิกในอาร์เรย์ที่เป็นชื่อไฟล์
display = url + themes[i] +'.css';
//สั่งให้โค้ดสร้างคำสั่งเรียกธีมโดยใช้ตัวแปร display มาใส่แทนในส่วนของชื่อไฟล์
var css = '<';
css+='link rel="stylesheet" href="' + display + '" \/';
css+='>';
// พิมพ์คำสั่งเรียกธีมที่สร้างเสร็จแล้ว
document.write(css);
}

getCSS();

จากที่เห็นในโค้ด ใครที่เคยเขียนโปรแกรมอาจจะเริ่มสงสัยว่ามันสุ่มตรงไหนหว่า
ดูเหมือนเทคนิคเก่า ๆ ที่เปลี่ยนจากการเลือกเลขชั่วโมงมาเป็นการเลือกเลขวินาที
ออกมาทำงานแทนแค่นั้นเอง

คำตอบคือจริงครับ ตั้งใจให้เป็นอย่างนั้น เพราะคิดว่าเทคนิคนี้จะทำให้เครื่องใช้พลัง
การคำนวณน้อยกว่าการใช้ฟังก์ชั่นในการสุ่มจริง เพราะตัวเลขวินาทีมันวิ่งของมันไป
เรื่อย ๆ อยู่แล้ว การที่เราเลือกมันมาใช้ ณ ขณะใดขณะหนึ่ง มันก็ถือเป็นการสุ่มนั่นเอง

ในขณะที่ฟังก์ชั่นสุ่มของจริง (random) จะต้องใช้การทำงานที่ซับซ้อนกว่าอีกนิดนึงคือ
คือมันจะมีหน้าที่สุ่มเลือกค่าระหว่าง 0 ถึง 1 ออกมาให้เท่านั้น ที่เหลือเป็นหน้าที่ของเรา
ที่จะกำหนดขอบเขตของจำนวนที่ต้องการเอาเอง
ซึ่งถ้าเราจะเปลี่ยนโค้ดการเปลี่ยนธีม
ด้านบนให้มาใช้ฟังก์ชั่นการสุ่มจริง ๆ เราจะต้องเปลี่ยนโค้ดในบรรทัดเหล่านี้

today = new Date();		// สร้างตัวแปรรับค่าวันเวลาปัจจุบัน
second = today.getSeconds(); // ดึงเฉพาะเลขวินาทีออกมาใส่ตัวแปร
// เอาค่าวินาทีมา mod กับขอบเขต จะได้ค่าระหว่าง 0 ถึง 6
var i = second%range;

ให้เป็นแบบนี้แทน

var rand = Math.random();
// ตัวแปร rand จะบรรจุค่าหนึ่งที่อยู่ระหว่าง 0 ถึง 1 (มีทศนิยมให้หลายตำแหน่ง)
  var i = Math.round(rand*(range-1));
// พอเอาไปคูณกับ range-1 ที่เท่ากับ 6 จะทำให้ค่าที่สุ่มได้จะอยู่ระหว่าง 0 ถึง 6
// ส่วนฟังก์ชั่น Math.round จะช่วยปัดเลขทศนิยมให้เป็นเลขจำนวนเต็ม

จะสังเกตุว่าเป็นการทำงานอย่างสุ่ม ซึ่งต้องใช้ฟังก์ชั่นการคำนวณเพิ่มขึ้น ทำให้มีการคำนวณ
เพิ่มขึ้นอีกเล็กน้อย เมื่อเปรียบเทียบกับแบบแรก ที่สามารถสร้างตัวเลขแบบสุ่มได้เหมือนกัน

เอาล่ะ ถ้าแก้ไขโค้ดให้ได้ที่ต้องการเสร็จเมื่อไหร่ บันทึกโค้ดลงในไฟล์ สมมุติว่าชื่อ "css_random.js"

ส่วนคำสั่งสำหรับการเรียกใช้สคริปต์ css_random.js เป็นดังนี้

<script language="javascript" src="http://www.yourhost.com/folder/css_random.js"></script>

ทีนี้ก็เอาโค้ดตรงโซนสีเขียวไปแปะในเอ็นทรีก็ได้

หรือถ้าจะต้องการให้มีผลกับทั้งบล็อก ก็ให้ไปวางโค้ดเรียกสคริปต์ในส่วนของ
Preferences > Links > Add New Link แทน

ลองเอาไปทดลองดูนะครับ สนุกดี

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

โอ้แม้เจ้า มันเลิศจริงๆค่ะ

#1 By VAR on 2007-07-23 11:25

เจ๋งครับ..

#2 By :: KinG MoJi :: on 2007-07-23 11:37

จะลองเอาไปทำดู แต่ยังงงตรง ถ้าเราเพิ่มตัวอาร์เรย์มากขึ้น จุดอื่นๆก็ไม่ต้องเปลี่ยนอะไรใช่เปล่า แล้วไอ้ตรง range ทำจริงใส่เป็นตัวหนังสือหรือว่าให้ลงเลข 7

#3 By ตุ้มเป๊ะ on 2007-07-23 12:41

ใช้ range = themes.length ไปได้เลยครับ

มันจะนับให้เองว่ามีสมาชิกกี่ตัว

#4 By oatato on 2007-07-23 12:46

คิดเองไปลบเป็นตัวเลขแล้วอ่ะ ต้องไปอัพไฟล์ใหม่
ทำเสร็จแล้วจะมาบอกให้ทราบนะค่ะคุณครู

#5 By ตุ้มเป๊ะ on 2007-07-23 13:41

สำเร็จแล้วค่ะคุณครู o@@o ตอนนี้คุณเจ้าชายน้อยสนใจด้วยแหละ

#6 By ตุ้มเป๊ะ on 2007-07-23 16:50

มันเป็นเรื่องที่ดีมากๆนะครับ
แต่ผมขอบายดีกว่า เพราะดูมันยากกินไป

และผมกลัวทำ Blog พัง หัลงจากที่ทำ link พังไปแล้ว
เมื่อครั้งก่อน...

เรื่อง Link พัง แจ้งทาง wm ไปแล้ว ตอบว่า แก้ไขไม่ได้ ฮือๆๆ

ขอเป็น Theme แบบเรียบนี่แหละดีแล้ว อิอิอิ
คุณ o@@o มีคำถามค่ะ ทำไมธีมสุ่มของตุ้มเป๊ะมันไม่ต่อเนื่องละค่ะ มันจะกลับไปค้างที่ธีมหลักอยู่หลายครั้งกว่าจะไปธีมสุ่ม ไม่รู้ว่าทำอะไรผิดอีกหรือเปล่า เอหรือว่าเป็นเพราะที่ที่เราเก็บไฟล์มันไม่ดีค่ะ ก็ใช้ fileden ที่คุณ o@@o เคยแนะนำเมื่อก่อนหน้านี้

#8 By ตุ้มเป๊ะ on 2007-07-23 21:47

การโหลดธีมช้าจะมี 2 สาเหตุคือ
1. เว็บที่เก็บธีม (css) ช้า แต่ไม่ค่อยเจอปัญหานี้ครับ
เพราะไฟล์ css แต่ละตัวขนาดเล็กจิ๋วแค่ 5KB เอง
ส่วนเว็บ fileden ก็ถือว่าไม่ช้านะครับ
2. เว็บที่ใช้เก็บภาพ ถ้าช้าเราจะพบว่าคือรูปประกอบของธีมนั้น ๆ
จะปรากฏให้เห็นช้า แต่ยังไงธีมก็เปลี่ยนไปแล้วครับ

แต่ปัญหาของคุณตุ้มเป๊ะนี้ไม่เกี่ยวกับกรณีพวกนั้น
เป็นเพราะ 3 ใน 7 ไฟล์ธีมของคุณตุ้มเป๊ะหายสาบสูญไปครับ
- backtheme.css
- Blackpink%20theme.css
- bear%20theme
พอมันหาไฟล์ธีมดังกล่าวไม่เจอ ก็ไม่รู้จะเปลี่ยนจากธีมหลัก
เป็นธีมใหม่ยังไงดี

ลองเช็คลิ้งค์ของไฟล์ธีมให้ละเอียดอีกซักทีนะครับ

#9 By oatato on 2007-07-23 22:33

อะอะ... คุณ o@@o รู้ได้ไงอ่ะว่าเราลงสีอะไรบ้าง แล้วสีไหนหายไป ยังไม่แปะตัวอย่างโค้ดให้เช็คดูเลย

ขอบคุณค่ะที่บอกจุดบอด เดี๋ยวจะแว๊บไปทำเลยค่ะ แต่เริ่มจะรู้ตัวเองแล้วว่าทำอะไรผิด ไม่ละเอียดเลย แต่อย่างว่ามันร้อนต้องลองของทันที แถมเลยเวลาพักเที่ยงเบียดบังเวลาทำงาน มันก็เลยพลาด พอหัวหน้าเผลอปุ๊ปแอบทำปั๊บเลย

#10 By ตุ้มเป๊ะ on 2007-07-23 23:03

คุณครูย่อมต้องเป็นคุณครูวันยังค่ำ

สรุปที่คุณครูบอกทั้ง 3 อันชื่อผิดจริงๆค่ะ ผิดชื่อไฟล์ตกหล่น , เอา 20% ไปแทนอันเดอร์สกอร์ ไม่มีครู งานนี้ไม่สำเร็จจริง

งวดหน้าหาเรื่องมาสอนอีกนะค่ะ

#11 By ตุ้มเป๊ะ on 2007-07-23 23:26

ยังมีศาสตร์มืดอีกหนึ่งอย่างที่ยังไม่ได้ลองนำเสนอครับ
ถ้าหาวิธีนำเสนอได้เมื่อไหร่ คงได้รู้กันล่ะ เหอ เหอ

#12 By oatato on 2007-07-23 23:31

งงอ่าค่ะ..แหะๆ
ขอย้อนไปอ่านก่อน (เผื่อจะงงมากกว่าเดิม..เอ๊ ..ยังไง)
โอ้ ขอบคุณสำหรับวิธีการดีๆจ้า
เอาไปลองทำมั่งดีกว่า หุหุ

หาเอ็นทรี่ไม่เจอ ค้นได้


กำลังโหลดข้อมูลในบล็อก

Recommend