Skip to content

顶部导航栏选中状态

借助 hlx selfPosition 获取路径栏目 id ,并根据 id 来设置导航栏选中状态

ts
const defaultColumnIdMap = [
  // 首页
  // 5007797, // 需要排除掉首页

  // 馆务
  5007799,

  //资讯
  5007804,

  //服务
  5007809,

  //文化
  5007816,

  //法规
  5007817,
];

function getNavigationItem(columnId: number) {
  return document.getElementById(`nav${columnId}`);
}

export function setNavigationActiveByList(
  checkColumnId: number | number[],
  columnIdMaps: number[] = defaultColumnIdMap
) {
  const checkColumnIdList = Array.isArray(checkColumnId)
    ? checkColumnId
    : [checkColumnId];

  for (const columnId of checkColumnIdList) {
    const isInclude = columnIdMaps.includes(columnId);

    if (isInclude) {
      setNavigationActive(columnId);

      return;
    }
  }
}

export function setNavigationActive(columnId: number) {
  const navItem = getNavigationItem(columnId);
  if (navItem) {
    navItem.classList.add("active");
  }
}
html
<hlx-template
  component-type="selfPosition"
  component-query-option="{'showMedium':'PC'}"
  component-variable="selfPosition"
></hlx-template>

<div class="hlx-breadcrumbs">
  <span style="flex-shrink: 0; -ms-flex-shrink: 0;">当前位置:</span>

  <th:block th:each="item,stat : ${selfPosition}">
    <a class="breadcrumb-item" th:href="${item.urlPc}" th:text="${item.name}"
      >___</a
    >
    <span class="separator">></span>

    <span th:if="${stat.last}" class="breadcrumb-item">详情</span>
  </th:block>
</div>

<script type="text/javascript" th:inline="javascript">
  window.addEventListener("DOMContentLoaded", function () {

    var columnList = [
       /*[# th:each="item, stat : ${selfPosition}"]*/
       [[${item.id}]],
       /*[/]*/
    ]

    if (!columnList) return;

    console.log('columnList > ', columnList);

     setNavigationActiveByList(columnList);
  });
</script>