JavaScript将长页面滚动到DIV

时间:2020-03-05 18:54:50  来源:igfitidea点击:

我在一个很长的HTML页面上有一个链接。当我单击它时,希望通过滚动到视图中,在窗口的另一部分上看到一个" div"。

有点像其他语言中的EnsureVisible

我已经检查了scrollTopscrollTo,但它们看起来像是红色鲱鱼。

有人可以帮忙吗?

解决方案

回答

为什么不命名锚呢?

回答

<a href="#myAnchorALongWayDownThePage">Click here to scroll</a>

<A name='myAnchorALongWayDownThePage"></a>

没有花哨的滚动,但它应该带你到那里。

回答

答案张贴在这里相同的解决方案,问题。

编辑:如果我们想要一个平滑的滚动,而我以前从未见过,那么JQuery的答案非常好。

回答

JQuery Scroll如何查看此示例代码

回答

我们需要的属性是location.hash。例如:

location.hash ='顶部'; //将跳转到命名锚点" top

不使用dojo或者类似的工具包,我不知道如何制作漂亮的滚动动画,但是如果我们只需要它跳到锚点,则location.hash应该可以做到。

回答

(在FF3和Safari 3.1.2上测试)

scrollTop(IIRC)是页面顶部滚动到文档中的位置。 scrollTo滚动页面,以使页面顶部位于我们指定的位置。

我们需要的是一些Javascript操纵的样式。假设我们要在屏幕外显示div并从右侧滚动,则可以将div的left属性设置为页面的宽度,然后每隔几秒钟将其div减小一定的数量,直到到达所需位置为止。

这应该为我们指明正确的方向。

回答

另外:很抱歉,我以为我们希望一个单独的div从某个地方"弹出"(有时像本网站那样),而不要将整个页面移到某个部分。正确使用锚点将达到这种效果。

滚动的困难在于,我们不仅需要滚动页面以显示div,而且还可能需要在任意数量的级别上滚动可滚动的div。

scrollTop属性在任何DOM元素(包括文档正文)上均可用。通过设置它,我们可以控制滚动的深度。我们还可以使用clientHeight和scrollHeight属性来查看需要进行多少滚动(当clientHeight(视口)小于scrollHeight(内容的高度)时可以滚动。

我们还可以使用offsetTop属性来确定元素在容器中的位置。

要从头开始构建真正通用的"滚动到视图"例程,我们需要从要公开的节点开始,确保它在其父级的可见部分,然后对父级重复相同的操作,等等,所有直到到达顶端的方式。

function scrollIntoView(node) {
  var parent = node.parent;
  var parentCHeight = parent.clientHeight;
  var parentSHeight = parent.scrollHeight;
  if (parentSHeight > parentCHeight) {
    var nodeHeight = node.clientHeight;
    var nodeOffset = node.offsetTop;
    var scrollOffset = nodeOffset + (nodeHeight / 2) - (parentCHeight / 2);
    parent.scrollTop = scrollOffset;
  }
  if (parent.parent) {
    scrollIntoView(parent);
  }
}

回答

第一步看起来像这样(未经测试的代码,不检查边缘情况):

$('a[href=#target]').
    click(function(){
        var target = $('a[name=target]');
        if (target.length)
        {
            var top = target.offset().top;
            $('html,body').animate({scrollTop: top}, 1000);
            return false;
        }
    });

回答

如果我们不想添加额外的扩展名,则以下代码应与jQuery一起使用。

如果我错了,请纠正我,但我一遍又一遍地阅读问题,但仍然认为Angus McCoteup在问如何将元素设置为位置:固定。

回答

Angus McCoteup,请访问http://www.cssplay.co.uk/layouts/fixed.html,如果我们希望DIV像菜单一样运行,请查看CSS

  • 查找要滚动到的元素的位置。
  • 滚动到该位置。

对于滚动到DOM元素的一般情况,有一个jQuery插件,但是如果性能是个问题(什么时候不行?),我建议我们手动进行。这涉及两个步骤:

function absoluteOffset(elem) {
    return elem.offsetParent && elem.offsetTop + absoluteOffset(elem.offsetParent);
}

quirksmode很好地解释了前者背后的机制。这是我的首选解决方案:

function scrollToElement(elem) {
    window.scroll(absoluteOffset(elem));
}

它使用从null到0的转换,这在某些圈子中不是适当的礼节,但我喜欢它:)第二部分使用window.scroll。因此,其余解决方案是:

回答

瞧!

document.getElementById('youridhere').scrollIntoView();

一个古老的问题,但是如果有人通过谷歌找到这个(就像我一样),又谁不想使用锚或者jQuery;有一个内置的javascript函数可以"跳转"到一个元素;

回答

还有更好的选择;根据quirksmode上的出色兼容性表,所有主流浏览器都支持此功能!

我个人发现上面提到的Josh基于jQuery的答案是我所见过的最好的答案,并且对我的应用程序非常有效……当然,我已经在使用jQuery……我当然不会包括整个jQ库一个目的。

干杯!

编辑:好的...发布此消息后仅几秒钟,我在我的下方看到了另一个答案(不确定是否在编辑后是否仍在我下方),说使用:

document.getElementById('your_element_ID_here')。scrollIntoView();

段落数量不匹配