Плавающий сайдбар

#1 10 сентября 2013 в 17:06
Подскажите гуру — как реализовать плавающий сайдбар тоесть при прокрутке страницы вниз сайдбар оставался на месте
#2 10 сентября 2013 в 17:29
#3 10 сентября 2013 в 19:42


Подскажите гуру — как реализовать плавающий сайдбар тоесть при прокрутке страницы вниз сайдбар оставался на месте

hydraq

Это, наверное, лучше назвать — фиксированный сайдбар.
#4 13 апреля 2020 в 13:06
Поднимаю тему. Как сделать плавающий сайдбар, но и вывести в нем нужные поля! Аля ака на Авито :)
#5 13 апреля 2020 в 13:17

Как сделать плавающий сайдбар

Capitan
тыц
тыц
тыц
и т.д.
#6 13 апреля 2020 в 13:31
чебурек дохлэй мыш,
К сожалению это примеры для понимающих что куда :)
Вот с этим что делать?
Теперь добавьте скрипт
$(document).ready(function(){

// Находим плавающий блок и делаем его плавающим
$('#content-left').stick_in_parent({
// Отступ сверху
offset_top: 20
});
});
#7 13 апреля 2020 в 14:18

К сожалению это примеры для понимающих что куда :)

Capitan
Порой полезно видеть то, что желаемо.
"Своеобразный сайтик" — xyz-nk.ru/news/10-video-i-audio-na-saite.html
На данном сайте, справа внизу — Sticky Block для 2.Х.
Содержимое блока может быть любым — от "Рекламы нет", до "МЭРИЯ — ВСЁ БУДЕТ СРЕДНЕ" и т. п.
Реализация данного блока (для любой ветки) при наличии "тяма" — не вопрос.
#8 13 апреля 2020 в 15:04
DeDja, что-то не работает
создал виджет, задал класс контейнера "Класс CSS для контейнера — sticky-block "
Создал js файл sticky.js в него вставил код:
(function(){
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");

Но ничего не прилипает
#9 13 апреля 2020 в 15:53
Верстать надо панимаючи это дело — medium.com/web-standards/sticky-bc7ff7088693
На bootstrap шаблоне для виджетов не вложенных в контейнер работает и без js, одним лишь классом goodtheme.ru/board/8-audi-a4-b8-avant.html + prnt.sc/ryf9k8
#10 13 апреля 2020 в 16:07
GoodMade, Не по теме но все же У вас на демо сайте характеристики авто подгружаются автоматом или ручками вбивать надо при добавлении каждого объявления?
#11 13 апреля 2020 в 16:24

DeDja, что-то не работает

Capitan
Попробуем с плеча. Суть:

В main.tpl.php перед </head> линькуем стили,
которые располагаем в соответствующем каталоге:

<link rel="stylesheet" type="text/css" href="/templates/default/css/sticky.css">

Сами стили:
  1.  
  2. /* = Плавающие блоки - DeDja - 05.03.18 = */
  3. .sticky {
  4. position: fixed;
  5. z-index: 101;
  6. }
  7. .stop {
  8. position: relative;
  9. z-index: 101;
  10. }
  11. .sticky1 {
  12. position: fixed;
  13. z-index: 101;
  14. }
  15. .stop1 {
  16. position: relative;
  17. z-index: 101;
  18. }
  19.  
В main.tpl.php добавляем sticky-block (см. дополнительно):
При добавлении кода критичным фактором является версия CMS.
Смотрим и думаем.

  1.  
  2. <?php if($is_sidebar){ ?>
  3. <aside>
  4.  
  5. <div class="widget_ajax_wrap" id="widget_pos_right-top"><?php $this->widgets('right-top'); ?></div>
  6. <div class="widget_ajax_wrap" id="widget_pos_right-center"><?php $this->widgets('right-center'); ?></div>
  7. <div class="widget_ajax_wrap" id="widget_pos_right-bottom"><?php $this->widgets('right-bottom'); ?></div>
  8.  
  9. <!-- ниже дополнительно -->
  10.  
  11. <div class="sticky-block1" style="padding: 0px 0px;">
  12. <div style="height: 250px; padding: 13%; background: #fff; opacity: 1; text-align: center;">
  13. <a href="/media/v4/v4.html" title="&quot;О ежедневных людских подвигах&quot;"><img src="/templates/default/images/noreklam.png"/></a>
  14.  
  15. <br>
  16. <br>
  17. <br>
  18.  
  19. <a href="/media/v5/v5.html" title="&quot;МЭРИЯ - ВСЁ БУДЕТ СРЕДНЕ!&quot;"><img src="/templates/default/images/ping.gif"/></a>
  20. </div>
  21. </div>
  22.  
  23. <script>
  24. (function(){
  25. var a = document.querySelector('.sticky-block1'), b = null, P = 0;
  26. // если ноль заменить на число, то блок будет прилипать до того, как верхний край окна браузера дойдёт до верхнего края элемента.
  27. // Может быть отрицательным числом
  28. window.addEventListener('scroll', Ascroll, false);
  29. document.body.addEventListener('scroll', Ascroll, false);
  30. function Ascroll() {
  31. if (b == null) {
  32. var Sa = getComputedStyle(a, ''), s = '';
  33. for (var i = 0; i < Sa.length; i++) {
  34. 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) {
  35. s += Sa[i] + ': ' +Sa.getPropertyValue(Sa[i]) + '; '
  36. }
  37. }
  38. b = document.createElement('div');
  39. b.style.cssText = s + ' box-sizing: border-box; width: ' + a.offsetWidth + 'px;';
  40. a.insertBefore(b, a.firstChild);
  41. var l = a.childNodes.length;
  42. for (var i = 1; i < l; i++) {
  43. b.appendChild(a.childNodes[1]);
  44. }
  45. a.style.height = b.getBoundingClientRect().height + 'px';
  46. a.style.padding = '0';
  47. a.style.border = '0';
  48. }
  49. var Ra = a.getBoundingClientRect(),
  50. R = Math.round(Ra.top + b.getBoundingClientRect().height - document.querySelector('footer').getBoundingClientRect().top + 20);
  51. // селектор блока, при достижении верхнего края которого нужно открепить прилипающий элемент; Math.round() только для IE;
  52. // если ноль заменить на число, то блок будет прилипать до того, как нижний край элемента дойдёт до футера
  53. if ((Ra.top - P) <= 0) {
  54. if ((Ra.top - P) <= R) {
  55. b.className = 'stop1';
  56. b.style.top = - R +'px';
  57. } else {
  58. b.className = 'sticky1';
  59. b.style.top = P + 'px';
  60. }
  61. } else {
  62. b.className = '';
  63. b.style.top = '';
  64. }
  65. window.addEventListener('resize', function() {
  66. a.children[0].style.width = getComputedStyle(a, '').width
  67. }, false);
  68. }
  69. })()
  70. </script>
  71.  
  72. <!-- выше дополнительно -->
  73.  
  74. </aside>
  75. <?php } ?>
  76.  
Мои медиа ссылки заменяем на свои любые иные.

Обращаем внимание, что селектором для сдвига является 'footer', а не '.footer-wrapper

Возможны вариации. Успехов.
#12 13 апреля 2020 в 23:47
А почему скрипт нельзя вынести в папку JS?
В скрипте вставил только селектор querySelector('.col-sm-4')
Но возникает вопрос. А как сделать чтобы сайдбар прилепал только в типе контента board? Есть конечно файл шаблона вывода записи board_item.tpl.php но в нем ведь нет блока сайдбар!
Подскажите как быть.
#13 18 апреля 2020 в 11:38
Поднимаю тему.
Сайдбар прилипает. Но как сделать чтобы он прилепал только в шаблоне записи? Там ведь нет шаблона сайдбара.
#14 18 апреля 2020 в 12:46


Поднимаю тему.
Сайдбар прилипает. Но как сделать чтобы он прилепал только в шаблоне записи? Там ведь нет шаблона сайдбара.

Capitan

Я делаю куда проще, беру виджет вставляю на нужную мне страницу и кидаю туда код плавающей фиксированной кнопки. В интернете куча примеров и кнопок.
#15 18 апреля 2020 в 13:26
@Happy2019,

и кидаю туда код плавающей фиксированной кнопки

@Happy2019
А пример можно, не понимаю как туда код вставить?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.