見出し画像

パララックス効果。前に書いたコード。これだと1個1個増減しないといけない。数が合わないと動かない。のでGPTにお願いしてみた。

$(function () {

//各背景画像のtopの位置を取得
var bg1_top = $(".parallax_box01").offset().top;
var bg2_top = $(".parallax_box02").offset().top;

// ウィンドウの高さを取得
var win_h = $(window).height();

//各背景画像を動かすタイミングの位置を計算
var start_bg1 = bg1_top - win_h;
var start_bg2 = bg2_top - win_h;

$(window).scroll(function () {

//スクロール量
var y = $(this).scrollTop();

if(navigator.userAgent.match(/(iPhone|iPad|iPod)/i)){
//iosは何もしない
if (y >= start_bg1) {
    $('.parallax_box01').css('background-position-y');
}

if (y > start_bg2) {
    $('.parallax_box02').css('background-position-y');
}
    
} else {

//スクロール量と動かすタイミング位置を判定した場合は背景画像を動かす
if (y >= start_bg1) {
    $('.parallax_box01').css('background-position-y', -(y - bg1_top) * 0.1 + 'px');
}

if (y > start_bg2) {
    $('.parallax_box02').css('background-position-y', -(y - bg2_top) * 0.1 + 'px');
}
    
    }
});

});

改定(1)

//各背景画像のtopの位置を取得
var bg_top = $(".bg_parallax").offset().top;
// ウィンドウの高さを取得
var win_h = $(window).height();

//各背景画像を動かすタイミングの位置を計算
var start_bg = bg_top - win_h;

$(window).scroll(function () {

//スクロール量
var y = $(this).scrollTop();

if(navigator.userAgent.match(/(iPhone|iPad|iPod)/i)){
    //iosは何もしない
} else {
    //スクロール量と動かすタイミング位置を判定した場合は背景画像を動かす
    if (y >= start_bg) {
        $('.bg_parallax').css('background-position-y', -(y - bg_top) * 0.1 + 'px');
    }
}

});

不発。発火せず。

$(function() {
var $parallaxBoxes = $('.parallax_box');
$(window).scroll(function() {
var scrollTop = $(window).scrollTop();
$parallaxBoxes.each(function() {
var $el = $(this);
var top = $el.offset().top;
var height = $el.outerHeight();
if (top + height < scrollTop || top > scrollTop + $(window).height()) {
return;
}
var yBgPosition = Math.round((top - scrollTop) * 0.2);
$el.css('background-position', 'center ' + yBgPosition + 'px');
});
});
});

見事に解消!!!

そして、以前からいくつかのブラウザで動きがカクる現象があり、それも修正をお願いしたら、

$(function() {
  var $parallaxBoxes = $('.parallax_box');
  var rafId;
  
  function updateParallax() {
    var scrollTop = $(window).scrollTop();
    $parallaxBoxes.each(function() {
      var $el = $(this);
      var top = $el.offset().top;
      var height = $el.outerHeight();
      if (top + height < scrollTop || top > scrollTop + $(window).height()) {
        return;
      }
      var yBgPosition = Math.round((top - scrollTop) * 0.2);
      $el.css('background-position', 'center ' + yBgPosition + 'px');
    });
    
    // 再帰的に呼び出し、スムーズなアニメーションを実現する
    rafId = requestAnimationFrame(updateParallax);
  }
  
  // 初回実行
  updateParallax();
  
  // ウィンドウがリサイズされた場合、パララックスの値を再計算する
  $(window).on('resize', function() {
    $parallaxBoxes.each(function() {
      $(this).css('background-position', 'center top');
    });
  });
  
  // ウィンドウが非表示になる場合、requestAnimationFrameの処理を停止する
  $(window).on('blur', function() {
    cancelAnimationFrame(rafId);
  });
});

気持ち、細かな動きに解消。

全工程、検証を入れて10分程度。
実際のコード書き出しは10秒程度。
ヤバいな。デザイナーには嬉しい革命だな。

<div class="bg_parallax parallax_box parallax_box_01"></div>
<div class="bg_parallax parallax_box parallax_box_02"></div>
.bg_parallax {
  position: fixed;
  width: 100%;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
  z-index: -1;
}

.parallax_box_01 {
  background-image: url('path/to/image1.jpg');
}

.parallax_box_02 {
  background-image: url('path/to/image2.jpg');
}

phpのエラーとか、タグの閉め忘れとか、ここに放り込んだら瞬殺で特定してくれる。
文句も言わず、黙々と改定してくれる。

よかったらスキお願いします m(_ _)m

この記事が気に入ったらサポートをしてみませんか?