当前位置: 首页 > 知识库问答 >
问题:

删除窗口(滚动)jQuery上的故障/闪烁

马天逸
2023-03-14

当到达某个元素时,此函数将添加所需的类,但之后元素似乎会不断抖动。在scroll上应用类的这种方式是否有问题?这是一个演示(如果需要,请缩小窗口大小,以便您可以滚动浏览内容):https://codepen.io/anon/pen/ooZZja

$(function() {
  $(window).scroll(function() {
    var scroll = $(window).scrollTop();
    var os = $(".header").offset().top;
    var ht = $(".header").height();
    if (scroll > os + ht) {
      $(".header").addClass("is-fixed");
    } else {
      $(".header").removeClass("is-fixed");
    }
  });
});

共有3个答案

漆雕硕
2023-03-14

将表格行更改为“固定”会影响测量,并且会在两种状态之间不断切换。我会复制行并在需要时显示它。

<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<table>
    <tbody>
        <tr class="header">
            <th>1</th>
            <th id="day-in-week-0">Mon</th>
            <th id="day-in-week-1">Tue</th>
            <th id="day-in-week-2">Wed</th>
            <th id="day-in-week-3">Thu</th>
            <th id="day-in-week-4">Fri</th>
            <th id="day-in-week-5">Sat</th>
            <th id="day-in-week-6">Sun</th>
        </tr>
        <tr class="is-fixed" style="display:none;">
            <th>1</th>
            <th id="day-in-week-0">Mon</th>
            <th id="day-in-week-1">Tue</th>
            <th id="day-in-week-2">Wed</th>
            <th id="day-in-week-3">Thu</th>
            <th id="day-in-week-4">Fri</th>
            <th id="day-in-week-5">Sat</th>
            <th id="day-in-week-6">Sun</th>
        </tr>

    </tbody>
</table>

<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>
<p><div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eligendi explicabo dolore odit facilis debitis ducimus repudiandae vero? Dolore ab id suscipit repudiandae quidem, atque recusandae! Impedit blanditiis tempora illum optio?</div></p>

css

.is-fixed {
  position: fixed;
  top: 0;
  background-color: yellow;
  display:table-row;
}

Javascript

$(function(){
    $(window).scroll(function() {
        var scroll = $(window).scrollTop();
        var os = $(".header").offset().top;
        var ht = $(".header").height();

        if(scroll > os + ht){
            $('.is-fixed').show()
        } else {
            $('.is-fixed').hide();
        }
    });
});
宰宣
2023-03-14

你可以用css来做,用位置:粘;

.is-fixed {
  position: sticky;
  position: -webkit-sticky;
  top: 0;
  background-color: yellow;
}

并将该类应用于表

<table class='is-fixed'>

工作示例:代码笔

当前代码的问题是:

因为您的固定类可能会删除内容并更改高度

正如@epascarello在评论中告诉你的

冯鸿光
2023-03-14

您正在计算滚动时标题的偏移量。因为您将位置设置为固定位置,它将发生变化,计算不再有效。在将滚动事件附加到窗口对象之前,您需要保存标题元素的初始位置。

我还添加了一个“幽灵元素”,所以在你固定了标题元素后,你的内容高度不会改变。如果固定元素从其位置脱离,重影元素将占据空间。

叉笔:https://codepen.io/anon/pen/GOWWwo

超文本标记语言:

<tr class="header">
  <th>1</th>
  <th id="day-in-week-0">Mon</th>
  <th id="day-in-week-1">Tue</th>
  <th id="day-in-week-2">Wed</th>
  <th id="day-in-week-3">Thu</th>
  <th id="day-in-week-4">Fri</th>
  <th id="day-in-week-5">Sat</th>
  <th id="day-in-week-6">Sun</th>
</tr>
<tr class="ghost"></tr>

CSS:

.header:not(.is-fixed) + .ghost {
  display: none;
}

JavaScript:

$(function(){      
  var os = $(".header").offset().top;
  var ht = $(".header").height();

  $('.header + .ghost').css({
    height: ht + 'px'
  });

  $(window).scroll(function() {
    var scroll = $(window).scrollTop();

    if (scroll > os + ht){
      $('.header').addClass('is-fixed');
    } else {
      $('.header').removeClass('is-fixed');
    }
  });
});
 类似资料:
  • 自动故障剔除会自动监控 RPC 调用的情况,对故障节点进行权重降级,并在节点恢复健康时进行权重恢复。目前支持 bolt 协议。 在 SOFABoot 中,只需要配置自动故障剔除的参数到 application.properties 即可。可以不完全配置,只配置自己关心的参数,其余参数会取默认值。需要注意的是 com.alipay.sofa.rpc.aft.regulation.effective

  • 集群中通常一个服务有多个服务提供者。其中部分服务提供者可能由于网络,配置,长时间 fullgc ,线程池满,硬件故障等导致长连接还存活但是程序已经无法正常响应。单机故障剔除功能会将这部分异常的服务提供者进行降级,使得客户端的请求更多地指向健康节点。当异常节点的表现正常后,单机故障剔除功能会对该节点进行恢复,使得客户端请求逐渐将流量分发到该节点。单机故障剔除功能解决了服务故障持续影响业务的问题,避免

  • 初始设置 在创建并启动新的 Serene 应用程序之后,不能显示登录页,而当你打开浏览器控制台,却得到一条错误消息:找不到 Template.LoginPanel: 你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。 当项目以这种方式命名时,模板系统将不能定位模板。 请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重

  • 当使用 Gradle 时, 你肯定会碰到许多问题. 解决遇到的问题 如果你碰到了问题, 首先要确定你使用的是最新版本的 Gradle. 我们会经常发布新版本, 解决一些 bug 并加入新的功能. 所以你遇到的问题可能就在新版本里解决了. 如果你正在使用 Gradle Daemon, 先暂时关闭 daemon (你可以使用 switch —no-daemon 命令). 在第19章我们可以了解到更多关

  • 在Debian和Ubuntu上,当您安装标准的FreeRADIUS软件包时,FreeRADIUS服务器二进制文件称为freeradius而不是radiusd。 您可以创建将使用较慢服务器的ldap模块的命名实例。 然后,您可以使用冗余部分替换authorize部分中的ldap条目,该冗余部分首先使用快速LDAP服务器列出模块,然后使用较慢的部分使用ldap模块实例。 #ldap redundant

  • Mount 5 Error mount 5 错误通常是 MDS 服务器滞后或崩溃导致的。要确保至少有一个 MDS 是启动且运行的,集群也要处于 active+healthy 状态。 Mount 12 Error mount 12 错误显示 cannot allocate memory ,常见于 Ceph 客户端和 Ceph 存储集群版本不匹配。用以下命令检查版本: ceph -v 如果 Ceph