Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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_Scroll_Lodash_Throttling_Debounce - Fatal编程技术网

Javascript 去盎司/油门正在破坏我的固定头球效果

Javascript 去盎司/油门正在破坏我的固定头球效果,javascript,scroll,lodash,throttling,debounce,Javascript,Scroll,Lodash,Throttling,Debounce,我编写了一些javaScript,这样我的菜单开始时是position:static,但会变成position:fixed,当用户向上滚动时,它会停留在屏幕顶部,但当用户向下滚动时,它会再次消失。因为菜单上面有一些内容,一旦用户滚动到最顶端,菜单就会再次变为position:static 这段代码工作正常,但我有一个问题时,添加去盎司。我已经读到我需要节流或去盎司的性能。我试过分别使用Lodash uBounce和Bounce两个函数。我不介意在向上滚动的菜单上显示一些延迟,但是当用户滚动回页面

我编写了一些javaScript,这样我的菜单开始时是position:static,但会变成position:fixed,当用户向上滚动时,它会停留在屏幕顶部,但当用户向下滚动时,它会再次消失。因为菜单上面有一些内容,一旦用户滚动到最顶端,菜单就会再次变为position:static

这段代码工作正常,但我有一个问题时,添加去盎司。我已经读到我需要节流或去盎司的性能。我试过分别使用Lodash uBounce和Bounce两个函数。我不介意在向上滚动的菜单上显示一些延迟,但是当用户滚动回页面顶部时,标题在返回位置时会有延迟:静态。我已经尝试过使用{'leading':true}选项来实现去盎司和节流功能,但效果不太好

如果我将等待/延迟时间设置得太低,那么即使使用去抖动或油门也没有意义了?我不想牺牲网站的性能,但是我被要求实现这个效果

 var header = document.getElementById("fixed-header");
 var offset = header.offsetTop;
 var $header = $(header);
 var headerHeight = parseInt($header.css("height"));
 var total = headerHeight + offset;

 var lastScrollTop = 0;
 window.addEventListener("scroll", _.debounce(scrollHeader, 200, {
     'leading': true
 }));

 function scrollHeader() {
     var st = window.pageYOffset || document.documentElement.scrollTop;
     if (st > lastScrollTop) {
         // downscroll code
         if (pageYOffset >= total) {
             document.body.classList.add("fixed");
             document.body.classList.add("is-hidden");
             document.body.style.paddingTop = header.offsetHeight + "px";
             header.style.transition = ".5s";
         } else {
             document.body.classList.remove("fixed");
             document.body.classList.remove("is-hidden");
             document.body.style.paddingTop = 0;
         }
     } else {
         // upscroll code
         if (pageYOffset >= offset) {

             document.body.classList.add("fixed");
             document.body.classList.remove("is-hidden");
             document.body.style.paddingTop = header.offsetHeight + "px";
         } else {
             header.style.transition = "initial";
             document.body.classList.remove("fixed");
             document.body.style.paddingTop = 0;
         }
     }
     lastScrollTop = st;
 }

lodash的
debounce
throttle
使用设置超时作为计时功能。也许您应该尝试使用,代价是丢失延迟参数,但有利于在下次重新绘制之前激发。