Сброс стиля transofrm при клике на ссылку на секцию
Вот ссылка на pen проекта https://codepen.io/LionCane/pen/KKdmEPZ Была задумка сделать выезжающее меню слева и сдвиг контента сайта при раскрытие этого меню. Всё работает хорошо, но при клике на ссылку, чтобы перейти в секцию, сбрасывается стиль transoform: translateX(30%) у блока content.
<a href="#main" class="menu_link">Главная</a>
<a href="#news" class="menu_link">Новости</a>
<a href="#contacts" class="menu_link">Контакты</a>
<a href="#portfolio" class="menu_link">Портфолио</a>
То есть открыв меню, нажав на ссылку происходит скролл до секции, после чего блок content становиться в обычное положение без стиля transform.
.content_active {
transform: translateX(30%);
}
Подскажите, пожалуйста, в чём может быть проблема ( preventDefault пробовал, он уберёт возможность переходить по блокам по id").
Ответы (2 шт):
myclass.addEventListener("click", function(){
$('.content_active').attr('style', 'transform'); // Именно УДАЛИТ свойство style
});
А такой вариант, вместо transform: translateX(30%); для .content_active использовать margin-left: 30%; для .content_active>section? Принцип тот же, но вопрос решается. Пример:
upd. упс, что-то я, кажется, не то сделал. Вероятно, нужно было прятать блок с меню при клике на любую ссылку?
$('.menu-btn').on('click', function(e) {
e.preventDefault();
$('.menu').toggleClass('menu_active');
$('.content').toggleClass('content_active');
})
$('.menu_link').on('click', function(event) {
event.preventDefault();
if (this.hash !== "") {
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
}
});
body {margin: 0; padding: 0;}
section {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
}
.main {
background-color: #27ae60;
}
.news {
background-color: #9b59b6;
}
.contacts {
background-color: #3498db;
}
.portfolio {
background-color: #f1c40f;
}
.wrapper {
position: relative;
overflow-x: hidden;
}
.menu {
position: fixed;
left: 0;top: 0;
z-index: 99;
width: 30%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
transition: 0.5s;
transform: translateX(-100%);
}
.menu_active {
transform: translateX(0%);
}
.menu-list {
display: flex;
justify-content: space-around;
align-items: center;
height: 50%;
flex-direction: column;
}
.menu-list a {
text-decoration: none;
text-transform: uppercase;
font-weight: 900;
}
.menu-btn {
width: 30px;
height: 30px;
background-color: #333;
position: absolute;
right: -35px;
top: 10px;
}
.content {
transition: 0.5s;
position: relative;
z-index: 0;
}
.content>section {
transition: all 0.6s;
}
.content_active {
/*transform: translateX(30%);*/
}
.content_active>section {
margin-left: 30%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="menu">
<a href="#" class="menu-btn"></a>
<nav class="menu-list">
<a href="#main" class="menu_link">Главная</a>
<a href="#news" class="menu_link">Новости</a>
<a href="#contacts" class="menu_link">Контакты</a>
<a href="#portfolio" class="menu_link">Портфолио</a>
</nav>
</div>
<div class="content">
<section class="main" id="main">
<h2>Главная</h2>
</section>
<section class="news" id="news">
<h2>Новости</h2>
</section>
<section class="contacts" id="contacts">
<h2>Контакты</h2>
</section>
<section class="portfolio" id="portfolio">
<h2>Портфолио</h2>
</section>
</div>
</div>
Убрать блок при клике:
$('.menu-btn').on('click', function(e) {
e.preventDefault();
$('.menu').toggleClass('menu_active');
$('.content').toggleClass('content_active');
})
$('.menu_link').on('click', function(event) {
event.preventDefault();
if (this.hash !== "") {
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
$('.menu').removeClass('menu_active');
$('.content').removeClass('content_active');
}
});
body {margin: 0; padding: 0;}
section {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
}
.main {
background-color: #27ae60;
}
.news {
background-color: #9b59b6;
}
.contacts {
background-color: #3498db;
}
.portfolio {
background-color: #f1c40f;
}
.wrapper {
position: relative;
overflow-x: hidden;
}
.menu {
position: fixed;
left: 0;top: 0;
z-index: 99;
width: 30%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
transition: 0.5s;
transform: translateX(-100%);
}
.menu_active {
transform: translateX(0%);
}
.menu-list {
display: flex;
justify-content: space-around;
align-items: center;
height: 50%;
flex-direction: column;
}
.menu-list a {
text-decoration: none;
text-transform: uppercase;
font-weight: 900;
}
.menu-btn {
width: 30px;
height: 30px;
background-color: #333;
position: absolute;
right: -35px;
top: 10px;
}
.content {
transition: 0.5s;
position: relative;
z-index: 0;
}
.content>section {
transition: all 0.6s;
}
.content_active {
transform: translateX(30%);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="menu">
<a href="#" class="menu-btn"></a>
<nav class="menu-list">
<a href="#main" class="menu_link">Главная</a>
<a href="#news" class="menu_link">Новости</a>
<a href="#contacts" class="menu_link">Контакты</a>
<a href="#portfolio" class="menu_link">Портфолио</a>
</nav>
</div>
<div class="content">
<section class="main" id="main">
<h2>Главная</h2>
</section>
<section class="news" id="news">
<h2>Новости</h2>
</section>
<section class="contacts" id="contacts">
<h2>Контакты</h2>
</section>
<section class="portfolio" id="portfolio">
<h2>Портфолио</h2>
</section>
</div>
</div>