[ JavaScript ] 모듈을 더욱 효율적으로 (this 사용) - 이미지 크기 바꾸기
2024. 5. 19. 18:08ㆍ· FRONT-END/└ JS
환경 : Visual Studio Code
[ 주요 코드 ]
<script type="text/javascript">
window.onload = function(){
//버튼을 클릭하면 버튼에 맞는 이미지 변환을 구현
var sizeButtons = document.querySelectorAll(".btn-size");
for(var i=0; i<sizeButtons.length; i++) {
sizeButtons[i].addEventListener("click", function(){
//this는 이벤트가 발생한 주인공
var image = document.querySelector(".dummy");
image.style.width = this.dataset.size + "px";
image.style.height = this.dataset.size + "px";
});
}
};
</script>
</head>
<body>
<div class="container w-500">
<div class="cell center">
<!--
필요하다면 태그에 커스텀 속성을 작성할 수 있다
단, 원래 있던 속성과의 구분을 위해 data- 로 시작하게 만든다
(dataset이라고 부름)
-->
<button class="btn positive btn-size" data-size="150">작게</button>
<button class="btn positive btn-size" data-size="300">보통</button>
<button class="btn positive btn-size" data-size="450">크게</button>
</div>
<hr>
<div class="cell center">
<img class="dummy" src="../css/image/hachiware.jpg" width="300px" height="300px">
</div>
</div>
</body>
</html>
(+) dataset을 통해 사이즈의 값을 가져오게끔 해줄 수 있다. = 커스텀 속성 작성
(+) 단, 원래 있던 속성과의 구분을 위해 data- 로 시작!
(+) 각각의 태그에 설정해준 동일한 이름(data-size)의 값을 다르게 하여, 이 값만 불러오도록 설정
(+) dataset의 값을 스트링으로 가져온다!
[ 전체 코드 ]
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Javascript 예제</title>
<!-- 구글 폰트 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet">
<!-- 내가 구현할 스타일 -->
<link rel="stylesheet" type="text/css" href="../css/commons.css">
<link rel="stylesheet" type="text/css" href="../css/test.css">
<!-- font awesome 아이콘 CDN -->
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
.dummy {
transition-property: width, height;
transition-duration: 0.1s;
transition-timing-function: ease-out;
}
</style>
<!-- javascript를 의도적으로 head 자리에 배치해서 가장 먼저 실행되도록 구현 -->
<script type="text/javascript">
window.onload = function(){
//버튼을 클릭하면 버튼에 맞는 이미지 변환을 구현
var sizeButtons = document.querySelectorAll(".btn-size");
for(var i=0; i<sizeButtons.length; i++) {
sizeButtons[i].addEventListener("click", function(){
//this는 이벤트가 발생한 주인공
var image = document.querySelector(".dummy");
image.style.width = this.dataset.size + "px";
image.style.height = this.dataset.size + "px";
});
}
};
</script>
</head>
<body>
<div class="container w-500">
<div class="cell center">
<h1>이미지 크기 조절</h1>
</div>
<div class="cell center">
<!--
필요하다면 태그에 커스텀 속성을 작성할 수 있다
단, 원래 있던 속성과의 구분을 위해 data- 로 시작하게 만든다
(dataset이라고 부름)
-->
<button class="btn positive btn-size" data-size="150">작게</button>
<button class="btn positive btn-size" data-size="300">보통</button>
<button class="btn positive btn-size" data-size="450">크게</button>
</div>
<hr>
<div class="cell center">
<img class="dummy" src="../css/image/hachiware.jpg" width="300px" height="300px">
</div>
</div>
</body>
</html>
개인 공부 기록용입니다:)
728x90
'· FRONT-END > └ JS' 카테고리의 다른 글
[ JavaScript ] 모듈을 더욱 효율적으로 (this 사용) - 같은 틀을 여러 번 반복해서 사용하기 (0) | 2024.05.21 |
---|---|
[ JavaScript ] 모듈을 더욱 효율적으로 (this 사용) - 폰트 크기 바꾸기 (1) | 2024.05.20 |
[ JavaScript ] 모듈을 더욱 효율적으로 (this 사용) - 폰트 색상 바꾸기 (0) | 2024.05.17 |
[ JavaScript ] 체크박스 제어 (0) | 2024.05.16 |
[ JavaScript ] 모듈형 자바스크립트 (1) | 2024.05.15 |