DIV Вертикальная полоса прокрутки слева - PullRequest
23 голосов
/ 21 сентября 2009

Можно ли поставить вертикальную полосу прокрутки DIV слева от div с помощью css? как насчет jscript?

Ответы [ 3 ]

53 голосов
/ 27 августа 2011

У меня был простой вариант использования, поэтому я выбрал простое решение CSS:

<div style="direction: rtl; height: 250px; overflow: scroll;">
  <div style="direction: ltr; padding: 3px;">
     Content goes here
  </div>
</div>
11 голосов
/ 21 сентября 2009

Вы можете добавить псевдо-полосу прокрутки в любом месте с помощью JQuery и этого плагина: JScrollPane

10 голосов
/ 22 сентября 2009

Итак, я написал плагин jQuery, чтобы дать вам полностью выглядящую левую полосу прокрутки.

Демонстрация левой полосы прокрутки

Вот как это работает:

  1. Вставить внутренний div внутри панели, чтобы можно было рассчитать ширину содержимого (content_width). Затем, используя это, можно рассчитать собственную ширину полосы прокрутки: scrollbar_width = parent_width - content_width - horizontal_padding.

  2. Создайте два разных divs внутри панели, оба заполненные содержимым.

    • Его цель - быть "проблемкой". Используется исключительно для полосы прокрутки. Используя отрицательное левое поле, плагин тянет его влево, так что видна только полоса прокрутки (содержимое этого div обрезается по краю).

    • Другой div используется для фактического размещения видимого прокручиваемого содержимого.

  3. Теперь пришло время связать их вместе. Каждые 50 мс (window.setInterval) смещение scrollTop от «проблемки» div применяется к видимому прокручиваемому контенту div. Таким образом, когда вы прокручиваете вверх или вниз с помощью полосы прокрутки на влево , смещение прокрутки применяется на div с видимым содержимым.

Это объяснение, вероятно, отстой, и на самом деле есть кое-что еще, что я не описал, но, без дальнейших церемоний, вот оно:

$.fn.leftScrollbar = function(){
    var items = $(this);
    $(function(){
        items.each(function(){
            var e = $(this);
            var content = e.html();
            var ie = !jQuery.support.boxModel;
            var w = e[ie?'innerWidth':'width'](), h = e[ie?'innerHeight':'height']();
            //calculate paddings
            var pad = {};
            $(['top', 'right', 'bottom', 'left']).each(function(i, side){
                pad[side] = parseInt(e.css('padding-' + side).replace('px',''));
            });
            //detect scrollbar width
            var xfill = $('<div>').css({margin:0, padding:0, height:'1px'});
            e.append(xfill);
            var contentWidth = xfill.width();
            var scrollerWidth = e.innerWidth() - contentWidth - pad.left - pad.right;
            e.html('').css({overflow:'hidden'});
            e.css('padding', '0');

            var poserHeight = h - pad.top - pad.bottom;
            var poser = $('<div>')
                .html('<div style="visibility:hidden">'+content+'</div>')
                .css({
                    marginLeft: -w+scrollerWidth-(ie?0:pad.left*2),
                    overflow: 'auto'
                })
                .height(poserHeight+(ie?pad.top+pad.bottom:0))
                .width(w);

            var pane = $('<div>').html(content).css({
                width: w-scrollerWidth-(ie?0:pad.right+pad.left),
                height: h-(ie?0:pad.bottom+pad.top),
                overflow: 'hidden',
                marginTop: -poserHeight-pad.top*2,
                marginLeft: scrollerWidth
            });

            $(['top', 'right', 'bottom', 'left']).each(function(i, side){
                 poser.css('padding-'+side, pad[side]);
                 pane.css('padding-'+side, pad[side]);
            });
            e.append(poser).append(pane);

            var hRatio = (pane.innerHeight()+pad.bottom) / poser.innerHeight();
            window.setInterval(function(){
                pane.scrollTop(poser.scrollTop()*hRatio);
            }, 50);
        });
    });
};

Как только вы включите jQuery и этот плагин на страницу, примените левую полосу прокрутки:

$('#scrollme').leftScrollbar();

Замените #scrollme селектором CSS на элемент (ы), к которым вы хотите применить левую полосу прокрутки.

(и, очевидно, это хорошо ухудшается)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...