AIM
在刷新浏览器之后,我希望用户在刷新之前停留在他们所在的菜单/内容中。
问题
刷新浏览器后,用户在刷新之前所在的特定菜单的内容显示为active (即显示在屏幕上)。但是,该特定内容的菜单图标没有显示为活动(即它没有显示黑色)。
我很难选择当前href的锚元素(在其中找到图标)(用户在刷新之前就在其中,刷新后也是一样)。
的尝试
$(document).ready(function() {
$('a[class^=menu]').click(function() {
$('a[class^=menu]').removeClass('active');
$('div[class^=content]').removeClass('active');
if($(this).hasClass('menu-1')) {
$('.menu-1').addClass('active');
$('.content-1').addClass('active');
}
if($(this).hasClass('menu-2')) {
$('.menu-2').addClass('active');
$('.content-2').addClass('active');
}
if($(this).hasClass('menu-3')) {
$('.menu-3').addClass('active');
$('.content-3').addClass('active');
}
});
if (window.location.hash.substr(1) != '') {
$('a[class^=menu],div[class^=content]').removeClass('active');
// making the content active
$('#' + window.location.hash.substr(1)).addClass('active');
// making the menu active
$('a[href="' + window.location.hash.substr(1) + '"]').addClass("active");
}
}); .container {
margin: 0 auto;
background-color: #eee;
border: 1px solid lightgrey;
width: 20vw;
height: 90vh;
font-family: sans-serif;
position: relative;
}
header {
background-color: lightgreen;
padding: 5px;
text-align: center;
text-transform: uppercase;
}
.bottom-navbar {
position: absolute;
bottom: 0;
width: 100%;
padding: 6px 0;
overflow: hidden;
background-color: lightgreen;
border-top: 1px solid var(--color-grey-dark-3);
z-index: 50;
display: flex;
justify-content: space-between;
}
.bottom-navbar>a {
display: block;
color: green;
text-align: center;
text-decoration: none;
font-size: 20px;
padding: 0 10px;
}
.bottom-navbar>a.active {
color: black;
}
.menu-1.active,
.menu-2.active,
.menu-3.active {
color: black;
}
.content-1,
.content-2,
.content-3 {
display: none;
}
.content-1.active,
.content-2.active,
.content-3.active {
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
} <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="container">
<header>My header</header>
<div class="main-content">
<div class="content-1 active" id="firstPage">House content</div>
<div class="content-2" id="secondPage">Map content</div>
<div class="content-3" id="thirdPage">Explore content</div>
<div class="bottom-navbar">
<a href="mywebsite#firstPage" class="menu-1 active"><i class="fa fa-home"></i></a>
<a href="mywebsite#secondPage" class="menu-2"><i class="fa fa-map"></i></a>
<a href="mywebsite#thirdPage" class="menu-3"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
谢谢你的帮助和建议。
发布于 2019-12-04 12:53:10
你遇到的问题是你找错了href。
你想找到a[href="secondPage"],但应该是a[href="mywebsite#secondPage"]
另外,我改变了您选择类并将它们添加为活动类的方式。这条路更有活力。
注意:在JS文件中,有一个名为hash的变量,现在它指向#secondPage,以假装我们在第二个页面上,您可以更改值,重新运行它,它将选择一个新的活动项。您只需将hash替换为window.location.hash,我也会将其转换为变量,这样您就不会每次都调用它。
// just replace this with "window.location.hash"
const hash = "#secondPage";
$(document).ready(function() {
$('a[class^=menu]').click(function() {
// we remove the active classes.
$('a[class^=menu]').removeClass('active');
$('div[class^=content]').removeClass('active');
// we get the item that was clicked and select the item
// in a dynamic way.
const clickedClass = $(this).attr('class');
const [identifier, number] = clickedClass.split('-')
$(`.${clickedClass}`).addClass('active');
$(`.content-${number}`).addClass('active');
});
const active = hash.substr(1);
if (active != '') {
$('a[class^=menu],div[class^=content]').removeClass('active');
// making the content active
$(`#${active}`).addClass('active');
// making the menu active
$(`a[href="mywebsite#${active}"]`).addClass("active")
}
});.container {
margin: 0 auto;
background-color: #eee;
border: 1px solid lightgrey;
width: 20vw;
height: 90vh;
font-family: sans-serif;
position: relative;
}
header {
background-color: lightgreen;
padding: 5px;
text-align: center;
text-transform: uppercase;
}
.bottom-navbar {
position: absolute;
bottom: 0;
width: 100%;
padding: 6px 0;
overflow: hidden;
background-color: lightgreen;
border-top: 1px solid var(--color-grey-dark-3);
z-index: 50;
display: flex;
justify-content: space-between;
}
.bottom-navbar>a {
display: block;
color: green;
text-align: center;
text-decoration: none;
font-size: 20px;
padding: 0 10px;
}
.bottom-navbar>a.active {
color: black;
}
.menu-1.active,
.menu-2.active,
.menu-3.active {
color: black;
}
.content-1,
.content-2,
.content-3 {
display: none;
}
.content-1.active,
.content-2.active,
.content-3.active {
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="container">
<header>My header</header>
<div class="main-content">
<div class="content-1 active" id="firstPage">House content</div>
<div class="content-2" id="secondPage">Map content</div>
<div class="content-3" id="thirdPage">Explore content</div>
<div class="bottom-navbar">
<a href="mywebsite#firstPage" class="menu-1 active"><i class="fa fa-home"></i></a>
<a href="mywebsite#secondPage" class="menu-2"><i class="fa fa-map"></i></a>
<a href="mywebsite#thirdPage" class="menu-3"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
发布于 2019-12-04 12:20:08
这听起来像是要向导航中添加一个类,如果它与当前页面url相同的话?
如果你想做这个客户端的事情,这样的事情会有效的。这也可以由服务器(php/c#)处理。
$(function(){
var current = location.pathname;
$('#nav li a').each(function(){
var $this = $(this);
// if the current path is like this link, make it active
if($this.attr('href').indexOf(current) !== -1){
$this.addClass('active');
}
})
})类似的线程/问题-来自Rob M Add Active Navigation Class Based on URL的解析器
https://stackoverflow.com/questions/59175708
复制相似问题