【マウスオーバー】画像の縦スクロール表示

縦長の画像をマウスオーバーすると表示していない部分を縦スクロールで表示します。マウスアウトで画像の一番上に戻ります。

プラグインを利用した画像スクロールは下記の記事をご参照ください。

htmlのコードは下記になります。
上記のブラグインとは違い、縦長の画像のみを配置します。

<div class="hover_image_wrap">
	<div class="hover_image">
		<a href="https://www.yahoo.co.jp/" target="_blank" class="img_link">
			<img src="yahoo-scroll.jpg" alt="">
		</a>
		<p class="caption_txt">
			<a href="https://www.yahoo.co.jp/" target="_blank">Yahoo! JAPAN</a>
		</p>
	</div>
	<div class="hover_image">
		<a href="https://www.msn.com/ja-jp" target="_blank" class="img_link">
			<img src="msn-scroll.jpg" alt="">
		</a>
		<p class="caption_txt">
			<a href="https://www.msn.com/ja-jp" target="_blank">MSN</a>
		</p>
	</div>
</div>

続いてCSSのコードです。
aタグは横幅と高さを固定にします。またoverflow: hiddenを設定して縦長の画像がはみ出す部分は非表示にします。画像にはposigion: relativeを設定します。jQueryでCSSのtopを操作して画像をスクロールするため、posigion: relativeを設定しておかないと動きません。

.hover_image_wrap {
	display: flex;
	justify-content: space-between;
	margin: 0;
}
.hover_image {
	width: 302px;
}
.hover_image a.img_link {
	display: block;
	width: 302px;
	height: 202px;
	border: 1px solid #dddddd;
	overflow: hidden;
}
.hover_image img {
	posigion: relative;
	vertical-align: top;
}
.caption_txt {
	margin: 10px 0 0;
	padding: 0;
	text-align: center;
}
@media screen and (max-width: 630px) {
	.hover_image_wrap {
		flex-direction: column;
	}
	.hover_image {
		margin: 0 auto 2em;
	}
	.hover_image:last-child {
		margin: 0 auto;
	}
}

最後にjQueryのコードです。
画像はanimateを利用してスクロールさせます。durationはマウスオーバー時のスクロールは長く、マウスアウト時のスクロールは短く設定しています。easingは省略しているため初期値のswingが適用されます。

$(function() {
	$(".hover_image img").hover(
	function(){
		var imgWidth = $(this).width();
		var imgHeight = $(this).height();
		$(this).stop(true).animate({'top': -imgHeight+200},imgHeight*5);
	},
	function(){
		var imgWidth = $(this).width();
		var imgHeight = $(this).height();
		$(this).stop(true).animate({'top': 0},imgHeight*2);
	});
});
タイトルとURLをコピーしました