สกายวิลล่า

เขาค้อ

ยินดีต้อนรับสู่เขาค้อ

สกายวิลล่า
เขาค้อ

สัมผัสความงามของภูเขา พระอาทิตย์ขึ้น นอนดูดาว ท่ามกลางขุนเขาเพชรบูรณ์
บ้านพักที่ให้คุณใกล้ชิดธรรมชาติมากที่สุด

5 บ้านพัก
4.9★ คะแนนรีวิว
1,200+ ผู้เข้าพัก
เลื่อนลงดู

เช็คห้องว่างและราคา

เลือกวันที่และจำนวนผู้เข้าพัก แล้วกดปุ่มด้านล่าง

บ้านพักของเรา

เลือกบ้านที่ใช่สำหรับคุณ

แต่ละหลังออกแบบมาเพื่อให้คุณได้สัมผัสประสบการณ์ที่ไม่เหมือนใคร
ท่ามกลางบรรยากาศ ภูเขา พระอาทิตย์ขึ้น นอนดูดาว

🔍

เลือกวันที่เพื่อดูบ้านพัก

กรุณาเลือกวันเช็คอิน วันเช็คเอาต์ และจำนวนผู้เข้าพัก แล้วกด “เช็คบ้านว่าง”

เช็คบ้านว่างเดี๋ยวนี้
สิ่งอำนวยความสะดวก

ครบครันทุกความต้องการ

เราดูแลทุกรายละเอียดเพื่อให้คุณพักผ่อนได้อย่างสมบูรณ์

WiFi ฟรี

อินเทอร์เน็ตความเร็วสูงครอบคลุมทั้งรีสอร์ท

ที่จอดรถฟรี

พื้นที่จอดรถกว้างขวาง รองรับได้ทุกคัน

เตาผิง

เตาผิงอุ่นใจยามค่ำคืนที่อากาศหนาว

จุดชมวิว

จุดชมวิวพิเศษเห็นพระอาทิตย์ขึ้นสวยงามที่สุด

บาร์บีคิว

อุปกรณ์บาร์บีคิวครบครัน เพลิดเพลินยามเย็น

น้ำอุ่นตลอดคืน

ระบบน้ำอุ่นคุณภาพสูง อาบน้ำสบายทุกเวลา

ที่นอนพรีเมี่ยม

เตียงนอนคุณภาพดี ผ้าปูที่นอนสะอาด

จุดถ่ายรูป

จุดถ่ายรูปสวยงาม พร้อมฉากหลังเป็นภูเขา พระอาทิตย์ขึ้น/p>

รีวิวจากผู้เข้าพัก

ทุกประสบการณ์คือความประทับใจ

สิ่งที่ผู้เข้าพักพูดถึงสกายวิลล่า เขาค้อ

4.9
จาก 1,247 รีวิว
5 ดาว
89%
4 ดาว
8%
3 ดาว
2%
1-2 ดาว
1%

สมชาย วงศ์ดี

มกราคม 2027
✓ จองจริง

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

บรรยากาศดี สะอาด คุ้มค่า

นภา สุขสันต์

ธันวาคม 2026
✓ จองจริง

“มาครั้งแรกก็ชอบเลยค่ะ วิวสวยมาก อากาศหนาวพอดี เจ้าของดูแลดีมาก อาหารอร่อย ที่พักสะอาดมาก ราคาไม่แพงเลย จะมาอีกแน่นอน!”

วิวสวย อาหารอร่อย บริการดี

กฤษณา มีสุข

พฤศจิกายน 2026
✓ จองจริง

“มากับครอบครัว 6 คน เลือกบ้านหลังใหญ่ กว้างมาก สะดวกสบาย เด็กๆ ชอบมากเลย ได้ออกไปดูวิวด้วยกัน ประทับใจมาก!”

เหมาะกับครอบครัว บ้านกว้าง ประทับใจ

ประภาพร รักธรรม

ตุลาคม 2026
✓ จองจริง

“ตื่นมาเจอพระอาทิตย์ขึ้นทุกเช้า สวยมากจนอยากร้องไห้เลยค่ะ บรรยากาศดีมาก ไม่มีเสียงรบกวน สงบมาก เหมาะสำหรับคนอยากพักผ่อนจริงๆ”

พระอาทิตย์ขึ้น สงบ พักผ่อน
ที่ตั้ง

เดินทางมาหาเราได้เลย

สกายวิลล่า เขาค้อ อำเภอเขาค้อ จังหวัดเพชรบูรณ์

ที่อยู่

สกายวิลล่า เขาค้อ อ.เขาค้อ จ.เพชรบูรณ์ 67270

เวลาเช็คอิน / เช็คเอาต์

เช็คอิน 14:00 น. | เช็คเอาต์ 12:00 น.

ระยะทาง

จากกรุงเทพฯ ประมาณ 418 กม. (5-6 ชั่วโมง)

นำทางด้วย Google Maps
FAQ

คำถามที่พบบ่อย

ตอบทุกข้อสงสัยก่อนมาพักกับเรา

การยืนยันการจองทำอย่างไร?

หลังจากกรอกข้อมูลจองแล้ว ทางรีสอร์ทจะติดต่อกลับทาง LINE หรือโทรศัพท์ภายใน 1 ชั่วโมง เพื่อยืนยันการจองและแจ้งข้อมูลการชำระเงิน

ต้องมัดจำเท่าไหร่?

มัดจำ 50% ของราคาห้องพักทั้งหมด ส่วนที่เหลือชำระวันเช็คอิน รองรับโอนพร้อมเพย์และ QR Code

นโยบายยกเลิกการจอง?

ยกเลิกก่อน 7 วัน คืนเงินมัดจำ 100% | ยกเลิกก่อน 3 วัน คืนเงิน 50% | ยกเลิกน้อยกว่า 3 วัน ไม่คืนเงินมัดจำ

สัตว์เลี้ยงเข้าได้ไหม?

อนุญาตให้นำสุนัขขนาดเล็ก-กลางเข้าได้ (น้ำหนักไม่เกิน 15 กก.) กรุณาแจ้งล่วงหน้าเมื่อจอง

มีอาหารเช้าไหม?

มีอาหารเช้า

ถนนขึ้นภูสภาพเป็นยังไง?

ถนนขึ้นสะดวกสบายสุดๆ

ติดต่อเรา

ติดต่อได้ตลอด 24 ชั่วโมง

ทีมงานพร้อมตอบทุกคำถามของคุณ

โทรศัพท์

097-290-8416

ทุกวัน 7:00 – 21:00 น.

Facebook

Camp View Mok

ส่งข้อความผ่าน Messenger

อีเมล

huaipaicom@gmail.com

ตอบกลับภายใน 24 ชั่วโมง

‘use strict’; /** * เขาค้อสกายวิลล่า — Frontend สำหรับหน้า 01-index.html * แก้ APPS_SCRIPT_URL และ LINE_URL ก่อนใช้งานจริง */ const CONFIG = { APPS_SCRIPT_URL: ‘https://script.google.com/macros/s/AKfycbxML5wBMyGXrvvCXBxisMNp95ELUNuUy4R1UbL6PqAo7cdt0jVECUcDxykihfxH4eHb/exec’, LINE_URL: ‘https://line.me/R/ti/p/@YOUR_LINE_ID’, MIN_GUESTS: 1, MAX_GUESTS: 30, API_TIMEOUT: 30000 }; const STATE = { checkin: ”, checkout: ”, guests: 2, nights: 0, rooms: [], transfers: [], selectedRoom: null, selectedTransfer: null, filter: ‘all’ }; const $ = id => document.getElementById(id); const money = value => new Intl.NumberFormat(‘th-TH’, { style: ‘currency’, currency: ‘THB’, maximumFractionDigits: 0 }).format(Number(value || 0)); const escapeHTML = value => String(value ?? ”).replace(/[&<>“‘]/g, char => ({ ‘&’: ‘&’, ‘<': '<', '>‘: ‘>’, ‘”‘: ‘"’, “‘”: ‘'’ }[char])); document.addEventListener(‘DOMContentLoaded’, () => { initLoading(); initDates(); initBookingEvents(); initWebsiteUI(); showPlaceholder(); }); function initLoading() { const screen = $(‘loading-screen’); if (!screen) return; setTimeout(() => { screen.classList.add(‘hidden’); setTimeout(() => screen.remove(), 600); }, 900); } function localISO(date) { const d = new Date(date); d.setMinutes(d.getMinutes() – d.getTimezoneOffset()); return d.toISOString().slice(0, 10); } function initDates() { const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); const nextDay = new Date(tomorrow); nextDay.setDate(nextDay.getDate() + 1); $(‘checkin-date’).min = localISO(tomorrow); $(‘checkout-date’).min = localISO(nextDay); $(‘checkin-date’).value = localISO(tomorrow); $(‘checkout-date’).value = localISO(nextDay); $(‘checkin-date’).addEventListener(‘change’, () => { const minimumCheckout = new Date($(‘checkin-date’).value + ‘T12:00:00’); minimumCheckout.setDate(minimumCheckout.getDate() + 1); const minimum = localISO(minimumCheckout); $(‘checkout-date’).min = minimum; if ($(‘checkout-date’).value < minimum) $('checkout-date').value = minimum; }); } function initBookingEvents() { $('btn-search').addEventListener('click', searchAvailability); $('guest-minus').addEventListener('click', event => { event.preventDefault(); changeGuests(-1); }); $(‘guest-plus’).addEventListener(‘click’, event => { event.preventDefault(); changeGuests(1); }); document.querySelectorAll(‘.filter-btn’).forEach(button => { button.addEventListener(‘click’, () => { document.querySelectorAll(‘.filter-btn’).forEach(item => item.classList.remove(‘active’)); button.classList.add(‘active’); STATE.filter = button.dataset.filter; renderRooms(); }); }); $(‘room-list’).addEventListener(‘click’, event => { const button = event.target.closest(‘[data-book-room]’); if (button) openBookingModal(button.dataset.bookRoom); }); $(‘modal-close’).addEventListener(‘click’, closeBookingModal); $(‘booking-modal’).addEventListener(‘click’, event => { if (event.target === $(‘booking-modal’)) closeBookingModal(); }); $(‘booking-transfer’).addEventListener(‘change’, updateBookingSummary); $(‘booking-form’).addEventListener(‘submit’, submitBooking); } function changeGuests(change) { const input = $(‘guest-count’); input.value = Math.min(CONFIG.MAX_GUESTS, Math.max(CONFIG.MIN_GUESTS, Number(input.value) + change)); } function calculateNights(checkin, checkout) { return Math.round( (new Date(checkout + ‘T12:00:00’) – new Date(checkin + ‘T12:00:00’)) / 86400000 ); } async function requestJSON(url, options = {}) { if (!CONFIG.APPS_SCRIPT_URL.startsWith(‘https://script.google.com/’)) { throw new Error(‘กรุณาใส่ Google Apps Script Web App URL ในไฟล์ 03-script.js’); } const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), CONFIG.API_TIMEOUT); try { const response = await fetch(url, {…options, signal: controller.signal}); const result = await response.json(); if (!result.ok) throw new Error(result.message || ‘ระบบไม่สามารถทำรายการได้’); return result; } catch (error) { if (error.name === ‘AbortError’) throw new Error(‘การเชื่อมต่อใช้เวลานานเกินไป กรุณาลองใหม่’); throw error; } finally { clearTimeout(timeout); } } async function searchAvailability() { const checkin = $(‘checkin-date’).value; const checkout = $(‘checkout-date’).value; const guests = Number($(‘guest-count’).value); const nights = calculateNights(checkin, checkout); if (!checkin || !checkout || nights < 1) return showAlert('error', 'วันที่ไม่ถูกต้อง', 'วันเช็คเอาต์ต้องอยู่หลังวันเช็คอิน'); setSearchLoading(true); try { const params = new URLSearchParams({action: 'availability', checkin, checkout, guests}); const result = await requestJSON(`${CONFIG.APPS_SCRIPT_URL}?${params}`); Object.assign(STATE, { checkin, checkout, guests, nights: result.nights, rooms: result.rooms || [], transfers: result.transfers || [] }); updateSearchSummary(); renderRooms(); document.getElementById('rooms').scrollIntoView({behavior: 'smooth', block: 'start'}); } catch (error) { showAlert('error', 'เช็คบ้านว่างไม่สำเร็จ', error.message); } finally { setSearchLoading(false); } } function renderRooms() { const list = $('room-list'); const rooms = STATE.rooms.filter(room => STATE.filter === ‘all’ || room.status === STATE.filter); $(‘rooms-placeholder’).style.display = ‘none’; if (!rooms.length) { list.innerHTML = `
🏠

ไม่พบรายการบ้านพัก

ลองเปลี่ยนตัวกรองหรือช่วงวันที่

`; return; } list.innerHTML = rooms.map(room => { const available = room.available === true; const baseAverage = STATE.nights ? room.roomCost / STATE.nights : room.roomCost; return `
${escapeHTML(room.name)}
${available ? ‘ว่าง’ : ‘เต็มแล้ว’}
${money(baseAverage)}/คืน

${escapeHTML(room.name)}

สูงสุด ${room.maxGuests} คน

${escapeHTML(room.description)}

ราคาปกติ ${room.baseGuests} ท่าน เสริม ${money(room.extraGuestPrice)}/ท่าน/คืน
ยอดรวม ${STATE.nights} คืน ${money(room.totalPrice)}
${room.extraGuestTotal > 0 ? `

รวมค่าเสริมผู้เข้าพัก ${money(room.extraGuestTotal)}

` : ”}
${available ? `` : `
${escapeHTML(room.unavailableReason || ‘เต็มแล้ว’)}
`}
`; }).join(”); } function showPlaceholder() { $(‘room-list’).innerHTML = ”; $(‘rooms-placeholder’).style.display = ‘block’; } function setSearchLoading(loading) { const button = $(‘btn-search’); button.disabled = loading; button.innerHTML = loading ? ‘กำลังตรวจสอบ…‘ : ‘เช็คบ้านว่าง‘; } function updateSearchSummary() { $(‘search-summary’).style.display = ‘flex’; $(‘summary-nights’).textContent = `${STATE.nights} คืน`; $(‘summary-dates’).textContent = `${formatDateThai(STATE.checkin)} → ${formatDateThai(STATE.checkout)}`; $(‘summary-guests’).textContent = `${STATE.guests} คน`; } function openBookingModal(roomId) { const room = STATE.rooms.find(item => String(item.id) === String(roomId)); if (!room || !room.available) return; STATE.selectedRoom = room; STATE.selectedTransfer = null; $(‘booking-form’).reset(); $(‘booking-guests-modal’).value = STATE.guests; $(‘booking-transfer’).innerHTML = ‘‘ + STATE.transfers.filter(item => item.enabled).map(item => `` ).join(”); $(‘modal-room-info’).innerHTML = ` ${escapeHTML(room.name)} `; updateBookingSummary(); $(‘booking-modal’).classList.add(‘open’); document.body.classList.add(‘modal-open’); setTimeout(() => $(‘booking-name’).focus(), 200); } function updateBookingSummary() { const room = STATE.selectedRoom; if (!room) return; const transfer = STATE.transfers.find(item => String(item.id) === $(‘booking-transfer’).value); STATE.selectedTransfer = transfer || null; const transferPrice = Number(transfer?.price || 0); const total = Number(room.totalPrice) + transferPrice; $(‘booking-total-summary’).innerHTML = ` `; } function closeBookingModal() { $(‘booking-modal’).classList.remove(‘open’); document.body.classList.remove(‘modal-open’); } async function submitBooking(event) { event.preventDefault(); if (!$(‘booking-form’).checkValidity()) { $(‘booking-form’).reportValidity(); return; } if (!$(‘booking-agree’).checked) return showAlert(‘warning’, ‘กรุณายอมรับเงื่อนไข’, ‘โปรดอ่านและยอมรับเงื่อนไขการจอง’); const button = $(‘btn-confirm-book’); button.disabled = true; button.innerHTML = ‘ กำลังบันทึก…’; try { const payload = { action: ‘book’, roomId: STATE.selectedRoom.id, checkin: STATE.checkin, checkout: STATE.checkout, guests: STATE.guests, name: $(‘booking-name’).value.trim(), phone: $(‘booking-phone’).value.trim(), lineId: $(‘booking-line’).value.trim(), note: $(‘booking-note’).value.trim(), transferId: STATE.selectedTransfer?.id || ” }; const result = await requestJSON(CONFIG.APPS_SCRIPT_URL, { method: ‘POST’, headers: {‘Content-Type’: ‘text/plain;charset=utf-8’}, body: JSON.stringify(payload) }); closeBookingModal(); await showSuccess(result); await searchAvailability(); } catch (error) { showAlert(‘error’, ‘ส่งคำขอจองไม่สำเร็จ’, error.message); } finally { button.disabled = false; button.innerHTML = ‘ ยืนยันการจอง’; } } function showSuccess(result) { if (window.Swal) { return Swal.fire({ icon: ‘success’, title: ‘ส่งคำขอจองสำเร็จ’, html: `เลขที่คำขอ ${escapeHTML(result.bookingRef)}
ยอดรวม ${money(result.totalPrice)}

เพิ่มเพื่อน LINE เพื่อยืนยันการจอง`, confirmButtonText: ‘เรียบร้อย’, confirmButtonColor: ‘#0ea5e9’ }); } alert(`ส่งคำขอจองสำเร็จ\nเลขที่คำขอ: ${result.bookingRef}`); return Promise.resolve(); } function showAlert(icon, title, text) { if (window.Swal) return Swal.fire({icon, title, text, confirmButtonColor: ‘#0ea5e9’}); alert(`${title}\n${text}`); } function formatDateThai(value) { return new Intl.DateTimeFormat(‘th-TH’, {day: ‘numeric’, month: ‘long’, year: ‘numeric’}) .format(new Date(value + ‘T12:00:00’)); } function initWebsiteUI() { if (window.AOS) AOS.init({duration: 700, once: true, offset: 60}); const hamburger = $(‘nav-hamburger’); const navLinks = $(‘nav-links’); hamburger?.addEventListener(‘click’, () => { hamburger.classList.toggle(‘active’); navLinks.classList.toggle(‘open’); }); document.querySelectorAll(‘.nav-link, .btn-nav-book’).forEach(link => { link.addEventListener(‘click’, () => { hamburger?.classList.remove(‘active’); navLinks?.classList.remove(‘open’); }); }); const scrollTop = $(‘scroll-top-btn’); window.addEventListener(‘scroll’, () => { $(‘navbar’)?.classList.toggle(‘scrolled’, window.scrollY > 40); scrollTop?.classList.toggle(‘show’, window.scrollY > 500); $(‘sticky-mobile-book’)?.classList.toggle(‘show’, window.scrollY > 500); }, {passive: true}); scrollTop?.addEventListener(‘click’, () => window.scrollTo({top: 0, behavior: ‘smooth’})); document.querySelectorAll(‘a[href^=”#”]’).forEach(link => { link.addEventListener(‘click’, event => { const target = document.querySelector(link.getAttribute(‘href’)); if (!target) return; event.preventDefault(); target.scrollIntoView({behavior: ‘smooth’, block: ‘start’}); }); }); document.querySelectorAll(‘.lazy’).forEach(image => { if (image.dataset.src) image.src = image.dataset.src; }); initGallery(); } function initGallery() { const images = […document.querySelectorAll(‘.gallery-img’)]; images.forEach((image, index) => image.closest(‘.gallery-item’)?.addEventListener(‘click’, () => { $(‘lightbox-img’).src = image.dataset.src || image.src; $(‘lightbox-caption’).textContent = image.alt; $(‘lightbox’).dataset.index = index; $(‘lightbox’).classList.add(‘open’); })); $(‘lightbox-close’)?.addEventListener(‘click’, () => $(‘lightbox’).classList.remove(‘open’)); const move = change => { let index = (Number($(‘lightbox’).dataset.index || 0) + change + images.length) % images.length; $(‘lightbox’).dataset.index = index; $(‘lightbox-img’).src = images[index].dataset.src || images[index].src; $(‘lightbox-caption’).textContent = images[index].alt; }; $(‘lightbox-prev’)?.addEventListener(‘click’, () => move(-1)); $(‘lightbox-next’)?.addEventListener(‘click’, () => move(1)); } function toggleFaq(element) { element.parentElement.classList.toggle(‘open’); }