ស្លាយរូបភាព (Image Slider) គឺជាវិធីដ៏ល្អមួយដើម្បីធ្វើឲ្យគេហទំព័រ Blogger របស់អ្នកមានភាពទាក់ទាញភ្នែក និងមានអន្តរកម្ម។ ទោះបីជាអ្នកចង់បង្ហាញរូបភាពច្រើន, បង្ហាញអត្ថបទពិសេសៗ, ឬបង្កើតគេហទំព័រដើមដែលគួរឱ្យចាប់អារម្មណ៍ក៏ដោយ ស្លាយរូបភាពអាចជួយបាន។
នៅក្នុងការណែនាំនេះ យើងនឹងបង្ហាញអ្នកពីជំហាននានាក្នុងការបន្ថែមស្លាយរូបភាពទៅកាន់គេហទំព័រ Blogger របស់អ្នក ដោយប្រើ HTML, CSS, និង JavaScript សាមញ្ញៗ។
- ចូលទៅកាន់ផ្នែក ប្លង់ (Layout)។
- ចុច បន្ថែមឧបករណ៍ (Add a Gadget) នៅក្នុងតំបន់ដែលអ្នកចង់បន្ថែមស្លាយ (ឧទាហរណ៍៖ ទំព័រដើមរបស់អ្នក)។
- ជ្រើសរើសយក HTML/JavaScript gadget។
ស្លាយរូបភាពទី១
ដំបូង អ្នកត្រូវ បង្ហោះ (Upload) រូបភាពទាំងអស់ដែលមានទំហំ និងសមាមាត្រ (aspect ratio) ដូចគ្នា ហើយ ចម្លង (Copy) យក URL ប្រភពរូបភាព (Image Source URLs) ទាំងអស់នោះដាក់ក្នុងឯកសារ notepad ណាមួយ។
ខាងក្រោមនេះគឺជាកូដដែលអ្នកត្រូវចម្លង និងបិទភ្ជាប់ទៅក្នុងឧបករណ៍ HTML/JavaScript។ សូមប្រាកដថាបាន ផ្លាស់ប្តូរ URLs រូបភាព នៅទីនេះ។ អ្នកក៏អាចបន្ថែម តំណ (Links) ទៅកាន់រូបភាពនីមួយៗផងដែរ ដូច្នេះវានឹងបើកទៅកាន់អត្ថបទដែលត្រូវគ្នា ឬតំណណាមួយដែលអ្នកបានកំណត់សម្រាប់រូបភាពទាំងនោះ។
<div class="wrapper"> <button id="left" class="arrow prev" aria-label="Previous"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15 18L9 12L15 6" stroke="#343F4F" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> <div class="carousel"> <a href="https://example.com/link1" target="_blank"> <img src="https://images.pexels.com/photos/3561009/pexels-photo-3561009.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 1" draggable="false"> </a> <a href="https://example.com/link2" target="_blank"> <img src="https://images.pexels.com/photos/4348404/pexels-photo-4348404.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 2" draggable="false"> </a> <a href="https://example.com/link3" target="_blank"> <img src="https://images.pexels.com/photos/933255/pexels-photo-933255.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 3" draggable="false"> </a> <a href="https://example.com/link4" target="_blank"> <img src="https://images.pexels.com/photos/123335/pexels-photo-123335.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 4" draggable="false"> </a> </div> <button id="right" class="arrow next" aria-label="Next"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 18L15 12L9 6" stroke="#343F4F" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> </div> <style> .wrapper { display: flex; max-width: 1200px; position: relative; } .arrow { display: flex; justify-content: center; align-items: center; top: 50%; height: 44px; width: 44px; background: #fff; cursor: pointer; position: absolute; transform: translateY(-50%); border-radius: 50%; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); transition: background 0.2s, transform 0.1s linear; border: none; } .arrow.prev { left: -22px; display: none; z-index: 50; } .arrow.next { right: -22px; } .arrow svg { width: 15px; height: 15px; } .arrow:hover { background: #f2f2f2; } .arrow:active { transform: translateY(-50%) scale(0.9); } .carousel { font-size: 0px; cursor: pointer; overflow: hidden; white-space: nowrap; scroll-behavior: smooth; } .carousel.dragging { cursor: grab; scroll-behavior: auto; } .carousel.dragging img { pointer-events: none; } .carousel img { height: 340px; object-fit: cover; user-select: none; width: calc(100% / 3); box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px; } .carousel a { margin-left: 14px; } .carousel a:first-child { margin-left: 0; } @media screen and (max-width: 900px) { .carousel img { width: calc(100% / 2); } } @media screen and (max-width: 550px) { .carousel img { width: 100%; } } </style> <script> const carousel = document.querySelector(".carousel"), firstImg = carousel.querySelectorAll("img")[0], arrowIcons = document.querySelectorAll(".wrapper .arrow"); let isDragStart = false, isDragging = false, prevPageX, prevScrollLeft, positionDiff; const showHideIcons = () => { let scrollWidth = carousel.scrollWidth - carousel.clientWidth; arrowIcons[0].style.display = carousel.scrollLeft == 0 ? "none" : "block"; arrowIcons[1].style.display = carousel.scrollLeft == scrollWidth ? "none" : "block"; }; arrowIcons.forEach(icon => { icon.addEventListener("click", () => { let firstImgWidth = firstImg.clientWidth + 14; carousel.scrollLeft += icon.classList.contains("prev") ? -firstImgWidth : firstImgWidth; setTimeout(() => showHideIcons(), 60); }); }); const autoSlide = () => { if (carousel.scrollLeft - (carousel.scrollWidth - carousel.clientWidth) > -1 || carousel.scrollLeft <= 0) return; positionDiff = Math.abs(positionDiff); let firstImgWidth = firstImg.clientWidth + 14; let valDifference = firstImgWidth - positionDiff; if (carousel.scrollLeft > prevScrollLeft) { carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff; } else { // Scrolling left carousel.scrollLeft -= positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff; } }; const dragStart = (e) => { isDragStart = true; prevPageX = e.pageX || e.touches[0].pageX; prevScrollLeft = carousel.scrollLeft; }; const dragging = (e) => { if (!isDragStart) return; e.preventDefault(); isDragging = true; carousel.classList.add("dragging"); positionDiff = (e.pageX || e.touches[0].pageX) - prevPageX; carousel.scrollLeft = prevScrollLeft - positionDiff; showHideIcons(); }; const dragStop = () => { isDragStart = false; carousel.classList.remove("dragging"); if (!isDragging) return; isDragging = false; autoSlide(); }; carousel.addEventListener("mousedown", dragStart); carousel.addEventListener("touchstart", dragStart); document.addEventListener("mousemove", dragging); carousel.addEventListener("touchmove", dragging); document.addEventListener("mouseup", dragStop); carousel.addEventListener("touchend", dragStop); showHideIcons(); </script>
បន្ទាប់ពីបិទភ្ជាប់កូដរួច ចុចប៊ូតុង រក្សាទុក (Save)។ មើលប្លុករបស់អ្នក ដើម្បីឃើញស្លាយដំណើរការ។
ស្លាយរូបភាពដែលមានការរំកិលដោយស្វ័យប្រវត្តិ (Auto Scroll)
<div class="wrapper"> <button id="left" class="arrow prev" aria-label="Previous"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15 18L9 12L15 6" stroke="#343F4F" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </button> <div class="carousel"> <a href="https://example.com/link1" target="_blank"> <img src="https://images.pexels.com/photos/3561009/pexels-photo-3561009.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 1" draggable="false"> </a> <a href="https://example.com/link2" target="_blank"> <img src="https://images.pexels.com/photos/4348404/pexels-photo-4348404.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 2" draggable="false"> </a> <a href="https://example.com/link3" target="_blank"> <img src="https://images.pexels.com/photos/933255/pexels-photo-933255.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 3" draggable="false"> </a> <a href="https://example.com/link4" target="_blank"> <img src="https://images.pexels.com/photos/123335/pexels-photo-123335.jpeg?auto=compress&cs=tinysrgb&w=600" alt="img 4" draggable="false"> </a> </div> <button id="right" class="arrow next" aria-label="Next"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 18L15 12L9 6" stroke="#343F4F" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </button> </div> <style> .wrapper { display: flex; max-width: 1200px; position: relative; } .arrow { display: flex; justify-content: center; align-items: center; top: 50%; height: 44px; width: 44px; background: #fff; cursor: pointer; position: absolute; transform: translateY(-50%); border-radius: 50%; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); transition: background 0.2s, transform 0.1s linear; border: none; } .arrow.prev { left: -22px; display: none; z-index: 50; } .arrow.next { right: -22px; } .arrow svg { width: 12px; height: 12px; } .arrow:hover { background: #f2f2f2; } .arrow:active { transform: translateY(-50%) scale(0.9); } .carousel { font-size: 0px; cursor: pointer; overflow: hidden; white-space: nowrap; scroll-behavior: smooth; } .carousel.dragging { cursor: grab; scroll-behavior: auto; } .carousel.dragging img { pointer-events: none; } .carousel img { height: 340px; object-fit: cover; user-select: none; width: calc(100% / 3); box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px; } .carousel a { margin-left: 14px; } .carousel a:first-child { margin-left: 0; } @media screen and (max-width: 900px) { .carousel img { width: calc(100% / 2); } } @media screen and (max-width: 550px) { .carousel img { width: 100%; } } </style> <script> const carousel = document.querySelector(".carousel"), firstImg = carousel.querySelectorAll("img")[0], arrowIcons = document.querySelectorAll(".wrapper .arrow"); let isDragStart = false, isDragging = false, prevPageX, prevScrollLeft, positionDiff; let autoScrollInterval; const showHideIcons = () => { let scrollWidth = carousel.scrollWidth - carousel.clientWidth; arrowIcons[0].style.display = carousel.scrollLeft == 0 ? "none" : "flex"; arrowIcons[1].style.display = carousel.scrollLeft == scrollWidth ? "none" : "flex"; }; const startAutoScroll = () => { autoScrollInterval = setInterval(() => { let firstImgWidth = firstImg.clientWidth + 14; carousel.scrollLeft += firstImgWidth; if (carousel.scrollLeft >= carousel.scrollWidth - carousel.clientWidth) { carousel.scrollLeft = 0; } showHideIcons(); }, 3000); }; const stopAutoScroll = () => { clearInterval(autoScrollInterval); }; // Call the startAutoScroll function startAutoScroll(); arrowIcons.forEach(icon => { icon.addEventListener("click", () => { stopAutoScroll(); let firstImgWidth = firstImg.clientWidth + 14; carousel.scrollLeft += icon.classList.contains("prev") ? -firstImgWidth : firstImgWidth; setTimeout(() => showHideIcons(), 60); startAutoScroll(); // Resume auto-scroll after manual scroll }); }); const autoSlide = () => { if (carousel.scrollLeft - (carousel.scrollWidth - carousel.clientWidth) > -1 || carousel.scrollLeft <= 0) return; positionDiff = Math.abs(positionDiff); let firstImgWidth = firstImg.clientWidth + 14; let valDifference = firstImgWidth - positionDiff; if (carousel.scrollLeft > prevScrollLeft) { carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff; } else { carousel.scrollLeft -= positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff; } }; const dragStart = (e) => { stopAutoScroll(); isDragStart = true; prevPageX = e.pageX || e.touches[0].pageX; prevScrollLeft = carousel.scrollLeft; }; const dragging = (e) => { if (!isDragStart) return; e.preventDefault(); isDragging = true; carousel.classList.add("dragging"); positionDiff = (e.pageX || e.touches[0].pageX) - prevPageX; carousel.scrollLeft = prevScrollLeft - positionDiff; showHideIcons(); }; const dragStop = () => { isDragStart = false; carousel.classList.remove("dragging"); if (!isDragging) return; isDragging = false; autoSlide(); startAutoScroll(); }; carousel.addEventListener("mousedown", dragStart); carousel.addEventListener("touchstart", dragStart); document.addEventListener("mousemove", dragging); carousel.addEventListener("touchmove", dragging); document.addEventListener("mouseup", dragStop); carousel.addEventListener("touchend", dragStop); showHideIcons(); </script>
ស្លាយរូបភាពទី២ (រចនាប័ទ្មផ្សេង)
អ្នកអាចប្រើកូដខាងក្រោមដើម្បីបង្កើតស្លាយរូបភាពដូចដែលបង្ហាញក្នុងរូបថតអេក្រង់ខាងក្រោម។
<style> .slider-container { position: relative; max-width: 100%; height: 400px; /* Fixed height for slider */ overflow: hidden; } .slide { display: none; width: 100%; height: 100%; position: relative; } .slider img { width: 100%; height: 100%; object-fit: cover; } .prev, .next { position: absolute; top: 50%; font-size: 18px; color: #fff; background-color: rgba(0, 0, 0, 0.7); width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 50%; transform: translateY(-50%); transition: background-color 0.3s; user-select: none; z-index: 10; } .prev:hover, .next:hover { background-color: rgba(0, 0, 0, 0.9); } .prev { left: 15px; } .next { right: 15px; } .dots { text-align: center; position: absolute; bottom: 15px; width: 100%; z-index: 10; } .dot { height: 14px; width: 14px; margin: 0 6px; background-color: #bbb; border-radius: 50%; display: inline-block; cursor: pointer; transition: background-color 0.3s; } .active, .dot:hover { background-color: #717171; } /* Responsive Styles for Mobile */ @media (max-width: 768px) { .prev, .next { width: 30px; height: 30px; font-size: 14px; } .slider-container { height: 350px; /* Fixed height for Mobile */ } } </style> <div class="slider-container"> <!-- Slide 1 --> <div class="slide"> <a href="https://example.com/page1"><img src="https://images.pexels.com/photos/414974/pexels-photo-414974.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Slide 1"></a> </div> <!-- Slide 2 --> <div class="slide"> <a href="https://example.com/page2"><img src="https://images.pexels.com/photos/325649/pexels-photo-325649.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Slide 2"></a> </div> <!-- Slide 3 --> <div class="slide"> <a href="https://example.com/page3"><img src="https://images.pexels.com/photos/572056/pexels-photo-572056.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Slide 3"></a> </div> <!-- Navigation Buttons --> <a class="prev" onclick="plusSlides(-1)">❮</a> <a class="next" onclick="plusSlides(1)">❯</a> <div class="dots"> <span class="dot" onclick="currentSlide(1)"></span> <span class="dot" onclick="currentSlide(2)"></span> <span class="dot" onclick="currentSlide(3)"></span> </div> </div> <script> let slideIndex = 1; showSlides(slideIndex); function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { let slides = document.getElementsByClassName("slide"); let dots = document.getElementsByClassName("dot"); if (n > slides.length) { slideIndex = 1 } if (n < 1) { slideIndex = slides.length } for (let i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } for (let i = 0; i < dots.length; i++) { dots[i].className = dots[i].className.replace(" active", ""); } slides[slideIndex - 1].style.display = "block"; dots[slideIndex - 1].className += " active"; } setInterval(function() { plusSlides(1); }, 5000); </script>
សេចក្តីសន្និដ្ឋាន
ការបន្ថែមស្លាយរូបភាពទៅកាន់គេហទំព័រ Blogger របស់អ្នកគឺសាមញ្ញ ហើយជួយបង្កើនភាពទាក់ទាញផ្នែករូបរាងរបស់វា។ ដោយគ្រាន់តែប្រើ HTML, CSS, និង JavaScript អ្នកអាចបង្កើតស្លាយដែលមានមុខងារពេញលេញ និងឆ្លើយតប (responsive) បាន។ ឥឡូវនេះ អ្នកអាចបង្ហាញមាតិការបស់អ្នកបានយ៉ាងទាន់សម័យ និងធ្វើឲ្យអ្នកទស្សនាជាប់ចិត្ត!
ប្រសិនបើអ្នកយល់ថាការណែនាំនេះមានប្រយោជន៍ សូមមានអារម្មណ៍សេរីក្នុងការចែករំលែកវាទៅអ្នកដទៃ។ សូមរីករាយជាមួយការសរសេរប្លុក! 😊
No comments
Post a Comment
៙ គោលការណ៍ក្នុងការផ្តល់យោបល់ ៖
1. យោបល់ត្រូវតែសរសេរជាភាសាខ្មែរ តែពាក្យបច្ចេកទេសសរសេរជាភាសាអង់គ្លេស។
2. យោបល់មិនត្រូវលើសពី 1000 តួអក្សរឡើយ។ ការបំបែកយោបល់មិនត្រូវបានអនុញ្ញាតទេ។
3. យោបល់ដែលចាត់ទុកថាជា Spam ឬមានគោលបំណងផ្សព្វផ្សាយពាណិជ្ជកម្មតែមួយមុខ នឹងត្រូវលុប។
4. ការពិភាក្សាអំពីនយោបាយមិនត្រូវបានអនុញ្ញាតនៅលើគេហទំព័រនេះទេ។
5. ការចែករំលែកតំណភ្ជាប់ដែលពាក់ព័ន្ធត្រូវបានអនុញ្ញាត។ តំណភ្ជាប់និងតម្រងពាក្យខ្លះត្រូវបានហាមឃាត់។
6. យោបល់ដែលរអ៊ូរទាំអំពីប្រធានបទនៃការបង្ហោះ ឬប្រភពរបស់វានឹងត្រូវលុប។
7. ការប្រើភាសាប្រមាថក្នុងយោបល់ ឬឈ្មោះអ្នកប្រើប្រាស់នឹងបណ្តាលឱ្យមានការហាមឃាត់។
8. ការវាយប្រហារ/ការបៀតបៀនដោយផ្ទាល់ នឹងបណ្តាលឱ្យមានការហាមឃាត់ភ្លាមៗ។
9. អ្នកសម្របសម្រួលអាចកែប្រែ/លុបយោបល់ដោយមិនចាំបាច់ជូនដំណឹង។