外部CSSにてbodyに背景画像を指定しています。
body {
background-image: url(../img/base/●●.png);
background-repeat: no-repeat;
background-position-x:50%;
background-position-y:1%;
}
スクロールして一番下まで行った際に背景画像の「y軸」の高さを変更したいのです。
下に行ったタイミングでいきなり変わるのではなく、徐々に変わっていき、最終的に一番下までスクロールしたら希望の高さに変更できる形が理想です。
jquery等で可能でしょうか?
よろしくお願いいたします。
こんな感じでできます。
(function() { var is_support_only_y; var X_POS = "50%"; function set_background_position() { var b_ = document.body; var y_pos_r = b_.scrollTop / (b_.scrollHeight - b_.clientHeight); var y = b_.scrollTop + b_.clientHeight / 2 - (b_.clientHeight / 2) * y_pos_r; if (is_support_only_y) { b_.style.backgroundPositionY = y + "px"; } else { b_.style.backgroundPosition = X_POS + " " + y + "px"; } } window.addEventListener("DOMContentLoaded", function() { is_support_only_y = document.body.style.backgroundPositionY; if (is_support_only_y) { b_.style.backgroundPositionX = X_POS; } window.addEventListener("scroll", set_background_position); set_background_position(); }); })();
Firefox では、background-position-y を単独で指定できるのは、まだ先のようなので、その判定も入れています。
実際にどのように位置を調整したいかが質問の文面からは分からなかったので、初期状態では背景画像の頭がページの真ん中に来ていて、最後までスクロールすると表示領域の頭にくるように、スクロールした量に合わせて徐々に移動するようにしています。
こんな感じの動作です。
https://jsfiddle.net/03q2z5xv/embedded/result/
実際にやりたい位置調整は、初期状態ではトップにある背景画像が、最後までスクロールすると、30pxほど下に下がるというものです。
一行、変更してます。
(function() { var is_support_only_y; var X_POS = "50%"; function set_background_position() { var b_ = document.body; var y_pos_r = b_.scrollTop / (b_.scrollHeight - b_.clientHeight); var y = b_.scrollTop + 30 * y_pos_r; // ★ここを変えました if (is_support_only_y) { b_.style.backgroundPositionY = y + "px"; } else { b_.style.backgroundPosition = X_POS + " " + y + "px"; } } window.addEventListener("DOMContentLoaded", function() { is_support_only_y = document.body.style.backgroundPositionY; if (is_support_only_y) { b_.style.backgroundPositionX = X_POS; } window.addEventListener("scroll", set_background_position); set_background_position(); }); })();
jsfiddle の方でも、変更したものを確認してみました。
https://jsfiddle.net/x5ahwgzp/embedded/result/