Возможно ли иметь плавающую горизонтальную полосу прокрутки?

#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 /