Oliver77
Aktives Mitglied
Onepager
Hallo, hier möchte ich ein Script vorstellen, um einen Effekt einzusetzen bei dem die Menüpunkte beim Scrollen hervorgehoben werden.
Für Wordpress empfehle ich das Plugin Custom CSS & JS.
Dort das Script im Footer integrieren.
Das HTML:
Dann ID's vergeben:
Wordpress
jQuery
CSS
Eine Demo gibt es hier:
https://mg-otterson.de/fileadmin/scroll-mark/
Beispiel auf Codepen:
https://codepen.io/Oliver7777/pen/MWROYPY
Hallo, hier möchte ich ein Script vorstellen, um einen Effekt einzusetzen bei dem die Menüpunkte beim Scrollen hervorgehoben werden.
Für Wordpress empfehle ich das Plugin Custom CSS & JS.
Dort das Script im Footer integrieren.
Das HTML:
HTML:
<li class="menu-item"><a href="#">Seite 1</a></li> erstes Element
<li class="menu-item"><a href="#section-2">Seite 2</a></li>
<li class="menu-item"><a href="#section-3">Seite 3</a></li>
HTML:
<h2 id="section-2">Seite 2</h2>
Wordpress
HTML:
Individueller Link:
https://meine-seite.de/#mein-anker
HTML:
Individueller Link Startseite:
https://meine-seite.de/#
jQuery
Javascript:
const primaryMenu = "#site-navigation .menu-item a[href*='#']";
// Die Anker-Selektoren
const menuItem = "#site-navigation .menu-item";
// Die Listelemente der Navigation
const nav = "#site-navigation";
// Der übergeordnete Selektor, hier das Ul
const mobileNav = "nav";
//mobil Navigations-Container
const marginTop = 0;
// Offset-Abstand
const mobileMarginTop = 0;
// Offset-Abstand mobil
const speed = 600;
// Scrollgeschwindigkeit
const mobile = 630;
// Breite der Mobilanisicht
Javascript:
(function ($) {
const primaryMenu = "#site-navigation .menu-item a[href*='#']";
const menuItem = "#site-navigation .menu-item";
const nav = "#site-navigation";
const mobileNav = "nav";
const marginTop = 0;
const mobileMarginTop = 0;
const speed = 600;
const mobile = 630;
var lastId;
var posArray = [];
var eventFlag = true;
var lastIndex;
var indexCount = 0;
var navHeight;
if ($(window).outerWidth() > mobile && $(document).scrollTop() == 0) {
$(menuItem + ":first-child").addClass("scrollact");
}
$(primaryMenu).click(function (event) {
let actMarginTop;
if ($(window).width() < mobile) {
actMarginTop = mobileMarginTop;
navHeight = $(mobileNav).outerHeight();
}
else {
actMarginTop = marginTop;
navHeight = $(nav).outerHeight();
}
event.preventDefault();
var id = $(this).prop("hash");
if (id == "") {
$('html, body').animate({scrollTop: ((0))}, speed);
} else if ($(id).length) {
$('html, body').animate({scrollTop: (($(id).offset().top - navHeight - actMarginTop))}, speed);
}
});
setTimeout(function () {
pos();
}, 200);
$(window).scroll(function () {
if ($(window).width() > mobile) {
var scrollPos = $(document).scrollTop();
$.each(posArray, function (index, value) {
if (scrollPos > value - 1) {
indexCount = index;
if (lastIndex < index) {
eventFlag = true;
}
}
if (scrollPos < value + 1) {
if (lastIndex == index) {
eventFlag = true;
}
}
});
$.each(posArray, function (index, value) {
if (scrollPos > value - 1 && eventFlag) {
if (index == indexCount) {
lastIndex = index;
eventFlag = false;
$(menuItem).removeClass("scrollact");
$(menuItem).eq(index).addClass("scrollact");
}
}
});
if (scrollPos > $(document).height() - 1 - $(window).height()) {
$(menuItem).removeClass("scrollact");
$(primaryMenu).eq(lastId).parent("li").addClass("scrollact");
eventFlag = true;
}
}
});
function pos() {
posArray = [];
navHeight = $(nav).outerHeight();
$(primaryMenu).each(function (index) {
var id = $(this).prop("hash");
if (id == "") {
posArray.push(0);
} else if ($(id).length) {
posArray.push($(id).offset().top - navHeight - marginTop);
lastId = index;
}
});
}
$(window).resize(function () {
if ($(window).outerWidth() > mobile) {
pos();
} else {
$(menuItem).removeClass("scrollact");
}
});
})(jQuery);
CSS:
.scrollact {
background:#f00;
}
Eine Demo gibt es hier:
https://mg-otterson.de/fileadmin/scroll-mark/
Beispiel auf Codepen:
https://codepen.io/Oliver7777/pen/MWROYPY