Я использую этот plugin для создания горизонтальной шкалы времени. Вы можете использовать стрелки влево и вправо, чтобы перемещаться между датами. Щелчок по дате изменит нижний колонтитул на тот, который соответствует той же дате.Как проверить видимость элемента, когда он отображается/скрыт с помощью scaleX()?
Моя проблема заключается в следующем: Я пытаюсь узнать, видны ли определенные даты в текущем окне просмотра. Таким образом, в тех случаях, когда первый плагин загружается, отображаются следующие даты: «16 января», «28 февраля», «20 марта», «20 мая». Когда я нажимаю на стрелку вправо, эти даты заменяются следующими датами: «09 июля», «30 августа», «15 сентября», «01 ноября». Теперь, на данный момент, я хотел бы узнать, например, если дата «16 Ян» видна или нет (в этом случае она не видна).
Поскольку каждая дата добавляется в a
элемент, который соответствует каждой дате в виде атрибута data-date
можно получить элемент, который я хочу, чтобы проверить с помощью следующего селектора (например, для «16 января»):
$("a[data-date='16/01/2014'");
Теперь для того, чтобы проверить видимость я пытался два различных подхода:
Первый подход (как показано в этом answer)
$("a[data-date='16/01/2014'").is(':visible');
Этот подход всегда возвращает меня истине и, следовательно, не работает.
Второй подход (как показано в этом answer)
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
И потом:
var a = $("a[data-date='16/01/2014'");
var b = isElementInViewport();
Этот подход всегда возвращает меня истинным и, таким образом, также не работает.
Я понимаю, что эти подходы могут не работать, потому что способ отображения и исчезновения элементов после каждого щелчка стрелки связан с использованием функции CSS scaleX(), влияние которой я не имею в этой конкретной ситуации.
Итак, после всего этого мой вопрос заключается в следующем: возможно ли проверить видимость элементов в этом конкретном случае? И если да, то как я могу это сделать?
Можете ли вы добавить флаг переменной на клик, который говорит 'isDateOpen = true'? или что-то типа того? Поскольку у вас уже есть некоторые функции вокруг него. – ntgCleaner
@ntgCleaner Я мог бы, но для этого мне нужно было бы рассчитать ширину, показанную на странице, общую ширину временной шкалы, рассчитать количество страниц, создать структуру данных, которая связывает даты с соответствующей страницей и тогда, когда я нажимаю на стрелку, добавьте свойство к датам, как вы предлагали. Это, однако, мое последнее средство. Я искал что-то более простое. –