前端吸顶功能,滚动到一定位置时固定到顶部

简介:

适用环境:菜单滑动后固定,搜索框的固定

(只做全了功能,没有写完美样式,明白原理,样式可自行调整,为了区分效果,颜色反差比较明显)先看图:

下面贴上代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>吸顶容器</title>
  <style>
    .body {
      margin: 0px !important;
      padding: 0;
      box-sizing: border-box;
    }

    .road-tab-fixed {
      position: fixed;
      top: 0%;
      width: 100%;
    }

    .top {
      background: #c4f8b4;
      height: 50px;
    }

    .list {
      background: #ccc;
      width: 100%;
    }

    .list li {
      height: 50px;
      border-bottom: 2px solid #f00;
    }

    .banner {
      width: 100%;
      background: #c19aff;
      height: 150px;
    }
  </style>
</head>

<body>
  <div class="cont">
    <div class="banner">这是广告图</div>
    <div class="top" id="road-tab">菜单</div>
    <div class="list">
      <ul>
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
      </ul>
    </div>
  </div>
  <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
  <script>
    const fixedDom = $("#road-tab"),
      tabclass = "road-tab-fixed";
    let beforeElementScrollTop = 0;
    let beforeOffsetTop = fixedDom[0].offsetTop;
    //scroll节流
    const throttle = (func, wait, mustRun) => {
      var timeout,
        startTime = new Date();

      return function () {
        var context = this,
          args = arguments,
          curTime = new Date()
        clearTimeout(timeout)
        // 如果达到了规定的触发时间间隔,触发 handler
        if (curTime - startTime >= mustRun) {
          beforeElementScrollTop = document.documentElement.scrollTop
          console.log("beforelementScrollTop----------", document.body.scrollTop);
          func.apply(context, args);
          startTime = curTime
          // 没达到触发间隔,重新设定定时器
        } else {
          timeout = setTimeout(func, wait)
        }
      }
    }
    const winScroll = (e) => {
      const elementScrollTop = document.documentElement.scrollTop
      console.log('elementScrollTop--------------', elementScrollTop);
      if (beforeElementScrollTop - elementScrollTop <= 0) {//up
        console.log('up');
        if (beforeOffsetTop - elementScrollTop < 0) {
          fixedDom.addClass("road-tab-fixed")
        }
      } else {
        if (beforeOffsetTop - elementScrollTop >= 0) {
          console.log("UUUUUU");
          fixedDom.removeClass("road-tab-fixed")
        }
      }
    };
    $(window).off("scroll").on("scroll", throttle(winScroll, 10, 100));
  </script>
</body>
</html>

主要运用到了scrollTop和offsetTop。

相关文章
|
13天前
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
43 4
|
4月前
|
存储 开发框架 前端开发
循序渐进VUE+Element 前端应用开发(18)--- 功能点管理及权限控制
循序渐进VUE+Element 前端应用开发(18)--- 功能点管理及权限控制
|
1月前
|
前端开发 JavaScript
前端中的“+”连接符,居然有鲜为人知的强大功能!
【10月更文挑战第9天】前端中的“+”连接符,居然有鲜为人知的强大功能!
42 0
前端中的“+”连接符,居然有鲜为人知的强大功能!
|
2月前
|
前端开发 API
(WEB前端编辑DWG)在线CAD如何实现图形识别功能
mxcad 提供的图形识别功能可帮助用户快速识别和提取 CAD 图纸中的各种图形,如直线、多段线、弧线、圆及图块,显著提升设计效率。此功能不仅适用于图形分类,还能进行数量统计和快速定位,减少手动操作。用户可通过 API 进行二次开发,自定义识别逻辑。具体步骤包括打开在线示例、选择识别功能、设置识别参数并开始识别。更多开发文档请关注公众号:梦想云图网页 CAD。
|
30天前
|
Web App开发 存储 前端开发
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
117 0
|
30天前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
152 0
|
1月前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
24 0
|
2月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
49 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
2月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
81 13
|
3月前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
43 0