Как получить фиксированную позицию div для прокрутки по горизонтали с содержимым? Использование jQuery
У меня есть div.scroll_fixed со следующим CSS
.scroll_fixed {
position:absolute
top:210px
}
.scroll_fixed.fixed {
position:fixed;
top:0;
}
Я использую следующий код jQuery для установки класса .fixed, когда div достигает вершины страницы.
var top = $('.scroll_fixed').offset().top - parseFloat($('.scroll_fixed').css('margin-top').replace(/auto/, 0));
$(window).scroll(function (event) {
// what the y position of the scroll is
var y = $(this).scrollTop();
// whether that below the form
if (y >= top) {
// if so, ad the fixed class
$('.scroll_fixed').addClass('fixed');
} else {
// otherwise remove it
$('.scroll_fixed').removeClass('fixed');
}
});
Это отлично подходит для вертикальной фиксации прокрутки. Но с небольшим окном браузера горизонтальная прокрутка вызывает столкновение с содержимым справа от этого фиксированного div.
Я бы хотел, чтобы div прокручивал содержимое по горизонтали.
Может ли кто-нибудь указать мне в правильном направлении. Все еще мои ноги мокрые JS/JQuery.
В основном я хочу, чтобы он работал как второй блок в этом .
Ответы
Ответ 1
Демонстрация сохраняет элемент position:fixed
и управляет свойством left
элемента:
var leftInit = $(".scroll_fixed").offset().left;
var top = $('.scroll_fixed').offset().top - parseFloat($('.scroll_fixed').css('margin-top').replace(/auto/, 0));
$(window).scroll(function(event) {
var x = 0 - $(this).scrollLeft();
var y = $(this).scrollTop();
// whether that below the form
if (y >= top) {
// if so, ad the fixed class
$('.scroll_fixed').addClass('fixed');
} else {
// otherwise remove it
$('.scroll_fixed').removeClass('fixed');
}
$(".scroll_fixed").offset({
left: x + leftInit
});
});
Использование leftInit
учитывает возможное левое поле. Попробуйте здесь: http://jsfiddle.net/F7Bme/
Ответ 2
Вероятно, вы уже перешли к этому вопросу, но вот ответ для любого, кто ищет горизонтально прокручиваемое решение с фиксированным элементом. Этот плагин jquery был создан для решения этой проблемы.
В этой демонстрации используется сводка корзины покупок, которая по-прежнему будет прокручиваться по горизонтали, если она установлена в верхней части страницы; и я также использовал его для заголовка над табличными данными:
Демо: http://jsfiddle.net/y3qV5/434/ (обновлено)
Плагин и источник: https://github.com/bigspotteddog/ScrollToFixed
Использование:
$(document).ready(function() {
$('#cart').scrollToFixed( { marginTop: 10 } );
});
Ответ 3
используйте свойство css position:sticky
, чтобы получить его.
Вот объясняемая статья и живая демонстрация.
http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit
Единственный недостаток - совместимость браузера.