Javascript 使用带有固定位置标题的scrollIntoView

Javascript 使用带有固定位置标题的scrollIntoView,javascript,twitter-bootstrap,Javascript,Twitter Bootstrap,我有一个网站的标题设置为位置:fixed。在我的一个页面上,我对一个元素使用了scrollIntoView(true)。我的问题是,当调用scrollIntoView时,元素被定位在标题下面。我如何解决这个问题,使元素显示在标题的正下方 我使用的是Bootstrap框架,标题的样式为navbar-navbar-fixed-top这有点老套,但这里有一个解决方法 var node = 'select your element'; var yourHeight = 'height of your f

我有一个网站的标题设置为
位置:fixed
。在我的一个页面上,我对一个元素使用了
scrollIntoView(true)
。我的问题是,当调用
scrollIntoView
时,元素被定位在标题下面。我如何解决这个问题,使元素显示在标题的正下方


我使用的是Bootstrap框架,标题的样式为
navbar-navbar-fixed-top

这有点老套,但这里有一个解决方法

var node = 'select your element';
var yourHeight = 'height of your fixed header';

// scroll to your element
node.scrollIntoView(true);

// now account for fixed header
var scrolledY = window.scrollY;

if(scrolledY){
  window.scroll(0, scrolledY - yourHeight);
}
编辑:


现代的解决方法是将CSS
滚动边距顶部
属性与
:target
选择器结合使用。详细描述:

编辑:尽管不太兼容(没有边缘+IE兼容性),
滚动页边距顶部
也将解决此问题,如中所述

您可以使用CSS解决这个问题,方法是对要滚动到的元素应用
填充顶部
和负
边距顶部

//仅用于演示,解决方案不需要JS
document.querySelector('.scroll to working inline')。addEventListener('click',function(){
document.querySelector('.working inline').scrollIntoView();
});
document.querySelector('.scroll to working block')。addEventListener('click',function(){
document.querySelector('.working block').scrollIntoView();
});
document.querySelector('.scroll to breaked')。addEventListener('click',function(){
document.querySelector('.break').scrollIntoView();
});
/*相关样式*/
.在线工作{
填充顶部:60px;
利润上限:-60px;
}
.工作区{
填充顶部:60px;
利润上限:-60px;
}
/*允许滚动到顶部*/
身体{
填充顶部:60px;
}
/*仅用于演示*/
正文{页边距:0;}
标题{
位置:固定;
排名:0;
背景色:番茄;
颜色:白色;
宽度:100%;
高度:60px;
线高:60px;
文本对齐:居中;
}
[class^='working'],
[class^='brokend']{
字体大小:3rem;
}

滚动到。。。
工作内联元素
工作块元件
断元
Sql守护进程:您的所有基础都属于us数据包系统perl信号量。解释器warez pragma kilo蠕虫后门baz continue chown blob unix Dennis Ritchie stack mutex bar throw fopen手册页linux。Sql适当的小值位无限循环pwned rm-rf

在线工作 Syn baz手册页unix vi crack leapfrog信号量失败pwned afk null socket cd long leet emacs Donald Knuth bin grep todo pragma stdio.h 1970年1月1日。Alloc gc系统新的最终sql堆栈跟踪syn大型机cat机器代码内存泄漏服务器后门线程中的盐洪隧道。字节致命抛出ctl-c Dennis Ritchie超时钟eof tera perl正则表达式

工作块元件 公共注入类unix malloc错误脚本kiddies数据包无故障int对不起Dave,恐怕我做不到。Tarball内存泄漏双倍rsa密码公开你所有的基地都属于我们。False字节bang bar tarball信号量warez cd端口守护程序异常mountain dew sql大型机gcc ifdef chown private

断元 守护进程气泡排序保护互斥溢出grep snarf crack warez我正在编译位如果内存泄漏星际争霸nak脚本kiddies long这是一项功能。你好,世界公共服务器James T.Kirk注入终端wannabee竞赛条件syn alloc。Gobble leapfrog最终并行绕过,而irc gurfle则通过时钟完成后门blob手册页sql

Char hello world然后man pages ascii long salt,而Char fatal do boolean tunnel在system else foo packet sniffer float terminal int default中。特洛伊木马ssh ifdef/dev/null chown缓存错误协议afk todo rm-rf大型机搭载pwned regex xss warez Starcraft try catch stdio.h冒泡排序。这是一项功能,对不起,戴夫,恐怕我做不到**端口旁路ip

h epoch互斥对象泛滥wannabee do race condition sql访问异常。Bar pragma手册页取消引用刷新todo highjack,而缓冲位nak big endian syn xss salt用于d00dz。Leslie Lamport linux服务器错误rm-rf防火墙中的十六进制snarf隧道,然后外壳所有基础都属于我们

Ascii gcc grep int flood kilo linux访问邮件炸弹散列**分叉信号量frack else win bar ssh Leslie Lamport。手册页strlen cache gnu segfault tarball竞赛条件perl包嗅探器根cookie private chown d00dz 1970年1月1日。Rsa公开破解位warez抛出用于ip互斥

Char hello world然后man pages ascii long salt,而Char fatal do boolean tunnel在system else foo packet sniffer float terminal int default中。特洛伊木马ssh ifdef/dev/null chown缓存错误协议afk todo rm-rf大型机搭载pwned regex xss warez Starcraft try catch stdio.h冒泡排序。这是一项功能,对不起,戴夫,恐怕我做不到**端口旁路ip

h epoch互斥对象泛滥wannabee do race condition sql访问异常。Bar pragma手册页取消引用刷新todo highjack,而缓冲位nak big endian syn xss salt用于d00dz。Leslie Lamport linux服务器错误rm-rf防火墙中的十六进制snarf隧道,然后外壳所有基础都属于我们

Ascii gcc grep int flood kilo linux访问邮件炸弹散列**分叉信号量frack else win bar ssh Leslie Lamport。手册页strlen cache gnu segfault tarball竞赛条件perl包嗅探器根cookie private chown d00dz 1970年1月1日。Rsa公开破解位warez抛出用于ip互斥

Char hello world然后man pages ascii long salt,而Char fatal do boolean tunnel在system else foo packet sniffer float terminal int default中。特洛伊木马ssh ifdef/dev/null chown缓存错误协议afk todo rm-rf大型机搭载pwned regex xss warez Starcraft try catch stdio.h冒泡排序。这是一项功能,对不起,戴夫,恐怕我做不到**端口旁路ip

Stdio.h
var topOfElementToView= $('#elementToScroll').position().top;
$('#parentScrollingContainer').scrollTop(topOfElementToView);
var topOfElement = document.querySelector('#targetElement').offsetTop - XX;
window.scroll({ top: topOfElement, behavior: "smooth" });
let anchorLinks = document.querySelectorAll('a[href^="#"]')

for (let item of anchorLinks) {
  item.addEventListener('click', (e) => {
    let hashVal = item.getAttribute('href')
    let topOfElement = document.querySelector(hashVal).offsetTop - 70

    window.scroll({ top: topOfElement, behavior: "smooth" })
    history.pushState(null, null, hashVal)
    e.preventDefault()
  })
}
it('should be able to click a button selector', function () {
    let EC = protractor.ExpectedConditions;
    let button = element(by.css('.my-button-css));

    browser.executeScript('arguments[0].scrollIntoView(false)', button.getWebElement()).then(function () {
        browser.wait(EC.elementToBeClickable(button), 3000).then(function () {
            expect(button.isDisplayed()).toBeTruthy();
            button.click();

            // more test logic here

        });
    });
});
  const headerHeight = 50; /* PUT HEADER HEIGHT HERE */
  const buffer = 25; /* MAY NOT BE NEEDED */
  const scrollToEl = document.querySelector("#YOUR-ELEMENT-SELECTOR");

  const topOfElement = window.pageYOffset + scrollToEl.getBoundingClientRect().top - headerHeight - buffer;
  window.scroll({ top: topOfElement, behavior: "smooth" });
scrollIntoView({block: 'center'})
function scrollIntoCenter(element) {
  // first scroll element into view. This means element is at the very top.
  element.scrollIntoView();
  
  // calculate new scrollYPosition by subtracting half of window-height
  let y = window.scrollY - window.innerHeight/2;
  
  // scroll up by half of window height
  window.scroll(0, y);
}