Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 粘性侧边栏手风琴赢得';不要适当地滚动_Javascript_Html_Css - Fatal编程技术网

Javascript 粘性侧边栏手风琴赢得';不要适当地滚动

Javascript 粘性侧边栏手风琴赢得';不要适当地滚动,javascript,html,css,Javascript,Html,Css,我制作了一个粘性侧边栏(如果看起来很熟悉,可以使用w3schools的代码),并在其中添加了一个手风琴菜单 这样做的目的是使侧边栏永久存在,但直到用户向下滚动到标题下方,侧边栏才占据整个屏幕。如果用户打开一个手风琴菜单,并且菜单需要一个滚动条,那么边栏上应该会出现一个单独的滚动条 然而,奇怪的事情偶尔会发生。如果我有一个页面有太多的内容,那么侧边栏的滚动条只会在侧边栏有粘性时出现。如果内容放在一个屏幕上(因此粘性方面永远不会发挥作用),侧边栏的滚动条就不会出现。相反,它是一个主窗口滚动条,它阻止

我制作了一个粘性侧边栏(如果看起来很熟悉,可以使用w3schools的代码),并在其中添加了一个手风琴菜单

这样做的目的是使侧边栏永久存在,但直到用户向下滚动到标题下方,侧边栏才占据整个屏幕。如果用户打开一个手风琴菜单,并且菜单需要一个滚动条,那么边栏上应该会出现一个单独的滚动条

然而,奇怪的事情偶尔会发生。如果我有一个页面有太多的内容,那么侧边栏的滚动条只会在侧边栏有粘性时出现。如果内容放在一个屏幕上(因此粘性方面永远不会发挥作用),侧边栏的滚动条就不会出现。相反,它是一个主窗口滚动条,它阻止我适当地向下滚动侧边栏

代码如下:

HTML:

Javascript:

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    } 
  });
}


window.onscroll = function() {myFunction()};

var navbar = document.getElementById("sidebar");
var sticky = navbar.offsetTop;

function myFunction() {
  if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
  } else {
    navbar.classList.remove("sticky");
    }
}
var acc=document.getElementsByClassName(“accordion”);
var i;
对于(i=0;i=粘性){
navbar.classList.add(“粘性”)
}否则{
navbar.classList.remove(“粘性”);
}
}
该代码目前正在一个实时网站上使用,因此您可以查看该代码以便于使用。唯一看不见的是一些侧边栏内容和css,因为它们位于不同的文件中。要查看的最佳页面是-单击侧边栏中的grade 1并尝试向下滚动;然后-点击侧栏中的grade 1,您必须向下滚动主窗口,直到侧栏变为粘滞状态,然后滚动侧栏链接


感谢您的时间,非常感谢。

这似乎可行,它会检查菜单中的任一“面板”的高度值是否大于#main content div,如果是,它会忽略函数原始部分的其余部分:

function myFunction() {
    if ((document.getElementsByClassName("panel")[0].clientHeight || document.getElementsByClassName("panel")[1].clientHeight) > document.getElementById("main-content").clientHeight){
    return;
    } else {
        if (window.pageYOffset >= sticky) {
        navbar.classList.add("sticky")    
        } else {
        navbar.classList.remove("sticky");
       }
    }

 }
var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    } 
  });
}


window.onscroll = function() {myFunction()};

var navbar = document.getElementById("sidebar");
var sticky = navbar.offsetTop;

function myFunction() {
  if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
  } else {
    navbar.classList.remove("sticky");
    }
}
function myFunction() {
    if ((document.getElementsByClassName("panel")[0].clientHeight || document.getElementsByClassName("panel")[1].clientHeight) > document.getElementById("main-content").clientHeight){
    return;
    } else {
        if (window.pageYOffset >= sticky) {
        navbar.classList.add("sticky")    
        } else {
        navbar.classList.remove("sticky");
       }
    }

 }