#jquery #html #css #web
#jquery #HTML #css #веб
Вопрос:
У меня есть сайт с большой таблицей на нем, она расположена очень высоко, и из-за этого, чтобы добраться до горизонтальной полосы прокрутки, мне приходится прокручивать страницу до самого низа.
Можно ли как-нибудь сделать так, чтобы горизонтальная полоса прокрутки плавала внизу окна и всегда была доступна без необходимости сначала прокручивать страницу до самого низа?
Комментарии:
1. Загрузить таблицу внутри iframe?
2. используйте плагин Jquery gist.github.com/cowboy/846423
Ответ №1:
Я публикую ответ, потому что у меня недостаточно репутации.
попробуйте jquery.ba-floatingscrollbar.js это может помочь вам
вот ссылка на github и пример jsfiddle для js
/*!
* jQuery Floating Scrollbar - v0.4 - 02/28/2011
* http://benalman.com/
*
* Copyright (c) 2011 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($){
var // A few reused jQuery objects.
win = $(this),
html = $('html'),
// All the elements being monitored.
elems = $([]),
// The current element.
current,
// The previous current element.
previous,
// Create the floating scrollbar.
scroller = $('<div id="floating-scrollbar"><div/></div>'),
scrollerInner = scroller.children();
// Initialize the floating scrollbar.
scroller
.hide()
.css({
position: 'fixed',
bottom: 0,
height: '30px',
overflowX: 'auto',
overflowY: 'hidden'
})
.scroll(function() {
// If there's a current element, set its scroll appropriately.
current amp;amp; current.scrollLeft(scroller.scrollLeft())
});
scrollerInner.css({
border: '1px solid #fff',
opacity: 0.01
});
// Call on elements to monitor their position and scrollness. Pass `false` to
// stop monitoring those elements.
$.fn.floatingScrollbar = function( state ) {
if ( state === false ) {
// Remove these elements from the list.
elems = elems.not(this);
// Stop monitoring elements for scroll.
this.unbind('scroll', scrollCurrent);
if ( !elems.length ) {
// No elements remain, so detach scroller and unbind events.
scroller.detach();
win.unbind('resize scroll', update);
}
} else if ( this.length ) {
// Don't assume the set is non-empty!
if ( !elems.length ) {
// Adding elements for the first time, so bind events.
win.resize(update).scroll(update);
}
// Add these elements to the list.
elems = elems.add(this);
}
// Update.
update();
// Make chainable.
return this;
};
// Call this to force an update, for instance, if elements were inserted into
// the DOM before monitored elements, changing their vertical position.
$.floatingScrollbarUpdate = update;
// Hide or show the floating scrollbar.
function setState( state ) {
scroller.toggle(!!state);
}
// Sync floating scrollbar if element content is scrolled.
function scrollCurrent() {
current amp;amp; scroller.scrollLeft(current.scrollLeft())
}
// This is called on window scroll or resize, or when elements are added or
// removed from the internal elems list.
function update() {
previous = current;
current = null;
// Find the first element whose content is visible, but whose bottom is
// below the viewport.
elems.each(function(){
var elem = $(this),
top = elem.offset().top,
bottom = top elem.height(),
viewportBottom = win.scrollTop() win.height(),
topOffset = 30;
if ( top topOffset < viewportBottom amp;amp; bottom > viewportBottom ) {
current = elem;
return false;
}
});
// Abort if no elements were found.
if ( !current ) { setState(); return; }
// Test to see if the current element has a scrollbar.
var scroll = current.scrollLeft(),
scrollMax = current.scrollLeft(90019001).scrollLeft(),
widthOuter = current.innerWidth(),
widthInner = widthOuter scrollMax;
current.scrollLeft(scroll);
// Abort if the element doesn't have a scrollbar.
if ( widthInner <= widthOuter ) { setState(); return; }
// Show the floating scrollbar.
setState(true);
// Sync floating scrollbar if element content is scrolled.
if ( !previous || previous[0] !== current[0] ) {
previous amp;amp; previous.unbind('scroll', scrollCurrent);
current.scroll(scrollCurrent).after(scroller);
}
// Adjust the floating scrollbar as-necessary.
scroller
.css({
left: current.offset().left - win.scrollLeft(),
width: widthOuter
})
.scrollLeft(scroll);
scrollerInner.width(widthInner);
}
})(jQuery);
$(function() {
$('.sh .highlight, .sample').floatingScrollbar();
});
Ответ №2:
Существует хороший плагин jQuery floatingscroll, который заботится об этом.
Пример:
$(document).ready(function () {
$(".spacious-container").floatingScroll();
});
С демонстрацией здесь
Комментарии:
1. Красиво и великолепно! Но поскольку я новичок, это убивает мои 4 часа. Чтобы сэкономить время других пользователей: вы должны добавить следующий стиль в div: .spacious-container { переполнение: автоматическое; }
Ответ №3:
Ответ Р. Остерхолта прекрасен и великолепен. Но поскольку я новичок, это убивает мои 4 часа, чтобы заставить его работать. Чтобы сэкономить время других пользователей: вы должны поместить следующий стиль в div:
.spacious-container {
overflow: auto;
width: 100%;
}
А затем вызвать
$(document).ready(function () {
$(".spacious-container").floatingScroll();
});
Примечание: attachScroll()
это старый метод, который будет удален в будущей версии.
Подробную информацию о плагине можно найти здесь (плавающая прокрутка)
Ответ №4:
Поместите table
в div
. Установите div
‘s height
и установите overflow: auto
на нее.
Демонстрация: http://jsfiddle.net/NtQ2M /