Affix не работает в Bootstrap 4 (альфа)
В соответствии с Bootstrap 3 документами я добавил следующие атрибуты в навигационную панель:
<nav class="navbar no-margin-bottom" data-spy="affix" data-offset-top="90" >
...
</nav>
После прокрутки страницы Bootstrap 4 не добавляет класс на navbar, который является аффикс. Может ли кто-нибудь сказать мне, как решить эту проблему? Bootstrap.js и jQuery.js работают.
Ответы
Ответ 1
Хотя аффикс удален из Bootstrap в версии 4. Однако вы можете достичь своей цели с помощью этого кода jQuery:
$(window).on('scroll', function(event) {
var scrollValue = $(window).scrollTop();
if (scrollValue == settings.scrollTopPx || scrollValue > 70) {
$('.navbar').addClass('fixed-top');
}
});
Ответ 2
Из документации bootstrap v4:
Отбросил плагин Affix jQuery. Вместо этого рекомендуется использовать position: sticky
polyfill. См. HTML5 Пожалуйста, введите для получения более подробной информации и конкретных рекомендаций polyfill.
Если вы использовали Affix для применения дополнительных стилей position
, полиполки могут не поддерживать ваш прецедент. Одним из вариантов такого использования является сторонняя библиотека ScrollPos-Styler.
Ответ 3
Обновление Bootstrap 4
В документах рекомендуется использовать липкий полифилл, а рекомендуемый ScrollPos-Styler не очень помогает с позицией прокрутки (вы можете легко определить смещение).
Я думаю, что проще использовать jQuery для просмотра прокрутки окна и соответственно изменить CSS на фиксированный...
var toggleAffix = function(affixElement, wrapper, scrollElement) {
var height = affixElement.outerHeight(),
top = wrapper.offset().top;
if (scrollElement.scrollTop() >= top){
wrapper.height(height);
affixElement.addClass("affix");
}
else {
affixElement.removeClass("affix");
wrapper.height('auto');
}
};
$('[data-toggle="affix"]').each(function() {
var ele = $(this),
wrapper = $('<div></div>');
ele.before(wrapper);
$(window).on('scroll resize', function() {
toggleAffix(ele, wrapper, $(this));
});
// init
toggleAffix(ele, wrapper, $(window));
});
Аффикс Bootstrap 4 (липкая навигационная панель)
РЕДАКТИРОВАТЬ: Другое решение заключается в использовании этого порта плагина 3.x Affix в качестве замены в Bootstrap 4..
http://www.codeply.com/go/HmY7DLHLkI
Связанный: анимация/сжатие NavBar при прокрутке с помощью Bootstrap 4
Ответ 4
Чтобы построить ответ Анвара Хуссейна. Я нашел успех с этим:
$(window).on('scroll', function (event) {
var scrollValue = $(window).scrollTop();
if (scrollValue > 120) {
$('.navbar').addClass('affix');
} else{
$('.navbar').removeClass('affix');
}
});
Это применит класс к navbar при прокрутке вниз, но также будет удалять класс при прокрутке назад. Раньше при прокрутке назад прикладной класс оставался бы примененным к навигационной панели.
Ответ 5
В соответствии с цитатой Vucko в документах Mirgation, ScrollPos-Styler библиотека мне очень понравилась.
- Включите файл
.js ScrollPos-Styler
(scrollPosStyler.js
) на свою страницу.
- Найдите соответствующий
<div>
, который вы хотите сделать "липким"
<nav class="navbar navbar-toggleable-md">
- Применить
sps sps--abv
class
<nav class="navbar navbar-toggleable-md sps sps--abv">
- Добавьте стили
.css
, которые вы хотите активировать после того, как элемент стал липким (согласно демонстрационной странице .
/**
* 'Shared Styles'
**/
.sps {
}
/**
* 'Sticky Above'
*
* Styles you wish to apply
* Once stick has not yet been applied
**/
.sps--abv {
padding: 10px
}
/**
* 'Sticky Below'
*
* Styles you wish to apply
* Once stick has been applied
**/
.sps--blw {
padding: 2px
}
Ответ 6
$(window).on('scroll', function (event) {
var scrollValue = $(window).scrollTop();
var offset = $('[data-spy="affix"]').attr('data-offset-top');
if (scrollValue > offset) {
$('[data-spy="affix"]').addClass('affix-top');
var width = $('[data-spy="affix"]').parent().width();
$('.affix-top').css('width', width);
} else{
$('[data-spy="affix"]').removeClass('affix-top');
}
});
Ответ 7
После каждого решения, которое я смог найти (и, зная, что аффикс удален из bootstrap 4), единственный способ получить желаемые липкие результаты, которые мне нужны, это использовать sticky-kit.
Это очень простой плагин jQuery, который легко настроить.
Просто включите код в свой проект и затем назначьте элемент, который вы хотите придерживаться,
$("#sidebar").stick_in_parent();
Ответ 8
Для пользователей, которые ищут ответ в чистом Javascript, вот как вы можете сделать это, используя чистый Javascript:
window.onscroll = (e) => {
let scrollValue = window.scrollY;
if (scrollValue > 120) {
document.querySelector('.navbar').classList.add('affix');
} else{
document.querySelector('.navbar').classList.remove('affix');
}
}
Ответ 9
просто используйте класс с фиксированной вершиной в начальной загрузке 4 и используйте addClass и removeClass
$(window).on('scroll', function(event) {
var scrollValue = $(window).scrollTop();
if ( scrollValue > 70) {
$('.navbar-sticky').addClass('fixed-top');
}else{
$('.navbar-sticky').removeClass('fixed-top');
}
});