Фиксированная навигационная панель не предназначена для закрытия ... Ее единственное значение - обеспечить быстрый способ реализации всегда видимой навигационной панели.Итак, в основном вы просите открыть простую панель навигации сразу после инициализации ... Единственная разница между простой и фиксированной панелью навигации в том, что последняя начинает открываться.
Кстати, как вы и думали, вы можете использовать свойство instance.isOpen
, как сказано в Документах до , проверьте , открыт ли sidenav.Если да, закройте его, иначе откройте его.Я использовал плавающую кнопку и прокомментировал триггер по умолчанию для sidenav, так как его функция заменена плавающей кнопкой.
ПРИМЕЧАНИЕ : чтобы увидеть его в действии, вам нужно запустить кодфрагмент и нажмите ссылку FULL PAGE , иначе вы не увидите панель навигации, и вам придется открыть ее вручную.Это потому, что при просмотре кода кажется, что Sidenav закрывается, если ширина окна <992: </p>
Источник: materialize.js (строка 5834)
value: function _handleWindowResize() {
// Only handle horizontal resizes
if (this.lastWindowWidth !== window.innerWidth) {
if (window.innerWidth > 992) {
this.open();
} else {
this.close();
}
}
this.lastWindowWidth = window.innerWidth;
this.lastWindowHeight = window.innerHeight;
}
Вот ваш скрипт:
document.addEventListener("DOMContentLoaded", function() {
var elems = document.querySelectorAll(".sidenav");
var options = {};
var instances = M.Sidenav.init(elems, options);
document
.querySelector("#toggle_sidenav")
.addEventListener("click", function() {
var elem = document.querySelector(".sidenav");
var instance = M.Sidenav.getInstance(elem);
if (instance.isOpen) {
console.log("Is open: I need to close it");
instance.close();
} else {
console.log("Is closed: I need to open it");
instance.open();
}
});
});
header, main, footer {
padding-left: 300px;
}
@media only screen and (max-width: 992px) {
header, main, footer {
padding-left: 0;
}
}
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<ul id="slide-out" class="sidenav sidenav-fixed">
<li><a href="#!">First Sidebar Link</a></li>
<li><a href="#!">Second Sidebar Link</a></li>
</ul>
<!-- <a href="#" data-target="slide-out" class="sidenav-trigger"><i class="material-icons">menu</i></a> -->
<div style='position: absolute; bottom:10px; right:10px'>
<a id="toggle_sidenav" class="btn-floating btn-large waves-effect waves-light red"><i class="material-icons">add</i></a>
</div>