我尝试使用HTML,CSS和Javascript创建一个小的过滤器菜单。
我遇到以下问题:当我单击菜单中除第一个菜单项以外的其他项时,白色“ pill”元素在选定的菜单项上,但是在页面加载后,它返回到第一个元素-单击一个项目,页面将重新加载并转到该部分。
这是菜单,位于第一项的白色药片元素是应保留在所选项上的元素:当前的行为是,例如,当我单击“今天”时,它会移到它上面,但是当页面加载并且我看到“今天”页面时,白色药丸返回到第一个元素。
代码在这里:
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<div id="wrapper-filter">
<ul id="filter-bar">
<span class="pill"></span>
<li class="filter-option option-1 active" data-target="option-1"><a href="{{ route(request()->route()->getName(), 'last-day') }}" class="nav-item nav-link {{ $match_date == $third_day_date? 'active': '' }}">{{ $third_day_date }}</a></li>
<li class="filter-option option-2" data-target="option-2"><a href="{{ route(request()->route()->getName(), 'yesterday') }}" class="nav-item nav-link {{ $match_date == $second_day_date? 'active': '' }}">Yesterday</a></li>
<li class="filter-option option-3" data-target="option-3"><a href="{{ route(request()->route()->getName(), 'today') }}" class="nav-item nav-link {{ $match_date == $today_date? 'active': '' }}">Today</a></li>
<li class="filter-option option-4" data-target="option-4"><a href="{{ route(request()->route()->getName(), 'tomorrow') }}" class="nav-item nav-link {{ $match_date == $tomorrow_date? 'active': '' }}">Tomorrow</a></li>
</ul>
<script>
$(document).ready( function() {
$("#filter-bar li").click(function(){
$("#filter-bar li").removeClass("active");
$(this).addClass("active");
$("#filter-bar").removeClass().addClass($(this).attr("data-target"));
});
})
</script>
</div>
<style>
#filter-bar {
width: 100%;
margin:0;
padding:0;
height:auto;
display:inline-flex;
}
#wrapper-filter {
background-color:#484747;
width: 100%;
height:auto;
margin:30px auto;
border-radius: 30px;
box-sizing: border-box;
}
#filter-bar li {
width: 100%;
background-color: transparent;
text-align: center;
list-style-type: none;
z-index:10;
cursor: pointer;
font-family: Open Sans, sans-serif;
font-weight: 100;
font-size: 18px;
line-height:36px;
}
.pill {
position: absolute;
width:25%;
height: 50px;
background-color: #fff;
border-radius: 30px;
color: #444;
z-index:10;
border: 5px solid #eee;
box-sizing: border-box;
}
.filter-option {
transition: color 500ms;
}
#filter-bar.option-1 .pill {
margin-left: 0%;
transition: margin-left 200ms ease;
}
#filter-bar.option-2 .pill {
margin-left: 24.5%;
transition: margin-left 200ms ease;
}
#filter-bar.option-3 .pill {
margin-left: 48.8%;
transition: margin-left 200ms ease;
}
#filter-bar.option-4 .pill {
margin-left: 72.5%;
transition: margin-left 200ms ease;
}
.option-1.active{
color:#484747; transition: color 200ms;
}
.option-2.active{
color:#484747; transition: color 200ms;
}
.option-3.active{
color:#484747; transition: color 200ms;
} .
.option-4.active {
color:#484747; transition: color 200ms; }
.nav-item {
margin: 0 1px;
position: relative;
}
.nav-item .nav-link {
text-transform: uppercase;
font-weight: 600;
}
.nav-item::before {
position: absolute;
width:25%;
height: 50px;
background-color: #fff;
border-radius: 30px;
color: #444;
z-index:10;
border: 5px solid #eee;
box-sizing: border-box;
-webkit-transform: scaleY(0);
transform: scaleY(0);
-webkit-transform-origin: top;
transform-origin: top;
transition: -webkit-transform .3s ease;
transition: transform .3s ease;
transition: transform .3s ease, -webkit-transform .3s ease;
}
</style>
如何使白色药丸元素保留在菜单的单击项上? 我认为可能需要更改的项目是CSS末尾的项目,“。nav-item :: before” ...但我不确定。谁能帮我吗?
答案 0 :(得分:0)
这是因为您没有重定向URL。 一种解决方案是创建排序选项卡。 This相当简化了解释,因此请检查一下。它显示了如何创建整页标签。
答案 1 :(得分:0)
您正在使用作为链接的标签。当您单击它们时,将加载链接地址。您可以防止如图所示的默认行为,但是您要做什么?
$(document).ready( function() {
$("#filter-bar li").click(function(){
event.preventDefault();
$("#filter-bar li").removeClass("active");
console.log(this);
$(this).addClass("active");
$("#filter-bar").removeClass().addClass($(this).attr("data-target"));
});
})
#filter-bar {
width: 100%;
margin:0;
padding:0;
height:auto;
display:inline-flex;
}
#wrapper-filter {
background-color:#484747;
width: 100%;
height:auto;
margin:30px auto;
border-radius: 30px;
box-sizing: border-box;
}
#filter-bar li {
width: 100%;
background-color: transparent;
text-align: center;
list-style-type: none;
z-index:10;
cursor: pointer;
font-family: Open Sans, sans-serif;
font-weight: 100;
font-size: 18px;
line-height:36px;
}
.pill {
position: absolute;
width:25%;
height: 50px;
background-color: #fff;
border-radius: 30px;
color: #444;
z-index:10;
border: 5px solid #eee;
box-sizing: border-box;
}
.filter-option {
transition: color 500ms;
}
#filter-bar.option-1 .pill {
margin-left: 0%;
transition: margin-left 200ms ease;
}
#filter-bar.option-2 .pill {
margin-left: 24.5%;
transition: margin-left 200ms ease;
}
#filter-bar.option-3 .pill {
margin-left: 48.8%;
transition: margin-left 200ms ease;
}
#filter-bar.option-4 .pill {
margin-left: 72.5%;
transition: margin-left 200ms ease;
}
.option-1.active{
color:#484747; transition: color 200ms;
}
.option-2.active{
color:#484747; transition: color 200ms;
}
.option-3.active{
color:#484747; transition: color 200ms;
} .
.option-4.active {
color:#484747; transition: color 200ms; }
.nav-item {
margin: 0 1px;
position: relative;
}
.nav-item .nav-link {
text-transform: uppercase;
font-weight: 600;
}
.nav-item::before {
position: absolute;
width:25%;
height: 50px;
background-color: #fff;
border-radius: 30px;
color: #444;
z-index:10;
border: 5px solid #eee;
box-sizing: border-box;
-webkit-transform: scaleY(0);
transform: scaleY(0);
-webkit-transform-origin: top;
transform-origin: top;
transition: -webkit-transform .3s ease;
transition: transform .3s ease;
transition: transform .3s ease, -webkit-transform .3s ease;
}
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<div id="wrapper-filter">
<ul id="filter-bar">
<span class="pill"></span>
<li class="filter-option option-1 active" data-target="option-1"><a href="{{ route(request()->route()->getName(), 'last-day') }}" class="nav-item nav-link {{ $match_date == $third_day_date? 'active': '' }}">{{ $third_day_date }}</a></li>
<li class="filter-option option-2" data-target="option-2"><a href="{{ route(request()->route()->getName(), 'yesterday') }}" class="nav-item nav-link {{ $match_date == $second_day_date? 'active': '' }}">Yesterday</a></li>
<li class="filter-option option-3" data-target="option-3"><a href="{{ route(request()->route()->getName(), 'today') }}" class="nav-item nav-link {{ $match_date == $today_date? 'active': '' }}">Today</a></li>
<li class="filter-option option-4" data-target="option-4"><a href="{{ route(request()->route()->getName(), 'tomorrow') }}" class="nav-item nav-link {{ $match_date == $tomorrow_date? 'active': '' }}">Tomorrow</a></li>
</ul>
</div>