Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        2年前关闭。
                                                                                            
                
        
我在stackoverflow和jquery示例中尝试了多种方法,但是无法在grav主题中运行它。当我单击侧栏上的项目时,页面刷新,并且侧栏滚动位置移至顶部。我希望滚动位置停留在最后单击的项目中。

更详细地说,

主题文件由两个主页组成; base.html.twig和sidebar.html.twig。它是一种文档主题。 sidebar.html.twig中的菜单和base.html.twig中的内容。当我更改内容中的滚动位置并刷新页面时,滚动位置保持我读取的内容,但侧边栏中的长菜单无法停留在活动项目上。

我认为,可以有两种孤立的方式。 Ajax菜单可能是用于保持滚动位置的解决方案或jquery脚本。

最佳答案

$(document).ready(function() {
  setTimeout(function(){
    console.log("scrolled --------------------------")
    sidemenuitemintoview()
  }, 100);
});

var sidemenuitemintoview = function() {
  var a, b, i = 0;
  a = document.getElementById("sidebar")
  console.log("sidemenuitemintoview()")
  if (!a || !a.getElementsByClassName) {return false;}
  b = a.getElementsByClassName("active");
  if (b.length < 1) {return false;}
  while (!isIntoView(a, b[0])) {
    i++
    if (i > 1000) {break;}
    a.scrollTop += 10;
  }
}
function isIntoView(x, y) {
  var a = x.scrollTop;
  var b = a + window.innerHeight;
  var ytop = y.offsetTop;
  var ybottom = ytop + 140;
  return ((ybottom <= b) && (ytop >= a));
}

关于javascript - 滚动位置如何在侧边栏中保持事件项目? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48658603/

10-09 13:59