为什么slickgrid在JS中添加1000px,然后以CSS样式反转?

时间:2014-08-07 01:04:45

标签: slickgrid

在计算标题的可变空间时,slickgrid会仔细测量每一列,然后添加1000

function getHeadersWidth() {
  var headersWidth = 0;
  for (var i = 0, ii = columns.length; i < ii; i++) {
    var width = columns[i].width;
    headersWidth += width;
  }
  headersWidth += scrollbarDimensions.width;
  return Math.max(headersWidth, viewportW) + 1000;
}

当它将它放入DOM中时,这1000用CSS反转出来:

$headers = $("<div class='slick-header-columns' style='left:-1000px' />").appendTo($headerScroller);

您可以查看此实时in this example,只需检查.slick-header-columns元素。

我想知道的是,为什么?这个css技巧做了什么?

1 个答案:

答案 0 :(得分:1)

git bisect提供了答案:

https://github.com/mleibman/SlickGrid/commit/c299a5628c791a3b3cb390a22312eb2247b07cd5

作者:David Lee

日期:2010年3月12日星期五07:39:02 +0800

评论:

改善列重新排序行为

与jquery-ui 1.8rc3兼容

可以拖动列超出左边缘,可以超出 右边缘,以便可以将列拖到最左边的位置, 即使从列的左边缘到初始的距离 mousedown大于网格左边缘之间的距离 以及最左边一列的中点。


注意:

  1. 理由是:

    当您使用jQuery UI'sortable'组件重新排序列时,您(用户)可以将列拖到左侧,最左侧的列将移到一旁,为您提供预览重新排序操作的空间:这意味着列0将至少暂时位于负坐标空间(左@columnwidth,右@ppx =左视口边缘)。

    由于SlickGrid允许任意宽度的列,可能会在网格生命周期中更改,David Lee(编辑的作者Michael Leibman合并)显然(我假设在这里;我没有检查他的拉取请求或其他源基准)使用10000像素的最坏情况列宽假设(参见c299提交)为SlickGrid初始化代码提供一个适合所有人的设置/初始化。

    当Michael Leibman将此更改为当前-1000px值时,请参阅下一个提交注释。

  2. 我有相同的问题已经有一段时间了,无法找到原因 - 早先的git bisect尝试误导我https://github.com/mleibman/SlickGrid/commit/f2d480ce959b9f8504f718d6f7a825782d488415只会将负偏移量改变十年,而我当时并不知道SlickGrid的内部结构是否能够自信地设置一个合适的git bisect来追捕这个。 (真正的改变是在SlickGrid 1.x系列中完成的,然后改变了批次代码)

    直到现在我自己拿出-1000px并注意到列重新排序变得更糟,git bisect帮我挖掘了相关的历史记录。

  3. 关闭主题:使用git bisect再次告诉我git认为bad是'新情况'而git bisect good代表情况:在使用git bisect时,我必须提醒自己情况(当-1000px / -10000px代码不是SlickGrid的一部分时) )至少在我看来是“糟糕”的情况。即git bisect bad〜'这就像新的情况; git bisect good〜'这看起来像旧情况'。