首页 > 其他分享 >其他——26电梯导航栏

其他——26电梯导航栏

时间:2023-06-25 16:56:48浏览次数:33  
标签:26 const Section 电梯 link active 区块 导航 section

思路:主要思路就是对滑动事件进行监听。 监听到当前滑动到的位置,然后判断当前所在的位置处于哪一块区域。给它add active的类,当滑走当前区域,就会remove active类。

监听点击事件,其实跟css 里的scroll-behavior差不多。点击导航,然后获取点击的href,然后获取要显示的区域的位置,然后滑动到那个位置,然后导航就会运行上面的监听加高亮类。

<template>
  <div id="app">
    <div class="elevator">
      <ul>
        <li><a href="#section1">Section 1</a></li>
        <li><a href="#section2">Section 2</a></li>
        <li><a href="#section3">Section 3</a></li>
        <li><a href="#section4">Section 4</a></li>
        <li><a href="#section5">Section 5</a></li>
      </ul>
    </div>

    <div class="section" id="section1">
      <h2>Section 1</h2>
      <p>第一块 </p>
      <video src="https://img-baofun.zhhainiao.com/pcwallpaper_ugc/preview/2366564fa6b83158208eb3181752a8d6_preview.mp4"
        autoplay muted loop></video>
    </div>

    <div class="section" id="section2">
      <h2>Section 2</h2>
      <p>第二块 </p>
      <video src="https://img-baofun.zhhainiao.com/market/133/3760b2031ff41ca0bd80bc7a8a13f7bb_preview.mp4" autoplay muted
        loop></video>
    </div>

    <div class="section" id="section3">
      <h2>Section 3</h2>
      <p>第三块 </p>
      <video src="https://img-baofun.zhhainiao.com/market/semvideo/3fc6cdef4427e61be69096c6ebb59a1c_preview.mp4" autoplay
        muted loop></video>
    </div>

    <div class="section" id="section4">
      <h2>Section 4</h2>
      <p>第四块 </p>
      <video src="https://img-baofun.zhhainiao.com/market/semvideo/6ac24b3f50fda0b1a55f7ff25c6b62af_preview.mp4" autoplay
        muted loop></video>
    </div>

    <div class="section" id="section5">
      <h2>Section 5</h2>
      <p>第五块 </p>
      <video src="https://img-baofun.zhhainiao.com/market/133/97ba6b60662ab4f31ef06cdf5a5f8e94_preview.mp4" autoplay muted
        loop></video>
    </div>

  </div>
</template>

<script>
export default {
  name: 'App',
  computed: {},
  mounted() {
    // 获取所有的导航链接
    const links = document.querySelectorAll('.elevator a');
    // 获取所有的内容区块
    const sections = document.querySelectorAll('.section');

    // 监听窗口滚动事件
    window.addEventListener('scroll', function () {
      // 获取滚动条的位置
      const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

      // 遍历所有的内容区块
      sections.forEach(function (section) {
        // 获取内容区块的位置信息
        const offsetTop = section.offsetTop;
        const offsetHeight = section.offsetHeight;

        // 判断当前内容区块是否在可视范围内
        if (scrollTop >= offsetTop && scrollTop < offsetTop + offsetHeight) {
          // 如果在可视范围内,则将对应的导航链接设置为 active 状态
          links.forEach(function (link) {
            if (link.getAttribute('href') === '#' + section.getAttribute('id')) {
              link.classList.add('active');
            } else {
              link.classList.remove('active');
            }
          });
        }
      });
    });

    // 监听所有的导航链接的点击事件
    links.forEach(function (link) {
      link.addEventListener('click', function (event) {
        event.preventDefault();

        // 获取目标内容区块的位置信息
        const targetId = link.getAttribute('href');
        const targetSection = document.querySelector(targetId);
        const targetOffsetTop = targetSection.offsetTop;

        // 使用动画滑动到目标内容区块
        window.scrollTo({
          top: targetOffsetTop,
          behavior: 'smooth'
        });
      });
    });
  }
}
</script>

<style>
.elevator {
  position: fixed;
  /* 固定定位,保证电梯一直在页面可视区域内 */
  top: 50%;
  /* 在页面垂直居中 */
  right: 0;
  /* 在页面右侧 */
  transform: translateY(-50%);
  /* 通过 translateY 属性来调整位置,保证垂直居中 */
}

.elevator ul {
  list-style: none;
  /* 去掉列表样式 */
  margin: 0;
  /* 去掉外边距 */
  padding: 0;
  /* 去掉内边距 */
}

.elevator li {
  margin: 10px 0;
  /* 设置每个列表项的上下外边距 */
}

.elevator a {
  display: block;
  /* 将链接转换为块级元素,方便设置样式 */
  padding: 10px;
  /* 设置内边距 */
  background-color: #ccc;
  /* 设置背景颜色 */
  color: #000;
  /* 设置文字颜色 */
  text-decoration: none;
  /* 去掉下划线 */
}

.elevator a.active {
  background-color: #000;
  /* 当前所在楼层链接的背景颜色 */
  color: #fff;
  /* 当前所在楼层链接的文字颜色 */
}

/* 页面区块样式 */
.section {
  width: 90vw;
  /* 页面宽度为视口宽度的90% */
  height: 110vh;
  /* 页面高度为视口高度的110% */
}

.section video {
  width: 100%;
  /* 视频宽度自适应父级容器 */
  height: 90%;
  /* 视频高度为父级容器高度的90% */
}
</style>

效果:

 

标签:26,const,Section,电梯,link,active,区块,导航,section
From: https://www.cnblogs.com/hunter1/p/17503311.html

相关文章

  • 78264用于粘贴
    Pleaserankthefollowingelementsinorderofimportanceforyourbusinesswhenconsideringacross-borderpaymentplatform.Pleaseprioritizethemfromhighesttolowest:1.Pricing(rateandexchangerate):Theplatform'sfeestructureandexchang......
  • 直播软件app开发,实现商城底部导航栏
    直播软件app开发,实现商城底部导航栏<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="......
  • 【雕爷学编程】Arduino动手做(126)---GP2Y0A02YK0F红外测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • "快速访问"(Quick Access)是 Windows 操作系统中一个常用的功能,它允许用户快速访问最近
    "快速访问"(QuickAccess)是Windows操作系统中一个常用的功能,它允许用户快速访问最近使用的文件和常用的文件夹。它在资源管理器中的左侧导航窗格中显示,并提供了便捷的方式来查找和打开文件。在Windows10中,"快速访问"默认显示用户最近访问的文件和常用的文件夹。它会根据用户......
  • P8026 [ONTAK2015] Bajtocja 做题笔记
    题目链接一道好题,本来是做几道启发式合并玩玩,没想到是个哈希。这一道题需要维护连通性,显然想到使用并查集。如果两个点在某个图内的父亲相同,显然这两个点就连通了。但是如果每链接一对点我们就遍历所有点对然后判断父亲,显然爆炸。于是考虑借鉴一下CSP2022T3的思路,对于每......
  • P8026 『JROI-7』hibernal 做题笔记
    题目链接观察数据,要求询问次数不超过$\lceil2\logn\rceil-1$,相当困难。我刚开始也在想二分,但这个东西并不具有单调性,但这个题具有的特点就是你不仅仅可以询问一个前缀,你还可以询问任意的集合。首先发现如果能将$n$个苹果分成$S_1$$S_2$两个长度接近的集合,且$S_1$和$S......
  • vue学习第26天 xxxx响应式页面制作
    项目地址:后续添加 1、布局分析nav2列、article7列、aside3列 2、屏幕划分分析 移动端布局总结1、移动端主流方案 2、移动端技术选型1)流式布局(百分比布局)2)flex布局(推荐)3)rem适配布局(推荐)4)响应式布局建议:我们......
  • 前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮
    前端Vue自定义导航栏菜单定制左侧导航菜单按钮中部logo图标右侧导航菜单按钮,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13152效果图如下:cc-navHeader使用方法在page.json设置{"path":"pages/index/index","style":{"nav......
  • 20230430 26. 享元模式 - 网站复用
    介绍享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。事实上,享元模式可以避免大量非常相似类的开销。在程序设计中,有时需......
  • 洛谷 P8264 [Ynoi Easy Round 2020] TEST_100
    题目Link我们不妨来考虑所有询问都是\(l=1,r=n\)的情形,这种情况下需要对每个值处理出他经过一系列变换后变成了什么数。考虑用\(\text{solve}(p,l,r)\)表示我们现在要计算\(x\in[l,r]\)的这些数在经过\(x\leftarrow|x-a_p|,x\leftarrow|x-a_{p+1}|\),一直到\(x\leftar......