У меня есть простое меню, состоящее из элементов списка, которое плавает над контейнерами полной ширины. Поскольку некоторые из этих контейнеров более темные, чем остальные, я хотел бы иметь возможность определить, когда на них находят элементы из меню.Соответствующие смещения плавающего меню и контейнеров для изменения класса
Поэтому я добавил некоторые классы в контейнеры, которые темнее и написал функцию, которая получает их смещения:
function getOffsets(){
var offsets = [],
colorChangers = $(".colorChange").length,
top,
bottom;
for(i = 0; i < colorChangers; i++){
top = $(".colorChange").eq(i).offset().top; // where container begins
bottom = top + $(".colorChange").eq(i).css("height"); // where container ends
offsets.push(top);
offsets.push(bottom);
}
return offsets;
}
Далее я хочу сравнить зачеты .colorChange контейнеров и элементы меню во время прокрутки окна мероприятие. В случае совпадения я хочу, чтобы переключить дополнительный класс этого элемента в меню:
function setMenu(toggleAt){
var winScrollTop = $(window).scrollTop(),
newPos = 90 + winScrollTop,
topPos,
item = $("#FloatMenu ul li"),
menuItems = item.length;
if(winScrollTop > 90){
$("#FloatMenu").is(":visible") ? "" : $("#FloatMenu").show();
topPos = (newPos - 90) + 10;
$("#FloatMenu").css("top", topPos);
} else{
$("#FloatMenu").hide();
}
for(i = 0; i < menuItems; i++){
$this = item.eq(i);
for(var j in toggleAt){
$this.offset().top == toggleAt[j] ? $this.toggleClass("white") : ""; // toggle class "white"
}
}
}
К сожалению, это не работает должным образом (время от времени, если вы используете скроллбар медленно), любая идея почему? Вот fiddle
метод document.elementFromPoint возвращает ближайший элемент, который не обязательно означает, что она имеет ту же вершину смещения, поскольку каждый из пунктов меню. Поэтому они превращаются в белый путь к раннему. Спасибо за ответ, хотя –
elementFromPoint возвращает элемент в заданной точке документа ... самый верхний элемент. Ваша задача найти контейнер colorChange относительно elementFromPoint, с методом parent() или любым другим полезным методом ... https://developer.mozilla.org/en-US/docs/Web/API/document.elementFromPoint –