การใช้หน้าจอโครงกระดูกใน React

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ ในบทช่วยสอนนี้ คุณจะได้เรียนรู้ว่า UI หน้าจอโครงกระดูกคืออะไร และไลบรารีหน้าจอโครงกระดูกบางประเภท พร้อมด้วยข้อดีและข้อเสีย เราจะสร้าง UI หน้าจอโครงกระดูกเหมือน YouTube โดยใช้ React Loading Skeleton จากนั้นคุณสามารถทดลองด้วยตัวคุณเองด้วยแพ็คเกจ React หน้าจอโครงกระดูกที่คุณเลือก

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

ในบทความนี้ เราจะไม่พูดถึงพื้นฐานของ CSS React หรือไวยากรณ์ JavaScript ดังนั้นคุณไม่จำเป็นต้องเป็นผู้เชี่ยวชาญในภาษาใดภาษาหนึ่งเหล่านี้เพื่อปฏิบัติตาม

ความแตกต่างระหว่างตัวโหลดและหน้าจอโครงกระดูก UI
ความแตกต่างระหว่างตัวโหลดและ UI หน้าจอโครงกระดูก (ตัวอย่างขนาดใหญ่)

ผู้เชี่ยวชาญ UI และ UX สอนเราว่าในขณะที่ผู้ใช้รอให้เนื้อหาโหลดบนหน้า เราควรทำให้พวกเขามีส่วนร่วม

แนวคิดเบื้องหลังการใช้สปินเนอร์เพื่อดึงดูดผู้ใช้ก่อนที่จะโหลดเนื้อหานั้นยอดเยี่ยม อย่างไรก็ตาม ผลลัพธ์ที่ได้อาจน้อยกว่าอุดมคติ เนื่องจากผู้ใช้ส่วนใหญ่จะเบื่อที่จะจ้องมองสปินเนอร์ที่เคลื่อนไหวได้เหมือนนาฬิกา Luke Wroblewski อธิบายอย่างละเอียดเกี่ยวกับเรื่องนี้

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

หน้าจอโครงกระดูกคืออะไร?

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

หน้าจอโครงกระดูกเป็นโครงลวดของหน้าโดยพื้นฐานแล้ว โดยมีกล่องตัวยึดสำหรับข้อความและรูปภาพ

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

หน้าจอโครงกระดูกมีความพิเศษอย่างไร?

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

  • การเลียนแบบเลย์เอาต์ของหน้านั้นง่ายกว่าด้วยหน้าจอโครงกระดูก
  • เนื้อหาโหลดไปเรื่อย ๆ (ไม่ทั้งหมดในคราวเดียว)

หน้าจอโครงกระดูกเรียกอีกอย่างว่า:

  • องค์ประกอบผี
  • ตัวยึดตำแหน่งเนื้อหา
  • ตัวโหลดเนื้อหา

Blockchain.com, YouTube, Facebook, Medium และบริษัทเทคโนโลยีรายใหญ่อื่นๆ แสดงหน้าจอโครงกระดูกในขณะที่โหลดเนื้อหาเพื่อเพิ่ม UX

Blockchain.com

UI หน้าจอโครงกระดูก Blockchain.com
สถานะการโหลดบางส่วนของ Blockchain.com (สังเกตการใช้โครงกระดูกในการวิเคราะห์กราฟ) (ตัวอย่างขนาดใหญ่)

ปานกลาง

หน้าจอโครงกระดูกขนาดกลาง UI
UI โครงกระดูกขนาดกลาง (ตัวอย่างขนาดใหญ่)

LinkedIn

UI หน้าจอโครงกระดูก LinkedIn
สถานะการโหลดหน้าแรกของ LinkedIn ในปี 2018 (ตัวอย่างขนาดใหญ่)

ประเภทของหน้าจอโครงกระดูก

หน้าจอโครงกระดูกมีหลายประเภท สิ่งสำคัญคือตัวยึดข้อความและตัวยึดตำแหน่งรูปภาพ (หรือสี)

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

ตัวยึดตำแหน่งสีสร้างได้ยากขึ้นเนื่องจากต้องการรายละเอียดเกี่ยวกับเนื้อหา

แพ็คเกจยอดนิยมบางตัวทำให้การใช้งานหน้าจอโครงกระดูกในเว็บแอพง่ายขึ้น ลองพิจารณาทั้งสองอย่างอย่างละเอียดยิ่งขึ้น:

  • ตัวยึดปฏิกิริยา
  • React กำลังโหลดโครงกระดูก

เราจะพิจารณาข้อดีและข้อเสียของแต่ละแพ็คเกจ ก่อนพิจารณาว่าจะใช้แอปพลิเคชันใด

ตัวยึดปฏิกิริยา

ข้อดี

  • คอมโพเนนต์ตัวยึดตำแหน่งจะใช้เพื่อสร้าง UI โครงร่างแบบกำหนดเอง
  • รองรับแอนิเมชั่นพัลส์ (เช่น เอฟเฟกต์การเคลื่อนไหวบนองค์ประกอบ)
  • มันมาพร้อมกับ API แบบอิงส่วนประกอบ

ข้อเสีย

  • ส่วนประกอบโครงกระดูกได้รับการดูแลแยกจากกัน ดังนั้นการอัปเดตรูปแบบของส่วนประกอบจึงจำเป็นต้องอัปเดตส่วนประกอบโครงกระดูกด้วย
  • เส้นการเรียนรู้ไม่เป็นเส้นตรงเนื่องจากมีองค์ประกอบหลายอย่างสำหรับความต้องการที่แตกต่างกัน

ต่อไปนี้คือตัวอย่างของส่วนประกอบโครงกระดูกโดยใช้แพ็คเกจ react-placeholder :

 import { TextBlock, RectShape } from 'react-placeholder/lib/placeholders'; import ReactPlaceholder from 'react-placeholder'; const GhostPlaceholder = () => ( <div className='my-placeholder'> <RectShape color='gray' style={{width: 25, height: 70}} /> <TextBlock rows={6} color='blue'/> </div> ); <ReactPlaceholder ready={ready} customPlaceholder={<GhostPlaceholder />}> <MyComponent /> </ReactPlaceholder>

การนำเข้า TextBlock และ RectShape จาก react-placeholder/lib/placeholder และ ReactPlaceholder จาก react-placeholder เราได้สร้างองค์ประกอบการทำงานชื่อ GhostPlaceholder GhostPlaceholder มี div และภายใน div เราใช้องค์ประกอบ RectShape ซึ่งอธิบายขนาดของสี่เหลี่ยมผืนผ้า ส่งผ่านค่าของสีใดๆ และกำหนดรูปแบบของสี่เหลี่ยมผืนผ้า

ต่อไป เราใช้คอมโพเนนต์ TextBlock เพื่อตั้งค่าสำหรับแถวและสี คอมโพเนนต์ TextBlock กำหนดจำนวนแถวและสีของข้อความ

เราส่ง MyComponent เป็นลูกขององค์ประกอบ ReactPlaceholder ซึ่งได้รับ ready และองค์ประกอบ GhostPlaceholder เป็นค่าสำหรับอุปกรณ์ประกอบฉาก ready และ customPlaceholder

MyComponent จะโหลดเมื่อ UI หน้าจอโครงกระดูกแสดงขึ้น

หากต้องการเรียนรู้เพิ่มเติม โปรดตรวจสอบเอกสารประกอบ

React กำลังโหลดโครงกระดูก

ข้อดี

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

ข้อเสีย

  • ง่ายต่อการนำไปใช้สำหรับ UI โครงกระดูกธรรมดา แต่ซับซ้อนสำหรับโครงกระดูกที่ซับซ้อนมากขึ้น
  • การมีส่วนประกอบโครงกระดูกแยกต่างหากจะทำให้ดูแลรักษายากขึ้นเมื่อ UI และรูปแบบเปลี่ยนไป

ต่อไปนี้เป็นตัวอย่างของ React Loading Skeleton:

 import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; const SkeletonComponent = () => ( <SkeletonTheme color="#202020" highlightColor="#444"> <section> <Skeleton height={50} width={50} /> </section> </SkeletonTheme> );

เราได้นำเข้า Skeleton และ SkeletonTheme จากไลบรารี react-loading-skeleton จากนั้นจึงสร้างส่วนประกอบที่ใช้งานได้ซึ่งแสดงส่วนประกอบ SkeletonTheme โดยมี color และ hightlightColor ไลต์สีเป็นคุณสมบัติ

คอมโพเนนต์ SkeletonTheme ใช้สำหรับการจัดธีม (เช่น การเพิ่มเอฟเฟ็กต์สีให้กับ UI โครงกระดูก)

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

การสร้าง UI หน้าจอโครงกระดูกเหมือน YouTube

มาสร้างหน้าจอโครงกระดูกเหมือน YouTube โดยใช้ React Loading Skeleton เพื่อแสดงให้เห็นว่า UI โครงกระดูกทำงานอย่างไร

ตั้งค่า React

วิธีที่ง่ายที่สุดในการตั้งค่า React คือการใช้ Create React App ซึ่งเป็น "วิธีที่ได้รับการสนับสนุนอย่างเป็นทางการในการสร้างแอปพลิเคชัน React หน้าเดียว มันมีการตั้งค่าการสร้างที่ทันสมัยโดยไม่มีการกำหนดค่า”

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

 npx create-react-app skeleton-screens && cd skeleton-screens

เมื่อการติดตั้งเสร็จสิ้น ให้เริ่มเซิร์ฟเวอร์ React โดยเรียกใช้ npm start :

แอพตอบโต้ - แอพตอบโต้นั่งร้าน
หน้าต้อนรับ React (ตัวอย่างขนาดใหญ่)

สร้าง UI ของ YouTube โดยไม่ต้องใช้หน้าจอโครงกระดูก

ขั้นแรก ให้ป้อนข้อมูลจำลองของ YouTube โดยปกติแล้วจะใช้ปลายทางจริงแทนข้อมูลจำลอง แต่ในบทช่วยสอนนี้ เราจะใช้ข้อมูลจำลอง

สร้างไฟล์ในโฟลเดอร์ src/ ของคุณและตั้งชื่อว่า data.js เพิ่มโค้ดต่อไปนี้ลงไป

 const dummyData= [ { section: "Recommended", channel: "CNN", items: [ { id: "fDObf2AeAP4", image: "https://img.youtube.com/vi/fDObf2AeAP4/maxresdefault.jpg", title: "75 million Americans ordered to stay home", views: "1.9M views", published: "3 days agos" }, { id: "3AzIgAa0Cm8", image: "https://img.youtube.com/vi/3AzIgAa0Cm8/maxresdefault.jpg", title: "Gupta: The truth about using chloroquine to fight coronavirus pandemic", views: "128K views", published: "4 hours ago" }, { id: "92B37aXykYw", image: "https://img.youtube.com/vi/92B37aXykYw/maxresdefault.jpg", title: "Willie Jones STUNS Simon Cowell In Pitch Perfect Performance of 'Your Man'!", views: "2.47 million views", published: "1 month ago" }, { id: "J6rVaFzOEP8", image: "https://img.youtube.com/vi/J6rVaFzOEP8/maxresdefault.jpg", title: "Guide To Becoming A Self-Taught Software Developer", views: "104K views", published: "17 days ago" }, { id: "Wbk8ZrfU3EM", image: "https://img.youtube.com/vi/Wbk8ZrfU3EM/maxresdefault.jpg", title: "Tom Hanks and Rita Wilson test positive for coronavirus", views: "600k views", published: "1 week ago" }, { id: "ikHpFgKJax8", image: "https://img.youtube.com/vi/ikHpFgKJax8/maxresdefault.jpg", title: "Faces Of Africa- The Jerry Rawlings story", views: "2.3 million views", published: "2014" } ] }, { section: "Breaking News", channel: "CGTN America", items: [ { id: "tRLDPy1A8pI", image: "https://img.youtube.com/vi/tRLDPy1A8pI/maxresdefault.jpg", title: "Is Trump blaming China for COVID-19? You decide.", views: "876k views", published: "9 days ago" }, { id: "2ulH1R9hlG8", image: "https://img.youtube.com/vi/2ulH1R9hlG8/maxresdefault.jpg", title: "Journalist still goes to office during pandemic, see her daily routine", views: "873 views", published: "3 hours ago" }, { id: "TkfQ9MaIgU", image: "https://img.youtube.com/vi/_TkfQ9MaIgU/maxresdefault.jpg", title: "How are small businesses going to survive the economic downturn of the COVID-19 era?", views: "283 views", published: "4 day ago" } ] } ]; export default dummyData;

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

ต่อไป มาสร้าง UI ของ YouTube กัน เราจะมีสามองค์ประกอบ:

Card เก็บรายละเอียดของภาพขนาดย่อ ชื่อเรื่อง จำนวนการดู วันที่เผยแพร่ และช่องของวิดีโอ
CardList ส่งคืนไพ่ทั้งหมดติดต่อกัน
App ติดตั้งอ็อบเจ็กต์ dummyData ของเรา โหลด UI โครงกระดูกเป็นเวลาสองวินาที และส่งคืนคอมโพเนนต์ CardList

ภายในโฟลเดอร์ src ของคุณ ให้สร้างโฟลเดอร์และตั้งชื่อเป็น components ภายในโฟลเดอร์ components ให้สร้างไฟล์ Card.js เพิ่มรหัสต่อไปนี้ลงไป:

 import React from "react"; const Card = ({ item, channel }) => { return ( <li className="card"> <a href={`https://www.youtube.com/watch?v=${item.id}`} target="_blank" rel="noopener noreferrer" className="card-link" > <img src={item.image} alt={item.title} className="card-image" /> <img src={item.image} alt={item.title} className="channel-image" /> <h4 className="card-title">{item.title}</h4> <p className="card-channel"> <i>{channel}</i> </p> <div className="card-metrics"> {item.views} • {item.published} </div> </a> </li> ); }; export default Card;

เราได้สร้างองค์ประกอบ Card ข้างในนั้นเรานำเข้า React จาก react และเราได้แยกโครงสร้าง item และอุปกรณ์ channel ฉากเพื่อให้สามารถใช้ข้ามองค์ประกอบ Card ได้ ส่วนประกอบรายการ Card แต่ละรายการที่แสดงวิดีโอหนึ่งรายการจะแสดงภาพขนาดย่อ จำนวนการดู วันที่เผยแพร่ และชื่อ

ส่วนประกอบรายการการ์ด

ภายในโฟลเดอร์ components ให้สร้างไฟล์ CardList.js และเพิ่มโค้ดต่อไปนี้ลงไป:

 import React from "react"; import Card from "./Card"; const CardList = ({ list }) => { return ( <ul className="list"> {list.items.map((item, index) => { return <Card key={index} item={item} channel={list.channel} />; })} </ul> ); }; export default CardList;

ในองค์ประกอบนี้ เราได้นำเข้าส่วนประกอบ Card ที่เราสร้างขึ้น การ์ดยอมรับ item และอุปกรณ์ประกอบฉาก channel ที่เราได้รับโดยการทำแผนที่ผ่าน list.items จากนั้นเราจะส่งออกองค์ประกอบนี้เป็น CardList เนื่องจากเราจะใช้งานองค์ประกอบนี้ในองค์ประกอบ App ของเรา

หมายเหตุ : อาร์เรย์รายการที่ถูกแมปในคอมโพเนนต์นี้คืออาร์เรย์ของอ็อบเจ็กต์ใน dummyData ของเรา

ส่วนประกอบของแอป

ภายในไฟล์ app.js ในไดเร็กทอรี src/ ให้ลบโค้ดที่มีอยู่และเพิ่มสิ่งต่อไปนี้ลงไป

 import React, { useState, useEffect } from "react"; import "./App.css"; import dummyData from "./data"; import CardList from "./components/CardList"; const App = () => { const [videos, setVideos] = useState([]); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); const timer = setTimeout(() => { setVideos(dummyData); setLoading(false); }, 5000); return () => clearTimeout(timer); }, []); return ( <div className="App"> { videos.map((list, index) => { return ( <section key={index}> <h2 className="section-title">{list.section}</h2> <CardList list={list} /> <hr /> </section> ); })} </div> ); }; export default App;

ในองค์ประกอบนี้ เราได้นำเข้า useState และ useEffect hooks ควบคู่ไปกับ React และไฟล์อื่น ๆ ที่เราสร้างขึ้นและที่จำเป็นในองค์ประกอบ App

เนื่องจากข้อมูลของเราเป็นข้อมูลจำลอง เราจึงต้องจำลองข้อมูลดังกล่าวเหมือนกับข้อมูล API โดยการโหลดเนื้อหาหลังจากหมดเวลาสองวินาที โดยใช้เมธอด setTimeout ของ JavaScript

ถัดไป ในองค์ประกอบ App เราสร้างสถานะวิดีโอ และตั้งค่าสถานะเป็นอาร์เรย์ว่างโดยใช้ useState

ในการโหลดข้อมูลจำลอง เราจะใช้ useEffect hook ในเบ็ดของเรา เราสร้างตัวจับเวลาตัวแปรที่มีฟังก์ชัน setTimeout () ภายในฟังก์ชัน เราตั้งค่าสถานะวิดีโอของเราเป็นวัตถุ dummyData ของเรา และเรามั่นใจว่าข้อมูลจะโหลดหลังจากผ่านไปสองวินาที และสุดท้าย เราจะยกเลิกตัวจับเวลาขณะยกเลิกการต่อเชื่อม

สุดท้าย เราแมปผ่านสถานะวิดีโอของเราและส่งคืนองค์ประกอบส่วนที่มีส่วน list-section และองค์ประกอบ CardList พร้อมรายการอุปกรณ์ประกอบฉาก

การเพิ่ม CSS

จนถึงขณะนี้ เราใช้คลาสจำนวนมากโดยไม่มี CSS จริง ภายในโฟลเดอร์ src ให้ลบทุกอย่างใน App.css และแทนที่ด้วยรหัสต่อไปนี้

 .App { max-width: 960px; margin: 0 auto; font-size: 16px; } .list { display: flex; justify-content: space-between; flex-wrap: wrap; list-style: none; padding: 0; } .section-title { margin-top: 30px; } .card { width: calc(33% - 10px); margin: 20px 0; } .card-link { color: inherit; text-decoration: none; } .card-image { width: 100%; } .channel-image { border-radius: 100%; padding: 0, 10px, 0, 0; width: 40px; height: 40px; } .card-title { margin-top: 10px; margin-bottom: 0; } .card-channel { margin-top: 5px; margin-bottom: 5px; font-size: 14px; } /* Tablets */ @media (max-width: 1000px) { .App { max-width: 600px; } .card { width: calc(50% - 22px); } } /* Mobiles \*/ @media (max-width: 640px) { .App { max-width: 100%; padding: 0 15px; } .card { width: 100%; } }

มาดูกันว่า UI ของ YouTube จะเป็นอย่างไรหากไม่มีหน้าจอโครงกระดูก คุณจะเห็นได้ว่าเมื่อโหลดหน้า หน้าจอสีขาวจะปรากฏขึ้นเป็นเวลาสองวินาที จากนั้นข้อมูลจะโหลดขึ้นทันที

UI เหมือน YouTube ที่ไม่มีหน้าจอโครงกระดูก
UI ที่เหมือน YouTube โดยไม่มีหน้าจอโครงกระดูก (ตัวอย่างขนาดใหญ่)

การใช้ React Loading Skeleton

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

มาดูเหตุผลสองสามข้อว่าทำไมเราถึงเลือก React Loading Skeleton มากกว่าเหตุผลอื่นๆ

ธีม

React Loading Skeleton รองรับชุดรูปแบบ ดังนั้น คุณสามารถเปลี่ยนสีของส่วนประกอบโครงกระดูกทั้งหมดได้อย่างง่ายดายโดยใช้ SkeletonTheme และส่งผ่านค่าไปยัง props สี

ด้านล่างนี้เป็นตัวอย่างที่แสดงวิธีการทำงาน:

 import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; <SkeletonTheme color="grey" highlightColor="#444"> <p> <Skeleton height={250} width={300} count={1} /> </p> </SkeletonTheme> <SkeletonTheme color="#990" highlightColor="#550"> <p> <Skeleton height={250} width={300} count={1} /> </p> </SkeletonTheme> 
เอฟเฟกต์ชุดรูปแบบในการดำเนินการ
ใช้งานเอฟเฟกต์ธีม (ตัวอย่างขนาดใหญ่)

ระยะเวลา

นอกจากอุปกรณ์ height width และ color แล้ว เรายังสามารถระบุอุปกรณ์ประกอบฉาก duration ได้อีกด้วย

 <Skeleton duration={2} />

ระยะเวลาเริ่มต้นเป็น 1.2 สิ่งนี้กำหนดระยะเวลาในการทำแอนิเมชั่นโครงกระดูกหนึ่งรอบ

หากต้องการเรียนรู้เพิ่มเติม โปรดดูเอกสารประกอบ

การนำ UI หน้าจอโครงกระดูกไปใช้

ตอนนี้เราจะติดตั้ง react-loading-skeleton รันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณเพื่อติดตั้งแพ็คเกจ:

 npm install react-loading-skeleton

ส่วนประกอบโครงกระดูก

มาสร้างองค์ประกอบโครงกระดูกสำหรับข้อมูลวิดีโอของเรากัน ภายในโฟลเดอร์ components ของเรา ให้สร้างไฟล์ SkeletonCard.js และเพิ่มรหัสต่อไปนี้:

 import React from "react"; import Skeleton from "react-loading-skeleton"; const SkeletonCard = () => { return ( <section> <h2 className="section-title"> <Skeleton height={30} width={300} /> </h2> <ul className="list"> {Array(9) .fill() .map((item, index) => ( <li className="card" key={index}> <Skeleton height={180} /> <h4 className="card-title"> <Skeleton circle={true} height={50} width={50} />  <Skeleton height={36} width={`80%`} /> </h4> <p className="card-channel"> <Skeleton width={`60%`} /> </p> <div className="card-metrics"> <Skeleton width={`90%`} /> </div> </li> ))} </ul> </section> ); }; export default SkeletonCard;

เราได้สร้างรายการที่ไม่เรียงลำดับ ข้างในเราใช้ Array.fill() เนื่องจากเรามีข้อมูลจำลอง 9 รายการ เราจึงใช้ Array.fill() เพื่อวนซ้ำตามความยาวของอ็อบเจกต์ items ของเรา และเติมข้อมูลนั้นโดยไม่มีค่าดัชนี ดังนั้นจึงทำให้อาร์เรย์ ว่างเปล่า ดูเอกสารประกอบ Array.fill เพื่อเรียนรู้วิธีการทำงาน

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

ในที่นี้ height หมายถึงความยาวของสี่เหลี่ยมผืนผ้าโครงกระดูก และ width หมายถึงความกว้าง ในขณะที่ circle สร้างส่วนที่โค้งมนของ UI โครงกระดูก

React Loading Skeleton มาพร้อมกับแอนิเมชั่น Pulse เริ่มต้น ซึ่งทำให้สะดวก คุณสามารถสร้างแอนิเมชั่น Pulse ให้เหมาะกับโปรเจ็กต์ของคุณได้ แต่ถ้าคุณถามฉัน ฉันจะยึดตามค่าเริ่มต้น

ในที่สุดก็มีซอร์สโค้ดที่สมบูรณ์แล้ว

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

มาดูผลลัพธ์ของเรากัน:

UI ที่เหมือน YouTube พร้อมหน้าจอโครงกระดูก UI
UI โครงกระดูกเหมือน YouTube ของเรา (ตัวอย่างขนาดใหญ่)

บทสรุป

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

หากคุณไม่สะดวกใจกับแพ็คเกจใด ๆ ที่เราได้ดูไปแล้ว คุณสามารถสร้าง UI โครงกระดูกของคุณเองโดยสร้างสี่เหลี่ยมและวงกลมที่เลียนแบบเค้าโครงของหน้า

โปรดแบ่งปันความคิดเห็นและประสบการณ์ของคุณในส่วนความคิดเห็นด้านล่าง ฉันชอบที่จะเห็นสิ่งที่คุณคิด!

repo ที่สนับสนุนสำหรับบทความนี้มีอยู่ใน Github

อ้างอิง

  • “ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับหน้าจอโครงกระดูก”, Bill Chung, UX Collective
  • “โครงกระดูกโหลดหน้าด้วยปฏิกิริยา”, Anthony Panagi, Octopus Wealth
  • “หน้าจอโครงกระดูกพร้อม React และ React Native”, Chris Dolphin, Alligator.io
  • “การนำโครงกระดูกไปใช้ในการตอบสนอง”, Adrian Bece, DEV