Итак, я написал плагин jQuery, чтобы дать вам полностью выглядящую левую полосу прокрутки.
Демонстрация левой полосы прокрутки
Вот как это работает:
Вставить внутренний div
внутри панели, чтобы можно было рассчитать ширину содержимого (content_width
). Затем, используя это, можно рассчитать собственную ширину полосы прокрутки: scrollbar_width = parent_width - content_width - horizontal_padding
.
Создайте два разных divs
внутри панели, оба заполненные содержимым.
Его цель - быть "проблемкой". Используется исключительно для полосы прокрутки. Используя отрицательное левое поле, плагин тянет его влево, так что видна только полоса прокрутки (содержимое этого div
обрезается по краю).
Другой div
используется для фактического размещения видимого прокручиваемого содержимого.
Теперь пришло время связать их вместе. Каждые 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 на элемент (ы), к которым вы хотите применить левую полосу прокрутки.
(и, очевидно, это хорошо ухудшается)