이미지에 마우스를 올렸을 때 긴 이미지를 상단으로 이동시키는 효과를 CSS3의 transform 속성을 이용해 만들어보겠습니다. 일반적으로 이런 효과는 gif 애니메이션 기능을 이용해 만드는데 그러자면 이미지의 용량도 늘어나고 이미지 품질도 좋지 않습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Made with Thimble</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="image-container">
<img src="004.jpg">
</div>
</body>
</html>
head 태그에 style.css 파일을 추가하고 body에 이미지를 추가한 다음 .image-container로 감싸줍니다.
.image-container {
width: 600px;
height: 400px;
overflow: hidden;
border: 1px solid #ddd;
border-radius: 7px;
position: relative;
}
style.css에 위처럼 이미지의 폭과 높이를 지정해줍니다. 이미지는 상하로 긴 이미지를 사용하므로 박스로 제한하기 위해 height 속성을 사용했고 이 범위를 벗어나는 것을 보이지 않도록 overflow:hidden을 사용했습니다.
.image-container img {
max-width: 100%;
transition: transform 5s;
-moz-transition: transform 5s;
-ms-transition: transform 5s;
-webkit-transition: transform 5s;
}
style.css에 위처럼 추가해줍니다. 이미지의 최대폭을 100%로 해주고 transition 속성을 이용해 5초동안 작동되도록 합니다.
위와 같은 모양이 됩니다.
.image-container:hover img {
transform: translateY(-744px);
}
이미지 컨테이너에 마우스를 올렸을 때 Y축으로 이동되도록 설정합니다. 이동의 크기는 744px인데 이것의 의미는 이미지의 높이인 1144px에서 박스의 높이인 400px을 뺀 수치입니다. 그래야 이미지 하단의 끝에서 정지하게 됩니다. 주의 해야 할 것은 박스로 제한 했으므로 원래의 이미지 크기가 아닌 제한된 박스내에서의 이미지 크기를 대상으로 해야 합니다. 원래의 이미지 크기는 1177x2245px인데 박스의 폭을 600px로 줄였으므로 이에 따라 높이도 1144px로 줄어듭니다.
여기까지 하고 이미지에 마우스를 올리면 이미지가 상단으로 이동하는 것을 볼 수 있습니다.
여기에 추가적으로 이미지를 자동으로 상하로 이동해도록 해보겠습니다. 시간을 설정해 위로 이동한 다음 다시 아래로 이동하는 것을 반복하는 것입니다. 시간 설정은 간단하게 제이쿼리를 이용합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Made with Thimble</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="image-container">
<img src="004.jpg">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script src="script-1.js"></script>
</body>
</html>
</body> 태그 바로 위에 제이쿼리 파일을 추가하고 코드를 입력할 script-1.js 파일도 추가해줍니다.
jQuery(document).ready(function($){
setInterval(function(){
$('.image-container').toggleClass('slide');
},6000);
});
script-1.js 파일에 위처럼 입력해줍니다. .image-container에 대해서 .slide라는 클래스 선택자를 추가 및 제거(toggle)해주는데 6000밀리초 동안 반복해줍니다. 이전에 5초동안 이미지가 애니메이션 되도록 설정했으므로 1초 지난다음 이동하도록 하기 위해 6초로 한 것입니다.
.image-container:hover img, .slide img {
transform: translateY(-744px);
}
마우스를 올렸을 때 이미지를 이동하도록 한 이전의 코드에 .slide img를 추가해줍니다. .image-container에 slide가 추가되면 Y축으로 744 픽셀 이동하게 되고 6초 후에는 .slide 클래스가 제거되므로 원래의 위치로 돌아가게 됩니다.
지금까지의 기능을 응용하면 상하 이동이 아닌 좌우 이동도 만들 수 있습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Made with Thimble</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="image-container">
<img src="004.jpg">
</div>
<div class="image-container2">
<img src="panorama.jpg">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script src="script-1.js"></script>
</body>
</html>
이미지를 추가하고 박스(.image-container2)를 만들어줍니다.
.image-container2 {
width: 600px;
height: 400px;
overflow: hidden;
border: 1px solid #ddd;
border-radius: 7px;
position: relative;
}
.image-container2 img {
max-height: 100%;
transition: transform 5s;
-moz-transition: transform 5s;
-ms-transition: transform 5s;
-webkit-transition: transform 5s;
}
.image-container2:hover img, .slide2 img {
transform: translateX(-996px);
}
스타일시트는 위와 같습니다. 콘테이너는 이전과 같으나 이미지에 대해서 max-height를 추가해줘야 이미지가 상하로 꽉 차게 됩니다. transform은 X축으로 이동하며 이동 거리는 이미지 폭 1596-600=966px입니다.
jQuery(document).ready(function($){
setInterval(function(){
$('.image-container').toggleClass('slide');
$('.image-container2').toggleClass('slide2');
},6000);
});
제이쿼리에도 추가했습니다.
https://thimbleprojects.org/martian36/252740/