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

วางแผนโครงสร้าง HTML

แผ่น เสียง ที่ มี ชื่อ เสียง ประกอบ ด้วย กล่อง และ สไลด์ แต่ ละ แผ่น.

<div id="testimonial-slider" class="slider">
 <div class="slide active">
 <blockquote>
 <p>“Great service that delivered exactly what we needed.”</p>
 <footer>— Jane Doe, CEO of Example Inc.</footer>
 </blockquote>
 </div>
 <div class="slide">
 <blockquote>
 <p>“Their team was responsive and professional from start to finish.”</p>
 <footer>— John Smith, Founder of Acme Corp.</footer>
 </blockquote>
 </div>
 <div class="slide">
 <blockquote>
 <p>“We saw a measurable improvement in user engagement after the redesign.”</p>
 <footer>— Emily Chen, CTO of WebTech</footer>
 </blockquote>
 </div>
</div>

แต่ละสไลด์จะครอบคลุมองค์ประกอบ [FLT: 1) สําหรับการปรับให้ถูกต้องและเข้าถึงได้ดีขึ้น คลาส จะกําหนดว่าสไลด์ไหนที่มองเห็นได้ในปัจจุบัน โครงสร้างนี้สามารถทนทานหรือสร้างโดยไดนามิคจากข้อมูลที่ดึงผ่านจาวาสคริปต์ได้

การ ไต่ ขึ้น ไป ใน ภาพ สไลด์

สะอาด และทันสมัย CSS ทําให้แน่ใจว่าแถบเลื่อนดูเงาขัดและแสดงได้ดี ใช้ บนกล่อง และควบคุมการมองภาพ ด้วยความทึบแสงและการเปลี่ยนแปลง

.slider {
 position: relative;
 width: 100%;
 max-width: 800px;
 margin: 0 auto;
 overflow: hidden;
 border-radius: 12px;
 box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

.slide {
 display: none;
 padding: 2rem;
 background: #f9f9f9;
 transition: opacity 0.5s ease-in-out;
}

.slide.active {
 display: block;
}

blockquote {
 margin: 0;
 padding: 0;
 font-style: italic;
 line-height: 1.6;
}

blockquote footer {
 margin-top: 0.75rem;
 font-style: normal;
 font-weight: 600;
 color: #333;
}

.slider-nav {
 display: flex;
 justify-content: center;
 gap: 0.5rem;
 margin-top: 1rem;
}

.slider-nav button {
 width: 12px;
 height: 12px;
 border-radius: 50%;
 border: 2px solid #007acc;
 background: transparent;
 cursor: pointer;
 transition: background 0.3s;
}

.slider-nav button.active-dot {
 background: #007acc;
}

การใช้ [FLT: 5] การสลับคลาสนั้นง่ายแต่จะขาดการปรับเปลี่ยนอย่างราบรื่นระหว่างสไลด์ สําหรับแถบเลื่อนการผลิต ให้พิจารณาใช้ตัวเลื่อนการผลิตแบบ CSS หรือตําแหน่งสัมบูรณ์เพื่อสร้างแนวขวางหรือสไลด์ภาพ แนวทางด้านบนนั้นใช้ได้ดีสําหรับการตั้งค่าน้อยที่สุด

ฟังก์ชันของจาวาสคริปต์หลัก

กลไก จาวาสคริปต์ สามารถ ทํา การ เลื่อน การ หมุน, การ นํา ร่อง จุด, และ การ ติด ต่อ กับ ผู้ ใช้ ได้.

const slides = document.querySelectorAll('.slide');
const dots = document.querySelectorAll('.slider-nav button');
let currentIndex = 0;
let intervalId;

function showSlide(index) {
 slides.forEach((slide, i) => {
 slide.classList.toggle('active', i === index);
 });
 dots.forEach((dot, i) => {
 dot.classList.toggle('active-dot', i === index);
 });
 currentIndex = index;
}

function nextSlide() {
 const next = (currentIndex + 1) % slides.length;
 showSlide(next);
}

function startAutoPlay(interval = 5000) {
 intervalId = setInterval(nextSlide, interval);
}

function stopAutoPlay() {
 clearInterval(intervalId);
}

// Dot click handler
dots.forEach((dot, index) => {
 dot.addEventListener('click', () => {
 stopAutoPlay();
 showSlide(index);
 startAutoPlay(4000); // restart with shorter delay after manual interaction
 });
});

// Initialize
showSlide(0);
startAutoPlay(5000);

รหัสนี้ให้การหมุนอัตโนมัติและใช้แบบดอตเพื่อนําร่อง สําหรับเพิ่มความง่ายในการใช้งาน ให้หยุดการเล่นอัตโนมัติ เมื่อผู้ใช้เคลื่อนตัวอยู่เหนือแถบเลื่อนหรือโต้ตอบกับจุด

กําลังเพิ่มปุ่มก่อนหน้า / ปุ่มถัดไป

ผู้ใช้หลายคนคาดหวังว่าลูกศรจะควบคุมการเรียกดูด้วยตนเอง เพิ่มปุ่ม 2 ปุ่มภายในหรือนอกคอนเทนเนอร์

<button class="prev" aria-label="Previous testimonial">❮</button>
<button class="next" aria-label="Next testimonial">❯</button>
.prev, .next {
 position: absolute;
 top: 50%;
 transform: translateY(-50%);
 background: rgba(0,0,0,0.5);
 color: white;
 border: none;
 padding: 0.75rem;
 cursor: pointer;
 z-index: 10;
}

.prev { left: 0; border-radius: 0 4px 4px 0; }
.next { right: 0; border-radius: 4px 0 0 4px; }
document.querySelector('.prev').addEventListener('click', () => {
 const prev = (currentIndex - 1 + slides.length) % slides.length;
 showSlide(prev);
});

document.querySelector('.next').addEventListener('click', nextSlide);

การดึงข้อมูลการทดสอบจาก directus

ใน CMS ไร้หัว เช่น discus ข้อมูลเชิงลบจะถูกเก็บไว้ในคอลเลกชัน (เช่น [FLT: 10]) พร้อมทุ่ง [FLT: 11] [FLT: 12] [FLT: 12]] [FLT: 13] และเพิ่มภาพ ดูเพิ่มที่เนื้อหาเพิ่มเติมเพิ่มเติม. กํากับ จาวาสคริปต์ SDK หรือธรรมดา , และทําการแปลข้อมูลแบบไดเรชัน (FLT: 13).

async function fetchTestimonials() {
 try {
 const response = await fetch('https://your-project.directus.app/items/Testimonials');
 if (!response.ok) throw new Error('Network response was not ok');
 const data = await response.json();
 return data.data;
 } catch (error) {
 console.error('Failed to fetch testimonials:', error);
 return [];
 }
}

async function renderSlider() {
 const testimonials = await fetchTestimonials();
 const sliderContainer = document.getElementById('testimonial-slider');
 const navContainer = document.querySelector('.slider-nav');

 // Clear existing content
 sliderContainer.innerHTML = '';
 navContainer.innerHTML = '';

 testimonials.forEach((item, index) => {
 const slide = document.createElement('div');
 slide.className = `slide${index === 0 ? ' active' : ''}`;
 slide.innerHTML = `
 <blockquote>
 <p>“${item.quote}”</p>
 <footer>— ${item.client_name}${item.client_title ? `, ${item.client_title}` : ''}</footer>
 </blockquote>
 `;
 sliderContainer.appendChild(slide);

 const dot = document.createElement('button');
 dot.className = index === 0 ? 'active-dot' : '';
 dot.setAttribute('aria-label', `Go to testimonial ${index + 1}`);
 dot.addEventListener('click', () => {
 stopAutoPlay();
 showSlide(index);
 startAutoPlay(4000);
 });
 navContainer.appendChild(dot);
 });

 // Re‑initialize variables and start
 slides = document.querySelectorAll('.slide');
 dots = document.querySelectorAll('.slider-nav button');
 showSlide(0);
 startAutoPlay();
}

วิธีการนี้ จะเก็บค่าสถิติของคุณไว้ในค่ากํากับที่ถูกต้อง และปรับแถบเลื่อนให้อัตโนมัติ เมื่อไรก็ตามที่มีการเปลี่ยนแปลงของเนื้อหา โปรดพิจารณาการกดแป้นพิมพ์ API หรือใช้ dictionus SDK ด้วยพารามิเตอร์การค้นหาเพื่อกรองหรือเรียงลําดับ

การพิจารณาการช่วยใช้งาน

แถบเลื่อนที่แยกไม่ได้ ทําให้แน่ใจว่าผู้ใช้ทั้งหมดสามารถโต้ตอบกับ access ของคุณ

  • ตั้งค่า [FLT: 16] บนตู้คอนเทนเนอร์ และ[FLT: 17] (มีการผิดพลาดสําหรับผู้อ่านจอ).
  • เพิ่ม [FLT: 18] เพื่อควบคุมปุ่ม (เช่น "ประกาศผลล่าสุด", "ประกาศอิสรภาพ").
  • ใช้ บนสไลด์ที่มองไม่เห็น
  • การหมุนการเล่นอัตโนมัติบนโฟกัสหรือการยก, และให้ปุ่มเล่น/ชั่วคราว
  • เปิดใช้งานการนําทางแป้นพิมพ์: ปุ่มลูกศรเคลื่อนระหว่างการเลื่อนหน้าภาพ และโฟกัสของแท็บ จะถูกจัดการภายในวิดเจ็ต

สําหรับดําน้ําลึก อ้างถึง [FLT: 0] WAI เว็บไซต์เข้าถึง ดูมนตรีบน Carulusels.

การรองรับการออกแบบแบบอัตโนมัติ

แถบเลื่อนแบบทดสอบ ต้องทํางานตลอดทั้งอุปกรณ์มือถือ, แผ่นแท็บ, และเดสก์ท็อป ใช้หน่วยสัมพัทธ์ และชุดสื่อเพื่อปรับรูปแบบการพับ, ขนาดแบบอักษร, และผังวางนําทาง

@media (max-width: 600px) {
 .slide {
 padding: 1.25rem;
 }
 blockquote {
 font-size: 0.95rem;
 }
 .slider-nav button {
 width: 10px;
 height: 10px;
 }
}

สําหรับการสนับสนุนการจับสัญญาณ ให้ใช้กลไกการจับข้อมูล โดยใช้ [FLT: 21] และ[FLT: 22] ผู้ฟังเหตุการณ์ ติดตามการเรียกของ delta และเรียก [FLT: 23] หรือ ตามเส้นทางการขโมยข้อมูล (FTT:24)

let touchStartX = 0;
let touchEndX = 0;

sliderContainer.addEventListener('touchstart', (e) => {
 touchStartX = e.changedTouches[0].screenX;
});

sliderContainer.addEventListener('touchend', (e) => {
 touchEndX = e.changedTouches[0].screenX;
 handleSwipe();
});

function handleSwipe() {
 const diff = touchStartX - touchEndX;
 if (Math.abs(diff) > 50) {
 if (diff > 0) nextSlide();
 else {
 const prev = (currentIndex - 1 + slides.length) % slides.length;
 showSlide(prev);
 }
 }
}

การตั้งแนวร่วม

เพื่อ มั่นใจ ว่า ผู้ ใช้ จะ มี ประสบการณ์ ที่ เรียบ ง่าย จง ทํา ตาม คํา แนะ นํา ต่อ ไป นี้:

  • Lazyzaload รูปภาพใด ๆ (เช่น, ลูกข่าย sceadshots) โดยใช้ [FLT: 26].
  • จํากัดจํานวนของการจัดการ DOM เมื่อมีการสร้างแถบเลื่อนจากข้อมูล API ให้ใช้ชิ้นส่วนเอกสารเพื่อทําการใส่แผ่นสไลด์
  • เครื่องมือดูเหตุการณ์หรือการลดเสียงเตือนเพื่อป้องกันการขัดเสียงจากผังแป้นพิมพ์
  • ลดความขึ้นต่อกันของจาวาสคริปต์ – แถบแถบเลื่อนไม่ต้องการ j สืบค้นหรือไลบรารีที่หนัก
  • ใช้ [FLT: 27] สําหรับภาพเคลื่อนไหวเรียบ หากใช้ CSS ทรานสเลชัน

สําหรับ ดู การ จัด เว็บ เว็บ กํากับ การ แปล ภาพ ของ เว็บ เว็บ เว็บ กราฟิก [FLT: 1).

การ เข้า ร่วม กับ กระบวนการ ก่อ สร้าง

เมื่อมีการใช้ dictionus เป็น CMS แบบไม่มีหัว รหัสแถบเลื่อนของคุณอาจเป็นส่วนหนึ่งของโครงการที่มีขนาดใหญ่กว่า ที่สร้างด้วยคอมแพ็กแบบเว็บแพ็ค, Vite, หรือ Parcel เก็บจาวาสคริปต์และ CSS ของคุณไว้ในแฟ้มแยกแยกและนําเข้ามันมายังโปรแกรมหลักของคุณ สําหรับเว็บไซต์แบบตายตัว หรือ WordPres คุณสามารถแทรกโค้ดได้โดยตรง หลังจาก API เรียก

หากคุณกําลังใช้ [FLT: 0] Drectuts จาวาสคริปต์ SDK[[FLT: 1], การตรวจสอบและจัดการข้อผิดพลาดจะกลายเป็นง่ายขึ้น:

import { createDirectus, rest, readItems } from '@directus/sdk';

const client = createDirectus('https://your-project.directus.app').with(rest());

async function getTestimonials() {
 const testimonials = await client.request(readItems('Testimonials', {
 sort: ['sort'],
 limit: 10
 }));
 return testimonials;
}

วิธี นี้ ยัง ทํา ให้ คุณ มี ความ ปลอด ภัย ถ้า ใช้ ชนิด พิมพ์.

ทดสอบตัวเลื่อนของคุณ

หลังการพัฒนา ให้ทดสอบผ่านเว็บเบราว์เซอร์หลาย ๆ ตัว (Crome, Firefox, Saveri, Edge) และอุปกรณ์ตรวจสอบว่าคีย์บอร์ดควบคุมการทํางานได้, การเล่นอัตโนมัติหยุดการทํางานบนเมาส์ และแถบเลื่อนจะลดลงอย่างนุ่มนวลเมื่อจาวาสคริปต์ถูกปิดใช้งาน ใช้ตัวเรียกใช้งานเดเวอส์ของเบราว์เซอร์เพื่อจําลองความเร็วเครือข่ายที่ช้า และยืนยันการโหลดแบบเร็ว ๆ นี้

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

รูปแบบการวน

การสร้างแถบเลื่อนที่กําหนดเองโดยใช้จาวาสคริปต์นั้น ให้อิสระแก่คุณในการออกแบบส่วนประกอบเฉพาะ, เข้าถึง, และดําเนินการที่ผนวกเข้ากับโปรแกรมกํากับภาษาท้องถิ่นได้โดยการสร้างโครงสร้างแบบ HTML แบบ secmantual, การตกแต่งด้วย CSS ที่สะอาด, การใช้จาวาสคริปต์อย่างรัดกุม, และการดึงข้อมูลสดจาก audiscus คุณสร้างคุณสมบัติที่สร้างสรรค์อย่างสร้างสรรค์ที่ได้รับความเชื่อถือร่วมกับผู้ชมของคุณ เทคนิคที่ครอบคลุมที่นี่ – ลูกศร, การสัมผัส, การเข้าถึง, และการแสดง – โครงสร้างของเนื้อหาใดๆ ที่คุณอาจต้องการในอนาคต