- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
При прокрутке страницы вниз, левый div фиксирует позицию после того как доскролили до его низа. Как сделать, чтобы тоже самое действие выполнялось и с правым div?
Дублирование переменной и замена на aside2 не помогло.
Имеется следующий код:
<style>
article {
height: auto;
}
.sticky {
position: fixed;
z-index: 101;
}
.stop {
position: relative;
z-index: 101;
}
</style>
Функция
var a = document.querySelector('#aside1'), b = null, K = null, Z = 0, P = 0, N = 0; // если у P ноль заменить на число, то блок будет прилипать до того, как верхний край окна браузера дойдёт до верхнего края элемента, если у N — нижний край дойдёт до нижнего края элемента. Может быть отрицательным числом
window.addEventListener('scroll', Ascroll, false);
document.body.addEventListener('scroll', Ascroll, false);
function Ascroll() {
var Ra = a.getBoundingClientRect(),
R1bottom = document.querySelector('#article').getBoundingClientRect().bottom;
if (Ra.bottom < R1bottom) {
if (b == null) {
var Sa = getComputedStyle(a, ''), s = '';
for (var i = 0; i < Sa.length; i++) {
if (Sa.indexOf('overflow') == 0 || Sa.indexOf('padding') == 0 || Sa.indexOf('border') == 0 || Sa.indexOf('outline') == 0 || Sa.indexOf('box-shadow') == 0 || Sa.indexOf('background') == 0) {
s += Sa + ': ' +Sa.getPropertyValue(Sa) + '; '
}
}
b = document.createElement('div');
b.className = "stop";
b.style.cssText = s + ' box-sizing: border-box; width: ' + a.offsetWidth + 'px;';
a.insertBefore(b, a.firstChild);
var l = a.childNodes.length;
for (var i = 1; i < l; i++) {
b.appendChild(a.childNodes[1]);
}
a.style.height = b.getBoundingClientRect().height + 'px';
a.style.padding = '0';
a.style.border = '0';
}
var Rb = b.getBoundingClientRect(),
Rh = Ra.top + Rb.height,
W = document.documentElement.clientHeight,
R1 = Math.round(Rh - R1bottom),
R2 = Math.round(Rh - W);
if (Rb.height > W) {
if (Ra.top < K) { // скролл вниз
if (R2 + N > R1) { // не дойти до низа
if (Rb.bottom - W + N <= 0) { // подцепиться
b.className = 'sticky2';
b.style.top = W - Rb.height - N + 'px';
Z = N + Ra.top + Rb.height - W;
} else {
b.className = 'stop';
b.style.top = - Z + 'px';
}
} else {
b.className = 'stop';
b.style.top = - R1 +'px';
Z = R1;
}
} else { // скролл вверх
if (Ra.top - P < 0) { // не дойти до верха
if (Rb.top - P >= 0) { // подцепиться
b.className = 'sticky2';
b.style.top = P + 'px';
Z = Ra.top - P;
} else {
b.className = 'stop';
b.style.top = - Z + 'px';
}
} else {
b.className = '';
b.style.top = '';
Z = 0;
}
}
K = Ra.top;
} else {
if ((Ra.top - P) <= 0) {
if ((Ra.top - P) <= R1) {
b.className = 'stop';
b.style.top = - R1 +'px';
} else {
b.className = 'sticky2';
b.style.top = P + 'px';
}
} else {
b.className = '';
b.style.top = '';
}
}
window.addEventListener('resize', function() {
a.children[0].style.width = getComputedStyle(a, '').width
}, false);
}
}
})()