单击按钮滚动到特定 div

2024-05-27

我有一个具有固定菜单和内容框(div)的页面。 单击菜单时,内容框滚动到特定 div。

到目前为止,一切都很好。

这是这里的示例。https://jsfiddle.net/ezrinn/8cdjsmb9/11/ https://jsfiddle.net/ezrinn/8cdjsmb9/11/

问题是当我包装整个 div 并将它们设置为显示/隐藏切换按钮时,滚动不起作用。

这是不起作用的示例。https://jsfiddle.net/ezrinn/8cdjsmb9/10/ https://jsfiddle.net/ezrinn/8cdjsmb9/10/

这也是片段

$('.btn').click(function() {
  $(".wrap").toggleClass('on');
});
 
var div_parent_class_name;
var divs_class;
var id_offset_map = {};
$(document).ready(function() { 
    div_parent_class_name = "wrap_scroll";
    divs_class = "page-section"; 

    var scroll_divs = $("." + div_parent_class_name).children();
    id_offset_map.first = 0;
    scroll_divs.each(function(index) {
        id_offset_map["#" + scroll_divs[index].id] = scroll_divs[index].offsetTop
    });

    $('a').bind('click', function(e) {
        e.preventDefault();
        var target = $(this).attr("href")
        $('.wrap_scroll').stop().animate({
            scrollTop: id_offset_map[target]
        }, 600, function() {
            /* location.hash = target-20; */ //attach the hash (#jumptarget) to the pageurl
        });

        return false;
    });
});

$(".wrap_scroll").scroll(function() {
    var scrollPos = $(".wrap_scroll").scrollTop();
    $("." + divs_class).each(function(i) {
        var divs = $("." + divs_class);

        divs.each(function(idx) {
            if (scrollPos >= id_offset_map["#" + this.id]) {
                $('.menu>ul>li a.active').removeClass('active');
                $('.menu>ul>li a').eq(idx).addClass('active');
            }
            
        }); 
    });
}).scroll();
body,
html {
    margin: 0;
    padding: 0;
    height: 3000px;
}


.wrap { display:none;}
.wrap.on { display:block;}

.menu {
    width: 100px;
    position: fixed;
    top: 40px;
    left: 10px;
}

.menu a.active {
    background: red
}

.wrap_scroll {
    position: absolute;
    top: 20px;
    left: 150px;
    width: 500px;
    height: 500px;
    overflow-y: scroll
}

#home {
    background-color: #286090;
    height: 200px;
}

#portfolio {
    background: gray;
    height: 600px;
}

#about {
    background-color: blue;
    height: 800px;
}

#contact {
    background: yellow;
    height: 1000px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="btn">show/hide</button> 

<div class="wrap">  
  <div class="menu">
      <ul>
          <li><a class="active" href="#home">Home</a> </li>
          <li><a href="#portfolio">Portfolio</a> </li>
          <li><a href="#about">About</a> </li>
          <li><a href="#contact">Contact</a> </li>
      </ul>a
  </div> 
  
  <div class="wrap_scroll">
      <div class="page-section" id="home">hh</div>
      <div class="page-section" id="portfolio">pp</div>
      <div class="page-section" id="about">aa</div>
      <div class="page-section" id="contact">cc</div>
  </div>

</div>

我需要什么来修复代码?请帮忙。


当你计算你的offset, the div is hidden with display: none。这导致偏移量被设置/计算为零。

这是我整理的一个快速修复方法:https://jsfiddle.net/hrb58zae/ https://jsfiddle.net/hrb58zae/

基本上,移动逻辑以确定单击显示/隐藏后的偏移量。

var setOffset = null;

...

if (!setOffset) {
    var scroll_divs = $("." + div_parent_class_name).children();
    id_offset_map.first = 0;
    scroll_divs.each(function(index) {
        id_offset_map["#" + scroll_divs[index].id] = scroll_divs[index].offsetTop
    });
    setOffset = true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击按钮滚动到特定 div 的相关文章

  • HTML5 MediaSource 适用于某些 mp4 文件,但不适用于其他文件(相同的编解码器)

    我正在玩 MediaSource API 代码直接取自 Mozilla 的示例页面 https developer mozilla org en US docs Web API MediaSource endOfStream https d
  • Jquery 数据表列总和

    我只是参考一下这个链接 https datatables net examples advanced init footer callback html了解如何获取 jquery 数据表中的列总计 但我已经完成了一半的项目 我在html页面
  • 使用 Jquery 清除 5 个空 TD

    我有一个正在填充的动态表 我知道我不应该这样做 但是你会如何连续找到 5 个空 TD 并隐藏它们呢 因此 如果行包含 5 个空 TD 则不显示 TD 我想删除每个实例 td td td td td td td td td td 在 DOM
  • 使用输入类型 = 文件捕获照片时移动 safari 崩溃

    我正在使用输入类型文件在 iOS 中启动相机 我正在使用以下代码行
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 图像背景不透明度不影响边框

    如何设置背景不透明度而不影响边框线不透明度 我找到的解决方案没有帮助 div class selected img src assets img image product 1 thumbnail jpg alt product 1 thu
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 在 HTML 下拉列表中有一个滚动条

    我正在寻找一种在 HTML 的下拉列表中添加滚动条的方法 这样如果下拉列表包含的内容超过例如 5 项 将出现滚动条以查看其余项 这是因为我将被迫列出一些大清单 过去几个小时我一直在谷歌上搜索它 但没有运气 它需要适用于 IE8 FF 和 C
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 使用css bootstrap时如何仅向一列添加右边框?

    我正在尝试使用CSS引导框架 http getbootstrap com css tables在我的项目中 我正在使用带有以下类的表table table bordered table striped 我想删除除第一列之外的所有列的边框 这
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • HTML 锚点,禁用样式

    我有一些 html 锚链接代码 与文档的其余部分不同 我希望它看起来不是链接 有没有一种简单的方法可以禁用由于将文本包装在锚标记中而引起的样式更改 而不必强行使其相同 即 如果我更改正文字体样式 我不必也更改其他一些 link东西 将颜色设
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项

随机推荐

  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • 无需递归即可展平多个嵌套数组的数组 - javascript

    也许这是一个愚蠢的问题 但我无法意识到是否可以在不使用递归的情况下展平多维数组 我用递归编写了一种解决方案 function transform arr var result arr forEach flatten function fla
  • TCPDF 为一个文档中的不同页面设置不同的页眉

    有没有办法使文档中第一页的页眉徽标和第二页的页眉徽标不同 我认为在添加页面之间更改标题数据可能会解决问题 但在我的测试中 添加第一页后设置标题似乎没有效果 other stuff pdf gt setHeaderFont array PDF
  • 如何在调试时轻松查看事件订阅数量?

    在调试时 我可以查看一下textBox1 TextChanged查看事件订阅数量 如果是 那么我该如何钻取它 我需要知道在给定时间有多少订阅进行调试 因为看起来一个事件被多次触发 但我怀疑这个错误确实是因为textBox1 TextChan
  • 标记 pandas 系列中连续的 True 元素组

    我有一系列的 pandas 布尔值 我想标记连续的 True 值组 怎么可能做到这一点 是否可以以矢量化的方式做到这一点 任何帮助将不胜感激 Data A 0 False 1 True 2 True 3 True 4 False 5 Fal
  • Sphinx 文档包中 LaTeX 输出的自定义颜色

    我试图在使用 Sphinx 文档包和 html 输出时自定义 LaTeX 内联公式的颜色 细节 我有一个名为func rst 其中包括以下行 Let math x 1 be a binary variable 在我用 Sphinx 创建的文
  • MariaDB 数据透视表 - 行到列。询问

    我在 MariaDB 中有这张表 DATE NAME MARK 2021 02 01 ALEX 7 2021 02 01 JOHN 5 2021 02 01 FRANK 4 2021 02 02 EVA 8 2021 02 02 ALICI
  • Spring Boot WebClient OAuth2 client_credentials 支持吗?

    我正在尝试创建一个 Spring Boot REST 应用程序 该应用程序必须对另一个受 OAuth2 保护的 Spring Boot 应用程序 具有授权类型 client credentials 进行远程 REST 调用 第一个应用程序使
  • 如果使用 javascript 在 ASP.NET 中页面验证失败,如何禁用提交按钮

    如果页面上的验证失败 我需要使用 JavaScript 禁用表单上的保存按钮 如果没有 则必须使用以下代码启用它 Code
  • cygwin $'\r':命令未找到错误

    我稍微修改了一个项目 在调试下它运行得很好 当我尝试在不调试的情况下构建它时 它显示错误 无法修复它 make Making all in third party make 1 Entering directory cygdrive c U
  • 如何在角度2中动态地在输入框上添加工具提示

    我有一个输入框 我想在将鼠标悬停在输入框上时显示工具提示消息 这将基于我们从服务获得的响应 如果服务响应为 true 则工具提示中的消息将为 true message 如果服务返回 false 则该消息将为 false message 这是
  • 签名仅对临时无效

    我不确定我的临时项目发生了什么变化 但在尝试安装时出现此错误 应用程序未通过协同设计验证 签名无效 或者不是用Apple提交证书签名的 19011 设备调试构建良好 与我的临时配置文件关联的证书直到 2011 年才会过期 我搜索了 Goog
  • DateTimeFormat.AbbreviatedMonthNames 在月份名称末尾添加一个点

    昨晚 我们将 Web 服务层从物理 Windows 2008 r2 迁移到虚拟 Windows 2012 我们的日志中收到大量有关 DateTime 无效格式的事件 这很奇怪 因为我们仔细检查了区域设置 长话短说 CultureInfo G
  • 使用 node.js 上的 knox 将八位字节流从请求流式传输到 S3

    我正在尝试使用以下命令将八位字节流直接流式传输到 S3knox https github com LearnBoost knox 在 Node js 上 octet stream 是从浏览器上传的 XHR 文件 我以为我可以将请求流式传输到
  • 无法通过 macvlan 网络从主机访问 docker 容器

    在我的 Linux 网络中 我无法通过专用 macvlan 网络从运行它们的主机访问我的 docker 容器 到此 macvlan 网络的所有其他连接都正常 所以基本上设置是 DOCKER1 eth0 172 0 0 1 default e
  • Php 会话标头已经发送错误[重复]

    这个问题在这里已经有答案了 可能的重复 php 标头已发送错误 https stackoverflow com questions 3319207 php headers already sent error 我已附上我的代码 该代码用于
  • 在哪里可以找到将现有 CPAN 模块转换为使用 Dist::Zilla 的简明指南?

    我曾多次阅读过相关文档和一些博客文章地区 齐拉 http search cpan org dist Dist Zilla 我从来没有对自己的理解充满信心 在回答另一个问题时 Ether 提出了转换的可能性地穴 SSLeay http sea
  • 淡出图像上的文字

    我知道如何使用 CSS 透明渐变淡出纯色背景上的文本 但是如何才能淡出图像背景上的文本呢 这是我想要的一个例子 注意 我需要像图像一样的静态效果 而不是动态过渡 CSS mask image可能是您正在寻找的 div background
  • 单击按钮滚动到特定 div

    我有一个具有固定菜单和内容框 div 的页面 单击菜单时 内容框滚动到特定 div 到目前为止 一切都很好 这是这里的示例 https jsfiddle net ezrinn 8cdjsmb9 11 https jsfiddle net e