javascript Issue12:20180620 - no74。ナビゲーションメニュー改修

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Issue12:20180620 - no74。ナビゲーションメニュー改修相关的知识,希望对你有一定的参考价值。

// AMPから飛んできた時の処理
(function($){
  var hash = location.hash;
  var globalNavHeight = $('#js-globalNav').outerHeight();

  // PR文の位置に移動して続きを展開する
  if (hash.match('#amp-pr-more')) {
    var $prObj = $('#js-shop-pr');
    var $prMoreBtn = $prObj.find('.js-textExpand__button');

    if ($prMoreBtn.length <= 0) return;

    location.hash = '_';
    window.scrollTo(0, $prObj.offset().top - globalNavHeight);

    $prObj.find('.js-textExpand--visible').removeClass('js-textExpand--add');
    $prObj.find('.js-textExpand--hidden').show();
    $prMoreBtn.remove();
  }

  // ページ内リンクの位置を追従グロナビ分調整
  if (hash.match('#shopDetail')) {
    var changeOffset = function changeOffset() {
      var $shopDetailObj = $('#shopDetail');

      if ($shopDetailObj.length <= 0) return;

      location.hash = '_';
      window.scrollTo(0, $shopDetailObj.offset().top - globalNavHeight);
    }

    var checkAjax = function checkAjax() {
      var $surroundingShop = $('#js-inductionSurroundingShopList-component');
      var $surroundingShopObj = $surroundingShop.find('.section');

      // ajax DOMの生成を確認
      if ($surroundingShopObj.length) {
        changeOffset();
      } else {
        if ($surroundingShop.hasClass('js-abopt-nodata')) {
          changeOffset();
          return;
        }

        setTimeout(function() {
          checkAjax();
        }, 100);
      }
    }

    checkAjax();
  }
})(jQuery);
import { addClass, removeClass } from '../utils/DOM'

// スクロール位置
const getScrollPosition = () => {
  const posY = document.documentElement.scrollTop || document.body.scrollTop
  return posY
}

// ページ内のelmのY座標
const getTargetPositionY = elm => {
  const rect = elm.getBoundingClientRect()
  return rect.top + pageYOffset
}

// /plan 以下かどうかのURL判別
const isPlan = () => location.href.indexOf('/plan') !== -1

export default function globalNavSticky() {
  // /plan 以下のページでは追従させないので処理しない
  if (isPlan()) return

  const globalNav = document.getElementById('js-globalNav')

  if (!globalNav) return

  const globalNavWrapper = document.getElementById('js-globalNav-wrapper')
  const globalNavWrapperHeight = globalNavWrapper.getBoundingClientRect().height
  const globalNavposY = getTargetPositionY(globalNav)

  // fixさせない親要素で高さをキープして、グロナビ本体のfix時にガクンとさせない
  globalNavWrapper.style.height = `${globalNavWrapperHeight}px`

  addEventListener('scroll', () => {
    if (getScrollPosition() >= globalNavposY) {
      addClass(globalNav, '-sticky')
    } else {
      removeClass(globalNav, '-sticky')
    }
  })
}

以上是关于javascript Issue12:20180620 - no74。ナビゲーションメニュー改修的主要内容,如果未能解决你的问题,请参考以下文章

201806-05 mesos安装--软件源安装

201806月总结1.md

javascript Issue84 - 20190620电话导线改善

javascript LRM_BP_issue

javascript Issue302:20171018 - 动画商品トライアル

javascript Issue319:20171101 - バナーとモーダルとAMP