Подскажите гуру — как реализовать плавающий сайдбар тоесть при прокрутке страницы вниз сайдбар оставался на месте
Это, наверное, лучше назвать — фиксированный сайдбар.
К сожалению это примеры для понимающих что куда :)
Вот с этим что делать?
Теперь добавьте скрипт
// Находим плавающий блок и делаем его плавающим
$('#content-left').stick_in_parent({
// Отступ сверху
offset_top: 20
});
});
Порой полезно видеть то, что желаемо.К сожалению это примеры для понимающих что куда :)
"Своеобразный сайтик" — xyz-nk.ru/news/10-video-i-audio-na-saite.html
На данном сайте, справа внизу — Sticky Block для 2.Х.
Содержимое блока может быть любым — от "Рекламы нет", до "МЭРИЯ — ВСЁ БУДЕТ СРЕДНЕ" и т. п.
Реализация данного блока (для любой ветки) при наличии "тяма" — не вопрос.
создал виджет, задал класс контейнера "Класс CSS для контейнера — sticky-block "
Создал js файл sticky.js в него вставил код:
var a = document.querySelector('.widget sticky-block'), b = null, P = 0; // если ноль заменить на число, то блок будет прилипать до того, как верхний край окна браузера дойдёт до верхнего края элемента. Может быть отрицательным числом
window.addEventListener('scroll', Ascroll, false);
document.body.addEventListener('scroll', Ascroll, false);
function Ascroll() {
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.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 Ra = a.getBoundingClientRect(),
R = Math.round(Ra.top + b.getBoundingClientRect().height — document.querySelector('.footer-wrapper).getBoundingClientRect().top + 0); // footer-wrapper — это название класса блока, в который упрётся плавающий блок при прокрутке, измените его на своё; если ноль заменить на число, то блок будет прилипать до того, как нижний край элемента дойдёт до футера
if ((Ra.top — P) <= 0) {
if ((Ra.top — P) <= R) {
b.className = 'stop';
b.style.top = — R +'px';
} else {
b.className = 'sticky';
b.style.top = P + 'px';
}
} else {
b.className = '';
b.style.top = '';
}
window.addEventListener('resize', function() {
a.children[0].style.width = getComputedStyle(a, '').width
}, false);
}
})
$this->addMainJS("templates/{$this->name}/js/sticky.js");
Но ничего не прилипает
На bootstrap шаблоне для виджетов не вложенных в контейнер работает и без js, одним лишь классом goodtheme.ru/board/8-audi-a4-b8-avant.html + prnt.sc/ryf9k8
Попробуем с плеча. Суть:DeDja, что-то не работает
В main.tpl.php перед </head> линькуем стили,
которые располагаем в соответствующем каталоге:
<link rel="stylesheet" type="text/css" href="/templates/default/css/sticky.css">
Сами стили:
/* = Плавающие блоки - DeDja - 05.03.18 = */ .sticky { position: fixed; z-index: 101; } .stop { position: relative; z-index: 101; } .sticky1 { position: fixed; z-index: 101; } .stop1 { position: relative; z-index: 101; }
При добавлении кода критичным фактором является версия CMS.
Смотрим и думаем.
<?php if($is_sidebar){ ?> <aside> <div class="widget_ajax_wrap" id="widget_pos_right-top"><?php $this->widgets('right-top'); ?></div> <div class="widget_ajax_wrap" id="widget_pos_right-center"><?php $this->widgets('right-center'); ?></div> <div class="widget_ajax_wrap" id="widget_pos_right-bottom"><?php $this->widgets('right-bottom'); ?></div> <!-- ниже дополнительно --> <div class="sticky-block1" style="padding: 0px 0px;"> <div style="height: 250px; padding: 13%; background: #fff; opacity: 1; text-align: center;"> <a href="/media/v4/v4.html" title=""О ежедневных людских подвигах""><img src="/templates/default/images/noreklam.png"/></a> <br> <br> <br> <a href="/media/v5/v5.html" title=""МЭРИЯ - ВСЁ БУДЕТ СРЕДНЕ!""><img src="/templates/default/images/ping.gif"/></a> </div> </div> <script> (function(){ var a = document.querySelector('.sticky-block1'), b = null, P = 0; // если ноль заменить на число, то блок будет прилипать до того, как верхний край окна браузера дойдёт до верхнего края элемента. // Может быть отрицательным числом window.addEventListener('scroll', Ascroll, false); document.body.addEventListener('scroll', Ascroll, false); function Ascroll() { if (b == null) { var Sa = getComputedStyle(a, ''), s = ''; for (var i = 0; i < Sa.length; i++) { if (Sa[i].indexOf('overflow') == 0 || Sa[i].indexOf('padding') == 0 || Sa[i].indexOf('border') == 0 || Sa[i].indexOf('outline') == 0 || Sa[i].indexOf('box-shadow') == 0 || Sa[i].indexOf('background') == 0) { s += Sa[i] + ': ' +Sa.getPropertyValue(Sa[i]) + '; ' } } b = document.createElement('div'); 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 Ra = a.getBoundingClientRect(), R = Math.round(Ra.top + b.getBoundingClientRect().height - document.querySelector('footer').getBoundingClientRect().top + 20); // селектор блока, при достижении верхнего края которого нужно открепить прилипающий элемент; Math.round() только для IE; // если ноль заменить на число, то блок будет прилипать до того, как нижний край элемента дойдёт до футера if ((Ra.top - P) <= 0) { if ((Ra.top - P) <= R) { b.className = 'stop1'; b.style.top = - R +'px'; } else { b.className = 'sticky1'; b.style.top = P + 'px'; } } else { b.className = ''; b.style.top = ''; } window.addEventListener('resize', function() { a.children[0].style.width = getComputedStyle(a, '').width }, false); } })() </script> <!-- выше дополнительно --> </aside> <?php } ?>
Обращаем внимание, что селектором для сдвига является 'footer', а не '.footer-wrapper
Возможны вариации. Успехов.
В скрипте вставил только селектор querySelector('.col-sm-4')
Но возникает вопрос. А как сделать чтобы сайдбар прилепал только в типе контента board? Есть конечно файл шаблона вывода записи board_item.tpl.php но в нем ведь нет блока сайдбар!
Подскажите как быть.
Сайдбар прилипает. Но как сделать чтобы он прилепал только в шаблоне записи? Там ведь нет шаблона сайдбара.
Поднимаю тему.
Сайдбар прилипает. Но как сделать чтобы он прилепал только в шаблоне записи? Там ведь нет шаблона сайдбара.
Я делаю куда проще, беру виджет вставляю на нужную мне страницу и кидаю туда код плавающей фиксированной кнопки. В интернете куча примеров и кнопок.
А пример можно, не понимаю как туда код вставить?и кидаю туда код плавающей фиксированной кнопки