javascript - 调整页面大小后转到特定 anchor (仅限高度变化)

标签 javascript jquery html

我有一个包含多个 anchor (表示 div 位置)的单页网站。调整页面大小后(仅更改高度),我想刷新页面。然后我想滚动到页面之前所在的 anchor ,使 window.top 位置等于 anchor 位置。我有用于调整大小和刷新部分(如下)的 javascript,但我对滚动部分不知所措。有任何想法吗?在调整大小之前,我如何检查页面所在的 div? “#markerAbout”是 anchor 之一。

var height = $(window).height();
var resizeTimer;
$(window).resize(function(){
   if($(this).height() != height){
      height = $(this).height();
      window.location.reload();
      //$(window).scrollTop()=$('#markerAbout').offset().top;   
   }
});

最佳答案

您可以按照此问题中的建议找出哪些元素当前在视口(viewport)上可见: How to tell if a DOM element is visible in the current viewport?

您必须按照您希望它们出现的顺序对每个元素执行此操作,直到找到一个可见的元素。那应该是视口(viewport)顶部的当前元素。

function elementInViewport2(el) {
  var top = el.offsetTop;
  var left = el.offsetLeft;
  var width = el.offsetWidth;
  var height = el.offsetHeight;

  while(el.offsetParent) {
    el = el.offsetParent;
    top += el.offsetTop;
    left += el.offsetLeft;
  }

  return (
    top < (window.pageYOffset + window.innerHeight) &&
    left < (window.pageXOffset + window.innerWidth) &&
    (top + height) > window.pageYOffset &&
    (left + width) > window.pageXOffset
  );
}

一旦您知道哪些 div 正在显示,哪些没有显示,您就可以选择要滚动的那个。

一旦您知道要滚动到哪个 div(例如 Div1),您就可以对该元素调用 scrollIntoView()

Div1.scrollIntoView();

关于javascript - 调整页面大小后转到特定 anchor (仅限高度变化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32470608/

相关文章:

javascript - 日期范围是否包含两个特定日期

javascript - JS 结果集转 JSON

javascript - 你如何运行只有一个 CSS 类的 javascript?

jquery - 如何将鼠标单击更改为鼠标悬停?

javascript - 从数组添加 JQGrid 中的列属性

javascript - 尽管它存在于node_modules中,但peerDependency未定义

javascript - 如何在 for 循环的每次传递中增加动画延迟

php - "Show"jQuery 中的 PHP 数组

javascript - 如何将 Bootstrap 导航菜单设置为在滚动时保持在页面顶部

css - 为什么 &lt;!DOCTYPE html> 打破高度 : 100%?