#javascript
#javascript
Вопрос:
У меня есть простой скрипт, который перемещает определенные блоки при прокрутке. Кажется, он отлично работает во всех браузерах, кроме IE, и я не могу понять, почему. Я скомпилировал код с использованием babel в ECMA5, надеясь, что это поможет, но это не поможет.
Это JS
function slideIn(e) {
sliderImages.forEach(function (sliderImage) {
var slideInAt = window.scrollY window.innerHeight;
var imageBottom = sliderImage.offsetTop sliderImage.offsetHeight;
var isHalfShown = slideInAt > sliderImage.offsetTop;
var isNotScrolledPast = window.scrollY < imageBottom;
if (isHalfShown amp;amp; isNotScrolledPast) {
sliderImage.classList.add('visible');
} else {
sliderImage.classList.remove('visible');
}
});
}
Если у кого-нибудь когда-либо была подобная проблема и он знает, с чем это может быть связано, это было бы очень ценно!
Комментарии:
1. Вместо этого используйте IntersectionObserver в качестве прогрессивного улучшения. (Некоторые могут возразить, что перемещение объектов при прокрутке не является улучшением, но применяется тот же принцип.)
2. Я ценю комментарий, но в предоставленной вами ссылке говорится, что ни один из них не поддерживается в IE.
3. Правильно, идея состоит в том, чтобы отказаться от анимации в IE. Просто постоянно отображайте содержимое.
4. Список классов не поддерживается InternetExplorer.
5. «Не работает» — это не ошибка. Какую ошибку вы получаете?
Ответ №1:
Вопрос в том, почему слайды не скользят и не скользят в IE, но в некоторых других браузерах все в порядке.
Приведенный код использует classList, и он недоступен (или, по крайней мере, не полностью) в IE, как прокомментировал @Carlos1232. Это, вероятно, единственная проблема IE, связанная с данным кодом.
Вы можете заменить эти строки:
sliderImage.classList.add('visible');
sliderImage.classList.remove('visible');
с
add(sliderImage,'visible');
remove(sliderImage,'visible');
если вы добавите две функции ниже. Они проверяют, реализован ли classList в браузере, и если это не так, они вместо этого получают className (что нормально для IE> = 9) и анализируют строку, которую он содержит, чтобы добавить / удалить требуемый класс.
function add(element,cl) {
if (element.classList) {
element.classList.add(cl);
}
else {
if (element.className.split(" ").indexOf(cl) == -1) {
element.className = " " cl;
}
}
}
function remove(element,cl) {
if (element.classList) {
element.classList.remove(cl);
}
else {
element.className = element.className.replace(/bclb/g, "");
}
}