【问题标题】:Get sticky head to work on table element让粘头在表格元素上工作
【发布时间】:2018-07-22 01:18:38
【问题描述】:

我的粘性元素内置在 Javascript 中:

  $(document).ready(function () {
    $(window).scroll(stickyRelocate);
});

var stickMob = document.getElementById("sticky-mobile");
var stop = (stickMob.offsetTop - 60);

window.onscroll = function (e) {
    var scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
    console.log(scrollTop, left.offsetTop);

    if (scrollTop >= stop) {
        stickMob = 'stick';
    } else {
        stickMob.className = '';
    }
}

除非我将它应用到桌子上,否则它会起作用。知道为什么它不起作用吗?

<thead>
     <tr>
          <th><h3>Freebies</h3></th>
          <div id="sticky-mobile">
               <th class="text-centred"><p> Together+ plan</p></th>
               <th class="text-centred"><p> Together plan</p></th>
          </div>
     </tr>
</thead>

JS Fiddle

【问题讨论】:

  • 您能在此处或通过 jsfiddle.net 发布您要执行的操作的完整来源吗?
  • 首先,&lt;div&gt;s 不能是 &lt;tr&gt;s 的孩子。使用桌子会很棘手。本质上,您需要创建一个单独的固定元素,该元素复制表格标题并在页面滚动时显示/隐藏它。
  • 我在上面贴了fiddel,希望对你有帮助
  • 你不能在 div 中使用 tr 。你必须把它放在th里面。
  • 谢谢泰德,我会试试的

标签: javascript jquery css html-table


【解决方案1】:

您的 html 和 javascript 中有一些错误。

  • 使您的sticky-mobile 容器成为表内的tr(而不是另一个tr。
  • 这应该怎么做? stickMob = 'stick'; 添加类使用 jquery addClass 方法或 javascripts className 属性。
  • 这会引发错误$(window).scroll(stickyRelocate);,因为没有函数stickyRelocate

经过一些清理,这段代码是一个好的开始:

<table> 
<thead>
  <tr>
    <th colspan="2"><h3>Freebies</h3></th>
  </tr>
  <tr id="sticky-mobile">
    <th class="text-centred"><p> Together+ plan</p></th>
    <th class="text-centred"><p> Together plan</p></th>
  </tr>
</thead>
</table>

Js:

var stickMob = document.getElementById("sticky-mobile");
var stop = stickMob.offsetTop;

window.onscroll = function (e) {
    var scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;


    if (scrollTop >= stop) {
        stickMob.className = 'stick';
    } else {
        stickMob.className = '';
    }
}

这是一个 jsfiddle,你的代码稍微清理了一下:https://jsfiddle.net/32zfy7rq/1/

祝你好运。

【讨论】:

  • 嘿,谢谢你的回答。问题是这现在一直在滴答作响。一旦我滚动到 id="sticky-mobile",我只需要它粘住
  • 我为stop 变量删除了-60。它仍然有点跳跃,因为表格行突然变成position:fixed;,因此不占用任何空间。为了防止您可以创建粘性行的克隆,并使用 visibility:hidden; 隐藏行本身
  • 它没有跳跃,但在此之前,只有当我滚动过去
    现在它从页面顶部开始,标题才会变得粘滞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多