javascriptの命令で画面をスクロールさせる

javascript

javascriptの命令で画面をスクロールさせる

スクロールの設定について、試します。
以前の投稿(https://propansystem.net/blog/2022/04/26/post-7753/)では、スクロール位置を取得しましたが、
今回は、スクロールをjavascript側から設定する方法です。

スクロールを設定するメソッドは次のものがあります。
scrollTo()
scrollBy()

scrollToメソッドはスクロールの初期位置を設定します。
また、scrollByメソッドは、現在のスクロール位置から加算して、スクロール位置を設定します。

実際に次のようなサンプルを書いて試してみます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1" style="width: 5000px; height: 5000px;">
	<div style="position:fixed; top:10px;">
		<div>X座標:<span id="x1"></span></div>
		<div>Y座標:<span id="y1"></span></div>
	</div>
</div>

<script type="text/javascript">
// ウィンドウ取得
let window_test = window;

// スクロールされたらメソッド「output_log_scroll」を呼ぶ
window.addEventListener('scroll', output_log_scroll);

// スクロール位置を強制指定
scrollTo(100, 200);

// スクロールの現在位置から、座標を加算する(この場合は、500, 700の位置になる)
scrollBy(400, 500);

// スクロール位置(X座標、Y座標)を出力する
function output_log_scroll()
{
	// x座標出力用の要素を取得
	let x1 = document.getElementById("x1");
	let y1 = document.getElementById("y1"); 

	// 要素を更新する
	x1.innerHTML = window_test.pageXOffset;
	y1.innerHTML = window_test.pageYOffset;

	console.log("window pageXOffset -> " + window_test.pageXOffset);
	console.log("window pageYOffset -> " + window_test.pageYOffset);
}

</script>

</body>
</html>

サーバ上のHTMLはこちら(test1.html)

上記のソースと、実際にブラウザでアクセスしてみるとわかりますが、
最初のscrollToメソッドで「横方向に100、縦方向に200」のスクロール位置を決定していますが、
次のscrollByメソッドで「横方向に400、縦方向に500」のスクロール位置を決定していので
結果的に「横方向に500、縦方向に700」のスクロール位置になっていることがわかります。

動的にスクロール位置を変更する

次に、スクロール位置を動的に変更してみます。
実際の開発では利用機会はほとんどありませんが、ここでは実験的な意味をこめてサンプルを書いてみます。

サンプルHTMLは次のように書きました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1" style="width: 5000px; height: 5000px;">
	<div style="position:fixed; top:10px;">
		<div>X座標:<span id="x1"></span></div>
		<div>Y座標:<span id="y1"></span></div>
	</div>
</div>

<script type="text/javascript">
// ウィンドウ取得
let window_test = window;

// スクロールされたらメソッド「output_log_scroll」を呼ぶ
window.addEventListener('scroll', output_log_scroll);

// 50ミリ秒ごとに、スクロール値を加算していく
setInterval(function() {scrollBy(10, 25)}, 50);

// スクロール位置(X座標、Y座標)を出力する
function output_log_scroll()
{
	// x座標出力用の要素を取得
	let x1 = document.getElementById("x1");
	let y1 = document.getElementById("y1");

	// 要素を更新する
	x1.innerHTML = window_test.pageXOffset;
	y1.innerHTML = window_test.pageYOffset;

	console.log("window pageXOffset -> " + window_test.pageXOffset);
	console.log("window pageYOffset -> " + window_test.pageYOffset);
}

</script>

</body>
</html>

サーバ上のHTMLはこちら(test2.html)

画面にアクセスしてみると、50ミリ秒ごとに

scrollBy(10, 25)

を実行して、スクロール位置が変化することがわかります。

ただし、画面上にあるdivタグ

<div id="test1" style="width: 5000px; height: 5000px;">
	<div style="position:fixed; top:10px;">
		<div>X座標:<span id="x1"></span></div>
		<div>Y座標:<span id="y1"></span></div>
	</div>
</div>

は、もともと幅、高さが5000pxのサイズを指定している為、スクロール位置がそれ以上になると、見た目の変化は止まります。

では、スクロールの加算が止まったあとは、setIntervalの命令はどうなるか、ログを入れて試してみます。

setInterval(function() {scrollBy(10, 25)}, 50);

let scroll_counter = 0;
setInterval(function() {
	scroll_counter++;
	console.log('scroll_counter -> ' + scroll_counter);
	scrollBy(10, 25)
}, 50);

という形で書き換えて実行してみます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1" style="width: 5000px; height: 5000px;">
	<div style="position:fixed; top:10px;">
		<div>X座標:<span id="x1"></span></div>
		<div>Y座標:<span id="y1"></span></div>
	</div>
</div>

<script type="text/javascript">
// ウィンドウ取得
let window_test = window;
let scroll_counter = 0;

// スクロールされたらメソッド「output_log_scroll」を呼ぶ
window.addEventListener('scroll', output_log_scroll);

// 50ミリ秒ごとに、スクロール値を加算していく
setInterval(function() {
	scroll_counter++;
	console.log('scroll_counter -> ' + scroll_counter);
	scrollBy(10, 25)
}, 50);

// スクロール位置(X座標、Y座標)を出力する
function output_log_scroll()
{
	// x座標出力用の要素を取得
	let x1 = document.getElementById("x1");
	let y1 = document.getElementById("y1"); 

	// 要素を更新する
	x1.innerHTML = window_test.pageXOffset;
	y1.innerHTML = window_test.pageYOffset;

	console.log("window pageXOffset -> " + window_test.pageXOffset);
	console.log("window pageYOffset -> " + window_test.pageYOffset);
}

</script>

</body>
</html>

サーバ上のHTMLはこちら(test3.html)

実際に画面アクセスして開発者ツールでログを確認すると、スクロールの動きが止まってもscrollByの命令は実行され続けています。
サンプルとして実験的に書いたプログラムなので、実際の開発ではこのようなことはしませんが、スクロールメソッドとその挙動を確認する為に試してみました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です