如何触发布局改变?

时间:2013-07-07 21:57:02

标签: javascript html css grid-layout sticky

我有一个sticked元素,它从当前top - 偏移量获得scroll - 对齐。问题是,如果布局中的空间是空闲的,那么布局不会“重新触发”。所以有一个 ghost -gap,其中粘贴的元素是......

http://fiddle.jshell.net/pPc4V/

标记非常简单:

<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#" class="sticked"></a>
<a href="#"></a>
...

以及js:

var $win = $(this);
var sticked = document.querySelector('a.sticked');

$win.on('scroll', function () {
    var scrollTop = $win.scrollTop();
    sticked.style.top = scrollTop + 'px';

    // $win.resize();
});

...到目前为止css看起来很不错:

a {
    display: inline-block;
    width: 90px;
    height: 90px;
    background: deepskyblue;
}

.sticked {
    position: relative;
    top: 0;
    left: 0;
    background: tomato;
}

我试图在滚动时触发resize - 事件(如上所示,未注释),但没有成功!任何想法,如何重新布局布局,以便自由空间填充下一个浮动元素?

更新

澄清我的意思我做了一个简单的图像 - 时间:

第1步 Step 1

第2步 Step 2

第3步 Step 3

1 个答案:

答案 0 :(得分:1)

问题是您在内联显示的元素上设置了固定位置。这将导致该空间发生。我已经用适当的对齐方式重新编写了jsFiddle。

为了解决这个问题,我只在文档的scrollTop位置大于目标元素的scrollTop位置时添加了“卡住”类。

jsFiddle http://fiddle.jshell.net/pPc4V/44/

HMTL:

<div id="grid"> 
     <a href="#"></a>
     <a href="#"></a>
     etc...
</div>

CSS:

#grid {
    height:1000px;
    overflow:hidden;
    float:left
}
#grid > a {
    display: inline-block;
    width: 90px;
    height: 90px;
    background: deepskyblue;
}
.stuck {
    position: fixed;
    background: navy !important;

}

JS:

    $(window).on('scroll', function () {

        var $doc = $(document),
            parentElement = $('#grid'),
            childToGetStuck = parentElement.find('a:nth-child(5)');

        if ($doc.scrollTop() > childToGetStuck.scrollTop()) {
            childToGetStuck.addClass('stuck');
            //console.log($('.stuck').scrollTop())
        } else {
            childToGetStuck.removeClass('stuck');
        }

    });