В продолжение цикла статей о js расширениях для сайта, сегодня рассмотрим и реализуем фиксированный виджет. В итоге проделанных работ получится так: когда пользователь прокручивает “лист” сайта книзу (скроллит) – все элементы, а в том числе виджеты сайдбара, уходят за верхнюю границу окна браузера, и только один из них останется “прилепленным” к верхней части окна обозревателя (т.е. будет оставаться видимым).
Для реализации фиксированного сайдбара, всего-то потребуется: 1 – создать небольшой js файл в корне своего шаблона и подключить его к функционалу темы (в футере – footer.php), и второе – настроить определённый виджет (а точнее – его информационную часть, заключённую в idентификатор).
Всё это чудо будет работать на чистейшем js, …и без плагинов – подробнее ниже:
как сделать фиксированный виджет
И эту инструкцию очень важно прочесть: как сделать плавающий виджет, фиксация которого будет отменена достигнув подвала, например. …либо какой-то заданной ID точки.
Преимущества и недостатки виджета построенного по сегодняшней теме:
отличие нынешнего варианта прилепленного (фиксированного) виджета от решений с какими-то плагинами, это то, что в нашем случае фиксируется ID-содержимое текстового виджета – точнее, только помещённая в id-блок информация – не сам виджет (не знаю, может кого-то запутал, но, думаю, далее по тексту станет ясно).
Очень возможно, что для правильной отработки прилепленного виджета, вам потребуется подключить вот эту JS библиотеку: jquery-1.12.4.min.js
…либо перекачать её в корень шаблона, либо с сервера Google, как-нить так:
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
… либо же пройти по ссылке, расположенной чуть ниже, ознакомиться со статьёй… и подключиться к CDN Google.
скрипт для фиксированного виджета
Заходим в ядро (директорию) своего шаблона, отыскиваем папку js
и в ней создаём js-файл с именем:
fixsidy-vidsh.js
Затем пишем и помещаем в него следующий скрипт js
.
function getTopOffset(e) {
var y = 0;
do { y += e.offsetTop; } while (e = e.offsetParent);
return y;
}
var block = document.getElementById('sydy-fix'); /* fix блок НА ЧИСТОМ JS - sydy-fix - ниже значения атрибута id блока */
if ( null != block ) {
var topPos = getTopOffset( block );
window.onscroll = function() {
var newcss = (topPos < window.pageYOffset) ?
'top:8px; position: fixed;' : 'position:static;';
block.setAttribute( 'style', newcss );
}
}
Пояснения:
sydy-fix – это идентификатор блока виджета, в который завёрнут, скажем код рекламы.
Такая примерно конструкция id блока размещённого в текстовом виджете:
<div id="sydy-fix">
Какой-то код...
</div>
top:8px – регулятор отступов от верхнего края.
Полдела – готово!
Далее нужно подключить к id
блоку скрипт обработчик, который мы создали чуть выше…
Открываем файл темы footer.php и перед закрывающим тегом </body> размещаем следующую строку:
<script type='text/javascript' src='/wp-content/themes/ваш_шаблон/js/fixsidy-vidsh.js'></script>
рекомендую ознакомиться с этой статьёй, в которой описывается правильный вариант подключения скриптов js в футер – событие wp_footer !!
и это верный вариант подключения jQuery библиотеки от CDN Google !!
Далее, и это важно обозначить – сказать, что наша работа успешно закончена! ))
как отключить фиксацию виджета на маленьком разрешении экрана
Для тех, которые более изощрённо относятся к своему сайту, предлагаю немного модернизировать созданный функционал фиксации виджета, ибо также поступает много вопросов от владельцев сайтов, о том, что так называемый фиксированный виджет некорректно смотрится на мелких экранах гаджетов, а именно – закрывает собой какую-то часть содержимого…
В самом деле: в наш век мобильного интернета – это серьёзная проблема. А значит целесообразнее настроить регулируемую фиксацию в зависимости от расширения экрана.
Поступим так:
заместо строки, показанной выше, пропишем в футере (или способом, предложенным в статье по ссылке выше) такую:
<script> if (document.body.clientWidth>1023) {document.write("<script type='text/javascript' src='/wp-content/themes/ваш_шаблон/js/fixsidy-vidsh.js'><\/script>");}</script>
…что имеем:
document.body.clientWidth>1023
– ширина экрана, при которой фиксированный виджет отрабатывается в обычном режиме: т.е. как и все съезжает за верхние границы браузера – без фиксации.
Ширину, меняя значения строки, настраиваете такой, которая необходима конкретно вам.
…а на этом…
На этом занавес представления опускается…
…на рампы пыль печальная ложится…
…если возникли вопросы, задавайте – есть же комментарии…
Online консультация по настройкам и созданию сайтов на WordPress
mihalica.ru !
Приветствую!
А можете подсказать, как сделать, чтобы плавающий блок останавливался на футуре.
Заранее спасибо.
Здравствуйте!
То есть чтобы “отлеплялся” доходя до футера?
Нужен немного другой скрипт (в комментарии показать код – длинно слишком, да и нужны кое-какие пояснения) – сейчас попозже в статью добавлю вариант решения…
Будет здорово!
Заранее спасибо!
Я в скриптах совсем никак, попробовал через CSS поставить .footer {clear: both;}, но не сработало.
Нет, таким способом css не сработает…
Вы заглядывайте – я обязательно распишу в этой статье или новую напишу (вот только чуть с делами разберусь).
Спасибо! Буду ждать. Как напишите, если не сложно, киньте коммент сюда, увижу на почте. а так буду просматиривать.
Заранее спасибо.
Да, я вам сообщу… постараюсь сделать быстрее (может, завтра).
Вечер добрый, tstas!
Вот статья, которая рассказывает о том, как сделать плавающий блок, который останавливается у футура. – отключение фиксации виджета ? в заданной точке
Прилепленный виджет — отключение фиксации виджета в заданной точке
.
Здравствуйте Михаил!
Спасибо за статью! Но скрипт Ваш у меня на сайте не работает, как и многие другие. Нашел похожих 5 или 6 решений, но ни один у меня не работает. На прокрутку срабатывает только этот (представленный в данной статье). Но он не останавливается в нужном месте. Посмотрю, еще что можно сделать и склоняюсь к установке плагина.
И вам здравствуйте!
Скрипт непременно должен работать! это бесспорный факт!
Я этот скрипт устанавливаю на многих сайтах: всё ОК.
Вероятно, где-то делаете ошибку… здесь важны и скрипт и отладка CSS.
А возможен (менее вероятно) конфликт установленных на сайте (в шаблоне) скриптов JS…
Разбирайтесь с функционалом ресурса! иначе со временем накопится множество непоняток… хотя, конечно, возможно банально установить плагин. …но и тот может неправильно отрабатывать: что скажется на скорости загрузки страниц!
Да уж плагин совсем не хочется ставить!
CSS, маловероятно, что конфликтует, а пара тройка плагинов оставшихся возможно конфликтуют. Буду разбираться, как разберусь, отпишусь.
Еще раз спасибо, что оперативно написали статью.
…да не за что!
CSS не может конфликтовать, да! (хотя “спорные” селекторы и свойства значений бывают)
Вам Спасибо за внимание и прочтение..!
Подключение библиотек Google проверьте… места (очерёдность) подключений… В статье по ссылке в комменте об этом упоминается.
Не едет даже на дефолтной теме twentyseventeen, ни одного плагина не подключено. (тестовый вордпресс)
Уже вордпресс обновил до последней версии и все равно 0 ???
Правда на сервере настроено кэширование и сжатие, но это явно не причем.
…
Значит, где-то ошибка…
Пробую запустить тестовый сайт… и привязать к нему код из статьи.
Киньте ссылку на тестовый сайт, как протестируете
Заранее спасибо.
Вся требуемая отработка предложенного в НОВОЙ статье кода функционирует и у ВЕРХНЕГО края, и у ПОДВАЛА виджет открепляется… тестировал в базовом шаблоне WP twentysixteen.
Вы ещё раз прочтите эту статью (И НОВУЮ) и всё получится…
…внимательнее отнеситесь к подключению библиотек от
CDN, либо jquery-1.12.4.min.js
На базовом шаблоне WP twentysixteen не стал уже пробовать, на twentyseventeen не сработал.
Пробовал плагин Q2W3 Fixed Widget на премиум тему, тоже криво все выкидывал. Или действительно библиотеки jquery конфликтуют, но тестировал все подключения.
В результате нашел рабочий код скрипта – как в этой Вашей статье, только более расширенный, чуть подправил под себя, и вроде все ОК, работает, вот код, может кому понадобится:
Огромное спасибо за участие и быстрый ответ!
Написанная статья так же интересна и полезна!!!
Ваш блог частенько читаю, Вы молодец!
Нет, имя шаблона в нашем случае ни при чём: и на twentyseventeen работает — просто там нужно с выводом сайдбара разобраться… и конечно же, верное подключение библиотек jquery организовать.
Так что и на twentyseventeen работает код для фиксации виджета, либо произвольного блока.
Представленный вами код мне вроде знаком… однако, лично его не юзал, чтобы что-то предметно о нём говорить, — но, как вижу — в нём привязанные размеры (в плане адаптивности — это не очень мне симпатично — непрактично!)… Попробую на днях.
Вам спасибо! за внимание и лестный отзыв…
И вы молодец! …потому что ищете чистые решения, и не пытаетесь искать единственный ответ в плагинах: не везде и во всём целесообразно использовать плагины!
У меня тоже этот код отказывается работать. Хотя код из предыдущей статьи отлично работал. Там минус конечно в том, что ничего не настраивается.
Где-то допускаете ошибку!.. …либо есть несоответствия (!!) в подключенных библиотеках jquery.
Требуется что-то типа этого:
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
либо CDN.Добавил в статью ссылки о правилах подключениях библиотек JS…
…также путаются с CSS блоками.
JS, предложенный в статье – рабочий 100% !!
P|S
а что вы хотите из настроек кода..?