Javascript 哈希不起作用,因为它似乎是一个时间延迟
我有一个可以导航到的域,如下所示:Javascript 哈希不起作用,因为它似乎是一个时间延迟,javascript,reactjs,url,Javascript,Reactjs,Url,我有一个可以导航到的域,如下所示: mydomain.com 页面加载良好。从那里,我可以添加哈希以访问页面的以下部分: mydomain.com#some_place 这似乎可以正常工作。该页面已完全加载 但是,如果我复制粘贴整个域并将其散列到URL中,然后按enter键 mydomain.com#some_place 它不会去某个地方,只是加载,就好像散列不在那里一样 如何进一步排除故障?在useEffect钩子中,将页面重定向到document.location.href,这是带有哈
mydomain.com
页面加载良好。从那里,我可以添加哈希以访问页面的以下部分:
mydomain.com#some_place
这似乎可以正常工作。该页面已完全加载
但是,如果我复制粘贴整个域并将其散列到URL中,然后按enter键
mydomain.com#some_place
它不会去某个地方,只是加载,就好像散列不在那里一样
如何进一步排除故障?在useEffect钩子中,将页面重定向到document.location.href,这是带有哈希的URL 此外,document.location.hash还提供您的哈希 编辑: 以下是经过测试的更新解决方案:
useEffect(() => {
if (document.location.hash) {
const hashElement = document.querySelector(document.location.hash);
hashElement.scrollIntoView();
}
}, []);
在useEffect挂钩中,将页面重定向到document.location.href,这是带有哈希的URL 此外,document.location.hash还提供您的哈希 编辑: 以下是经过测试的更新解决方案:
useEffect(() => {
if (document.location.hash) {
const hashElement = document.querySelector(document.location.hash);
hashElement.scrollIntoView();
}
}, []);
您可以获取哈希值,然后使用以下命令将页面滚动到元素:
React.useEffect(() => {
const url = window.location.hash
const elem = document.getElementById(url)
elem.scrollIntoView()
}, [])
在此处阅读更多信息:您可以获取哈希值,然后使用以下命令将页面滚动到元素:
React.useEffect(() => {
const url = window.location.hash
const elem = document.getElementById(url)
elem.scrollIntoView()
}, [])
在此处阅读更多信息:一旦您的所有组件都安装完毕,请使用内置组件安装生命周期方法以及
this.useScrollTo(element);
其中我们this.useCollTo的定义如下
useScrollTo(element) {
const elementPosition = element.getBoundingClientRect().top;
const offsetPosition = elementPosition - 80;
window.scrollTo({
top: offsetPosition,
behavior: "smooth"
});
}
一旦您的所有组件都安装完毕,请使用内置的componentDidMount生命周期方法以及
this.useScrollTo(element);
其中我们this.useCollTo的定义如下
useScrollTo(element) {
const elementPosition = element.getBoundingClientRect().top;
const offsetPosition = elementPosition - 80;
window.scrollTo({
top: offsetPosition,
behavior: "smooth"
});
}
是否有一种方法可以通过编程读取散列,然后在DOM加载完成后通过编程滚动页面?浏览器不应该知道在页面加载之前不查找散列吗?WTF?是否有一种方法可以通过编程读取散列,然后在DOM加载完成后通过编程滚动页面?浏览器不应该知道在页面加载之前不查找散列吗?WTF?老实说我不知道。这里是我刚刚想到的另一个解决方案:const hashElement=document.querySelectordocument.location.hash;hasElement.scrollIntoView;显然,这一个不做任何刷新。只要在你的useEffect或ComponentDidMount中使用它,我会测试它给我第二次尝试,它在我的代码中起作用。它跳转到哈希链接,您必须在HTML中有一个id=hash的元素才能工作。useffect=>{if document.location.hash{const hashElement=document.querySelectordocument.location.hash;hashElement.scrollIntoView;}}},[];componentDidMount用于类组件,useEffect用于功能组件。你不需要它,它只是你处理功能组件副作用的方式。如果您有类组件,那么无论如何都必须使用componentDidMount。我还测试了我的解决方案,但不知道为什么它会抛出错误。最终,querySelector和getElementById可以执行相同的任务,这只是一个细微的使用差异。我很高兴这对你有用我不知道该说实话。这里是我刚刚想到的另一个解决方案:const hashElement=document.querySelectordocument.location.hash;hasElement.scrollIntoView;显然,这一个不做任何刷新。只要在你的useEffect或ComponentDidMount中使用它,我会测试它给我第二次尝试,它在我的代码中起作用。它跳转到哈希链接,您必须在HTML中有一个id=hash的元素才能工作。useffect=>{if document.location.hash{const hashElement=document.querySelectordocument.location.hash;hashElement.scrollIntoView;}}},[];componentDidMount用于类组件,useEffect用于功能组件。你不需要它,它只是你处理功能组件副作用的方式。如果您有类组件,那么无论如何都必须使用componentDidMount。我还测试了我的解决方案,但不知道为什么它会抛出错误。最终,querySelector和getElementById可以执行相同的任务,这只是一个细微的使用差异。我很高兴它对您的位置有效。哈希会给您哈希,但getElementById只接受哈希,如果您使用querySelector而不是getElementByIdlocation,这会起作用。哈希会给您哈希,但getElementById只接受哈希,如果您使用querySelector而不是getElementById,这会起作用