- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 React(Hooks),我做了很多事情,但几天来我一直卡在一个地方。
我想创建一个 scrollspy 也使用路由 react ,当滚动新菜单处于事件状态时我想更改路由
[请引用此链接][1] 这就是我要实现的目标,这里他们使用的是哈希路由。
我在做什么
我正在努力实现的目标
通过简单的点击路由就可以做到这一点,我可以很容易地实现它,但在这里我想实现其他目标并且很难做到。
JSON 数据
[
{
menu: "HOME",
path: "home",
data:
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
},
{
menu: "PROFILE",
path: "profile",
data:
"The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from 'de Finibus Bonorum et Malorum' by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham."
},
{
menu: "STATUS",
path: "status",
data:
"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English."
},
{
menu: "INFO",
path: "info",
data:
"Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). q"
}
]
在上面的数据中,我有数据,我想在每个相应的路由、滚动或点击时显示这些数据。
点击后,我可以更改路由并呈现点击的页面。
我的代码
下面是我的菜单栏.js文件
<div className="menuBar">
<Nav className="mr-auto ml-1">
{data.map((li, ind) => (
<li className="nav-item" key={li.path}>
<NavLink
className="nav-link"
activeClassName="active"
to={`${li.path}`}
onClick={() => OnclickSidebar(li.menu, li.path)}
>
{li.menu}
</NavLink>
</li>
))}
</Nav>
</div>
route.js文件
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/home" component={Home} />
<Route path="/profile" component={Profile} />
<Route path="/status" component={Status} />
<Route path="/info" component={Info} />
<Route path="/*" component={() => "Page not found"} />
</Switch>
以上是我到现在为止所取得的成就,现在我没有任何前进的想法,所以在这里寻求一些想法。
PS:请引用[This is what I exactly i want][1],这里使用了哈希路由。
编辑/更新
我有上面的数据,我已经分享了我想要实现的链接,我愿意接受关于如何处理这个问题的建议。由于我对这部分完全陌生,不知道我应该如何开始实现这一目标。
分享更多信息
当我打开页面时,初始路线显示 [![检查此图像,它显示公共(public)路线][2]][2]
现在,当我在侧边栏上滚动时,概览变为事件状态并且概览路线显示 [![查看此图片][3]][3]
以上就是我要实现的
类似地,它适用于所有侧边栏菜单,现在侧边栏也有一些子菜单,它们的工作方式完全相同,如果我能够用一个流程实现这个子菜单,我可以自己完成。为此,我只需要一个良好的开端。
[我的代码沙箱链接][4]
如何检查子菜单并在菜单处于事件状态时打开
其实我的数据有一些子菜单
[
{
menu: 'HOME',
path: 'home',
data:
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.",
},
{
menu: 'PROFILE',
path: 'profile',
data:
"The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from 'de Finibus Bonorum et Malorum' by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.",
Sub_menu: [ // some menus have submenus also
{
menu: 'Profile1',
path: '/profile/profile1',
data: 'Some data for the sub menu',
},
{
menu: 'Profile2',
path: '/profile/profile2',
data: 'Some data for the sub menu 2',
},
],
},
{
menu: 'STATUS',
path: 'status',
data:
"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.",
},
{
menu: 'INFO',
path: 'info',
data:
"Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). q",
Sub_menu: [
{
menu: 'info1',
path: '/info/info1',
data: 'Some data for the sub menu info',
},
{
menu: 'info2',
path: '/info/info2',
data: 'Some data for the sub menu info2',
},
],
},
];
[![当具有子菜单的菜单处于事件状态时][5]][5]
[![当子菜单处于事件状态时路线会照常更改][6]][6]
最佳答案
实现是关于三个东西:
在导航栏
中:这里需要第三方库,让我们安装它:
npm install react-router-hash-link
现在,实现它:
import {HashLink} from 'react-router-hash-link';
const NavBar = () => (
<div className="menuBar">
<div className="mr-auto ml-1">
{data.map((item) => (
<li className="nav-item" key={item.path}>
<HashLink to={`#${item.path}`} smooth={true}>
{item.menu}
</HashLink>
</li>
))}
</div>
</div>
);
这时候NavBar
组件就搞定了。让我们继续第二部分,路由器
您需要一个组件来呈现其上的所有数据:
<Route exact={true} path="/" component={Home} />
在示例 Home
组件中,我们需要一个组件来呈现每个部分:
const Section = ({ title, description, path }) => {
const history = useHistory();
useEffect(() => {
const el = document.getElementById(path);
const observer = new window.IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
history.push(`#${path}`);
return;
}
},
{
root: null,
threshold: 0.1 // set offset 0.1 means trigger if atleast 10% of element in viewport
}
);
observer.observe(el);
}, [path, history]);
return (
<div style={{ height: "500px" }}>
<h3 id={path}>{title}</h3>
<p>{description}</p>
</div>
);
};
最重要的魔法就在这里,在 useEffect
Hook 中,当前事件部分已被观看。让我们一起使用 NavBar
和 Section
组件:
const App = () => {
return (
<div>
<div>
<NavBar />
</div>
<div>
{data.map((item) => (
<Section
title={item.menu}
description={item.data}
path={item.path}
key={item.path}
/>
))}
</div>
</div>
);
};
export default App;
此外,您还可以在 codesandbox 上查看简单版本.
关于javascript - 如何使用 React 实现带哈希路由的 Scrollspy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69703295/
我正在制作一个单页网站,我正在尝试让导航栏链接反射(reflect)您所在页面的哪个部分。我试过通过 HTML 使用它但没有成功。我在包含不同部分的容器上有这段代码 并且正文设置为相对的。 因为那行
我正在使用 Scrollspy 的 Jquery 独立实现。我在这里有一个关于我的问题的 jsfiddle 示例:http://jsfiddle.net/2acyu/66/ 当页面向下滚动到 3 个部
我正在制作作品集,但我在使用 Bootstrap 4 时遇到了 2 个问题: 将导航栏链接放在右侧 还有 Bootstrap Scrollspy。 有人可以帮我解决以上两个问题吗? 我已经尝试过来自
我已经在我的应用程序中实现了 Scrollspy。因为我在我的应用程序中使用了 knockout 框架,用户可以在一个部分中添加最多 15 行。所以如果他们添加 15 行,滚动 spy 高度就会受到影
您好,我在使用 Bootstrap Scrollspy 时遇到了两个问题 1- 滚动时,事件类不会在我想要加上的位置突出显示 section4 由于某些奇怪的原因没有激活,见此处: Scrollspy
我似乎无法让 scrollspy 处理隐藏元素。 我将 data-spy="scroll"和 data-target=".classOfNavWrapper"放在 body 上,它并没有像文档暗示的那
如您在此示例中所见,Bootstrap Scrollspy 会跳过导航,但实际上并没有像预期的那样工作。错误的元素是获取 .active 类。 $('.spycontent').scrollspy({
我在我的网站上使用 materializecss scrollspy 组件,scrollspy 链接有效。但唯一困扰我的是 scrollspy 的目录没有跟随滚动位置。
我需要 JQuery 方面的帮助,我相信这可能是显而易见的解决方案,但我不知道如何去做。关于滚动页面上的导航栏,我希望导航栏上的链接之一转到外部页面(而不是页面中的某个部分)。它会这样做,但它会弄乱滚
我试图在我的网站中添加 scrollspy 东西,但目前还没有用。当我在那个部分时,它不会突出显示导航栏中的链接,这是 scrollspy 所做的,所以我无法找出问题所在。我已经粘贴了代码并帮助我弄清
我一直在努力建立我的网站,我真的很想在我的页面上有一些字体很棒的字形,当我滚动时它们会淡入。问题是我不太了解 Spyscroll 或如何使用它。 这是我的代码,也许任何人都可以帮助我。 #sectio
Scrollspy 同时突出显示两个目标,这不是我想要的。我希望它只突出显示一个。它确实突出显示了一个,但是当在两个元素之间滚动时它突出显示了两个。 CSHTML var guid = Guid.Ne
scrollspy 上的事件部分未在导航栏上更新。我不确定我是否缺少脚本或代码中是否有错误。 脚本 /* Navbar Spyscroll */ $('body').scrollspy
scrollspy 效果正常,但突然停止工作。我的意思是当 href 链接像这样 href="#id"时,在滚动单页站点时识别菜单的事件元素。但是当 href 像“/home#id”一样给出时它停止工
你好网络爱好者,我希望你能帮我解决一个问题。 我正在使用 bootstrap 创建一个网站,该网站使用 scrollspy 通过导航栏导航到页面的某些部分。我可以让 URL 不显示的唯一方法 "#se
您好,当我启用移动菜单折叠时,它会停止 scrollspy 的工作。 它们都可以单独工作但不能一起工作,这是 bootstrap 的限制吗? 这是我的导航栏代码:
我一直在使用来自 startbootstrap.com 的名为“创意”的模板,如图所示 here . 因为最后一节太短,当它到达页面底部时,它永远不会被 scrollspy 突出显示。但是,正如您在
首先,如果我重复其他地方发布的内容,我深表歉意。我一直在研究其他人为他们的问题找到的解决方案,并且我已经实现了(或者我认为)他们发现的东西,但我正在开发的网站仍然没有达到预期的效果。 所以,我正在处理
我有一个复选框,当选中该特定复选框时,它会在上面显示一些文本: $('#pck-94').click(function() { $('#pico-info').toggle(this.ch
fiddle :http://jsfiddle.net/bVLBL/ “事件”类未应用于正确的链接。有什么解决办法吗? HTML: Introdu
我是一名优秀的程序员,十分优秀!