어떻게 만들지?: 이미지 비교 슬라이더
이미지 두 장을 비교하는 슬라이더를 만들어보세요.
이미지 비교 슬라이더
파란 슬라이더를 이동하여 이미지를 비교할 수 있습니다:

이미지 비교 슬라이더 생성
제1단계 - HTML 추가:
<div class="img-comp-container"> <div class="img-comp-img"> <img src="img_snow.jpg" width="300" height="200"> </div> <div class="img-comp-img img-comp-overlay"> <img src="img_forest.jpg" width="300" height="200"> </div> </div>
제2단계 - CSS 추가:
컨테이너는 "상대적" 정위치를 가져야 합니다。
* {box-sizing: border-box;} .img-comp-container { position: relative; height: 200px; /* 이미지 높이와 같아야 합니다 */ } .img-comp-img { position: absolute; width: auto; height: auto; overflow: hidden; } .img-comp-img img { display: block; vertical-align: middle; } .img-comp-slider { position: absolute; z-index: 9; cursor: ew-resize; /* 슬라이더 외관 설정: */ width: 40px; height: 40px; background-color: #2196F3; opacity: 0.7; border-radius: 50%; }
제3단계 - JavaScript 추가:
function initComparisons() { var x, i; /* "overlay" 클래스를 가진 모든 요소를 찾습니다: */ x = document.getElementsByClassName("img-comp-overlay"); for (i = 0; i < x.length; i++) { /* 각 "覆盖" 요소에 대해 한 번씩 실행합니다: compareImages 함수를 실행할 때, "覆盖" 요소를 매개변수로 전달합니다: */ compareImages(x[i]); } function compareImages(img) { var slider, img, clicked = 0, w, h; /* img 요소의 너비와 높이를 가져옵니다 */ w = img.offsetWidth; h = img.offsetHeight; /* img 요소의 너비를 50%로 설정합니다: */ img.style.width = (w / 2) + "px"; /* 슬라이더를 생성합니다: */ slider = document.createElement("DIV"); slider.setAttribute("class", "img-comp-slider"); /* 슬라이더를 삽입합니다: */ img.parentElement.insertBefore(slider, img); /* 슬라이더를 중앙에 배치합니다: */ slider.style.top = (h / 2) - (slider.offsetHeight / 2) + "px"; slider.style.left = (w / 2) - (slider.offsetWidth / 2) + "px"; /* 마우스 버튼을 눌렀을 때 실행되는 함수: */ slider.addEventListener("mousedown", slideReady); /* 마우스 버튼을 떼었을 때 실행되는 다른 함수: */ window.addEventListener("mouseup", slideFinish); /* 또는 터치(터치스크린에 대해서는: ) */ slider.addEventListener("touchstart", slideReady); /* 그리고 해제(터치스크린에 대해서는: ) */ window.addEventListener("touchend", slideFinish); function slideReady(e) { /* 이미지에서 움직일 때 발생할 수 있는 모든 다른 작업을 방지합니다: */ e.preventDefault(); /* 슬라이더가 클릭되었으며 이동을 준비하고 있습니다: */ clicked = 1; /* 슬라이더가 움직일 때 실행되는 함수: */ window.addEventListener("mousemove", slideMove); window.addEventListener("touchmove", slideMove); } function slideFinish() { /* 슬라이더를 더 이상 클릭하지 않습니다: */ clicked = 0; } function slideMove(e) { var pos; /* 슬라이더를 더 이상 클릭하지 않으면 이 함수를 종료합니다: */ if (clicked == 0) return false; /* 커서의 x 위치 가져오기: */ pos = getCursorPos(e) /* 슬라이더가 이미지 밖에 위치하지 않도록 합니다: */ if (pos < 0) pos = 0; if (pos > w) pos = w; /* 커서 위치에 따라 캡션 이미지 크기를 조정하는 함수 실행: */ slide(pos); } function getCursorPos(e) { var a, x = 0; e = (e.changedTouches) ? e.changedTouches[0] : e; /* 이미지의 x 위치 가져오기: */ a = img.getBoundingClientRect(); /* 마우스 커서가 이미지에 대한 x 좌표 계산: */ x = e.pageX - a.left; /* 페이지 롤링을 고려합니다: */ x = x - window.pageXOffset; return x; } function slide(x) { /* 이미지 크기 조정: */ img.style.width = x + "px"; /* 슬라이더 위치 설정: */ slider.style.left = img.offsetWidth - (slider.offsetWidth / 2) + "px"; } } }
第四歩 - 스크립트 실행:
<script> initComparisons(); </script>