最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to synchronize scroll between two elements with different height - Stack Overflow

programmeradmin2浏览0评论

I have two DIV elements #page and #block :

<div id="page"></div>
<div id="block"></div>

#block element has fixed position and long content inside with overflow:hidden property.

#page element has some content inside too, but it height of #page will be longer or shorter then #block height.

My goal is to achieve synchronized scroll between this two elements. Something like this:

I need to calculate speed of #block element scroll, because header and footer elements of #page and #block should be at same position from beginning and at the end of scroll.

The way I tried to achieve this:

  • Calculated height of #page element
  • Calculated height of #block element content (because block element is fixed and has alwas fixed height)
  • Calculated #block element scroll speed by:

    $("#block").outerHeight / $("#page").outerHeight

  • Triggered .scrollTop() of #block

It's working from the beginning and #block element scroll is faster then #page element scroll, but at the end, #block is not scrolled fully.

Here is my JsFiddle: /

Maybe anyone can see what I'm doing wrong?

Thanks in advance.

I have two DIV elements #page and #block :

<div id="page"></div>
<div id="block"></div>

#block element has fixed position and long content inside with overflow:hidden property.

#page element has some content inside too, but it height of #page will be longer or shorter then #block height.

My goal is to achieve synchronized scroll between this two elements. Something like this:

I need to calculate speed of #block element scroll, because header and footer elements of #page and #block should be at same position from beginning and at the end of scroll.

The way I tried to achieve this:

  • Calculated height of #page element
  • Calculated height of #block element content (because block element is fixed and has alwas fixed height)
  • Calculated #block element scroll speed by:

    $("#block").outerHeight / $("#page").outerHeight

  • Triggered .scrollTop() of #block

It's working from the beginning and #block element scroll is faster then #page element scroll, but at the end, #block is not scrolled fully.

Here is my JsFiddle: http://jsfiddle.net/zur4ik/bQYrf/2/

Maybe anyone can see what I'm doing wrong?

Thanks in advance.

Share Improve this question asked Nov 5, 2013 at 9:54 zur4ikzur4ik 6,2549 gold badges55 silver badges79 bronze badges
Add a comment  | 

3 Answers 3

Reset to default 10

You must take the window height into the case and subtract it from the elements heights.

$(window).scroll(function() {
    var pageH = $('#page').height() - $(this).height();
    var pageT = this.scrollY - $('#page').offset().top;

    $('#block').scrollTop(pageT / pageH * ($('#blockLength').height() - $(this).height()));
});

Here's the updated fiddle: http://jsfiddle.net/bQYrf/4/

I have found two examples of this same question already answered in SO:

If I understand you question correctly this is exactly what you are looking for: Synchronized scrolling using jQuery?

This is also a good solution: How do I synchronize the scroll position of two divs?

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

var clientHeight = getClientHeight();

$(window).scroll(function() {

    var diff = ($("#blockLength").height() - clientHeight) / ($("#page").height() - clientHeight);
    var blocktoSet = $(window).scrollTop() * diff;

    $("#block").scrollTop(blocktoSet);

    console.log()



});

http://jsfiddle.net/PeGky/1/

发布评论

评论列表(0)

  1. 暂无评论