【问题标题】:jQuery css animation shaking when scrolling滚动时jQuery css动画抖动
【发布时间】:2014-01-08 03:57:00
【问题描述】:

我有这个外部 div,包含一个表格。 我想要的是当我水平滚动外部 div 时,表格的标题保持固定。我已经通过创建一个只包含标题的新表来做到这一点,这个 divheader 是绝对位置左侧:0;

外层div滚动时,divheader的左边位置等于外层div scrollLeft。

$('#outerDiv').scroll(function () {
    var left = $('#outerDiv').scrollLeft();
    $('#divheader').css('left', left);                
});

这在 Firefox 上运行良好,但在 chrome 上,divheader 有时会在快速滚动时晃动。在 IE(10) 上,它一直在抖动。

我的问题是如何避免 IE 和 chrome 上的抖动。

请考虑这个提琴手:http://jsfiddle.net/Y7xZm/11/。在IE上测试一下

【问题讨论】:

  • 你能设置一个小提琴吗?
  • @Shashank 我已经添加了小提琴

标签: jquery css jquery-animate


【解决方案1】:

与其在scroll() 上设置left 属性,不如将#divheader 位置设置为fixed

看到这个demo


编辑:

它找不到任何技术来防止 #divheaderscroll() 上的抖动/生涩,而不是仅将其设置为 position:fixed。因此,我提出了一个解决方案,可以在该固定元素上向下滚动:

首先,我们需要将#divheader 表包装在<div> 上,然后根据#outerDivscrollTop() 值设置其scrollTop() 位置。

$('#outerDiv').scroll(function() {
    var top = $('#outerDiv').scrollTop();
    $('#headerWrapper').scrollTop(top);    
});

然后我们需要将此包装器的height 设置为等于#outerDiv 的高度,这样它就不会溢出。由于滚动条,获取#outerDiv 的高度有点棘手。而我想出的最佳解决方案是将元素的height 设置为100%#outerDiv 内。

//create a new element with height 100% inside the '#outerDiv'
var p = $('<p style="height: 100%;"/>');
$('#outerDiv').append(p);
//get the elements height then remove it
var h = p.height();
$(p).remove();
//set the wrapper's height
$('#headerWrapper').height(h);

这里是jsfiddle

【讨论】:

  • 我希望可以。问题是我的外部 div 高度有限,有时当表格很长时我必须向下滚动
  • 是的,我明白了。我已经更新了我的答案,我认为没有什么比设置 position:fixed 更流畅的了,所以我为您提供了一个解决方案,让您也可以在这个固定元素上向下滚动。
  • 太好了,多亏了你,我现在解决了问题。我创建了一个包装器来包装它。而不是改变表格的左边位置,现在我改变了左边距。非常感谢马克!
猜你喜欢
  • 1970-01-01
  • 2016-03-22
  • 2012-05-26
  • 1970-01-01
  • 2013-11-13
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多