Javascript scrollIntoView()不是页面加载时的函数吗?
我有一套常见问题解答,默认情况下我隐藏了答案,只留下问题,并且我通过在每个问题中嵌入一个id锚来提供指向每个特定问题的链接,以便其他人可以链接到它 问题格式结构如下:Javascript scrollIntoView()不是页面加载时的函数吗?,javascript,jquery,Javascript,Jquery,我有一套常见问题解答,默认情况下我隐藏了答案,只留下问题,并且我通过在每个问题中嵌入一个id锚来提供指向每个特定问题的链接,以便其他人可以链接到它 问题格式结构如下: <div class="contents"> <h1 class="question" id="titleOfQuestion">Some Question Title</h1> <div class="answer" id="titleOfQuestion">>
<div class="contents">
<h1 class="question" id="titleOfQuestion">Some Question Title</h1>
<div class="answer" id="titleOfQuestion">>
Some Answer
</div>
</div>
我收到Firebug中的错误:TypeError:$(…)。scrollIntoView不是一个函数。但是,如果我随后从同一位置重新加载URL,则不会起作用
这是怎么回事 是domapi的一部分,而不是jQuery。您需要在元素而不是jQuery对象上运行它:
$('div#' + id)[0].scrollIntoView();
另请参见此好的,下面是一个解决方案示例:
HTML:
<div id="view1">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view2">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view3">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
div{height:800px; margin:20px; background:#CCC; text-align:center}
i{cursor:pointer; display:inline-block}
i:hover{background:#C00}
function gotoView(viewId){
document.getElementById("view" + viewId).scrollIntoView();
window.location.hash = "view" + viewId;
}
JavaScript:
<div id="view1">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view2">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view3">
<i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
div{height:800px; margin:20px; background:#CCC; text-align:center}
i{cursor:pointer; display:inline-block}
i:hover{background:#C00}
function gotoView(viewId){
document.getElementById("view" + viewId).scrollIntoView();
window.location.hash = "view" + viewId;
}
试试这个,更好地理解它。我也试过这个,所有浏览器的结果都一样。在页面加载时,我不再收到未定义的消息,但它仍然无法工作。您是否在$(文档)中执行此操作。准备好了回调,以确保DOM已准备好访问?是的,包装在文档准备好的处理程序中。此方法的作用也类似于上述方法。初始URL加载不会触发scrollIntoView()
,但是如果我在浏览器中重新加载它,scrollIntoView()
会工作。我在jQuery对象上运行它时犯了同样的错误。这对我有用。谢谢!!这并不能完全回答问题,因为scrollIntoView()不适用于DOMContentLoaded或任何其他用于检查DOM是否已就绪/页面是否已加载的方法。我在任何地方都找不到任何文档/注释,无法找到scrollIntoView()在页面加载时不起作用的原因。但是,我可以通过使用稍微昂贵但可靠的选项来解决这个问题-window.scrollTo({top:document.querySelector('.your selector here').offsetTop,行为:'smooth'})代码>为什么要在H1和Div中放置相同的id titleOfQuestion。请同时回答这两个问题?因为它们在语义上是相关的,在它们之间提供某种链接是有意义的。但是,不允许对多个元素保持相同的id titleOfQuestion。Javascript不是那样工作的。