2010-11-24 26 views
1

我只是在http://www.google.com/finance和注意到在页面中间一个真棒寻找滚动条。Google如何制作滚动条?

Google如何创建此滚动条外观/感觉?

注意:此滚动条与Google使用的Wave产品不同。

Screenshot

UPDATE:

滚动条不会立即出现。不要刷新页面。让该页面暂时理想化,直到世界上有新的新闻报道。一旦出现新的新闻报道,新文章将导致滚动条出现。

+1

我在Windows 7的Chrome 7中没有看到滚动条 – 2010-11-24 14:49:46

+3

即使我没有..与FF – Shoban 2010-11-24 14:50:40

+0

也不是我的FF 3.6.12 Vista。 – Actorclavilis 2010-11-24 14:50:57

回答

1

不是我可以看到它,但我想象一个由各种图像制成的自定义控件。

您制作一个磁贴图像,用于组成背景,顶部和底部的盖帽图像以充当向前/向后按钮(悬停和按下状态),可移动控件通常由三部分组成,在一个可以调整大小以适合花木的中心区域的任一侧。然后,您监控控制区域上的拖动并将其保持在轨道内,并在前进/后退按钮上单击(或更好地拖动)。

有类似jQuery UI Slider这样的库可以为你处理这个问题,如果你不想自己编写它。

2

非常有趣的问题。我只是有空闲时间,花了它来实现这个简单的例子(花了大约1小时,一杯茶与糖果;))。看看这个:

<script src='jquery.js'></script> 
<script src='jquery-ui.js'></script> 

<style> 
.frame { 
    position: relative; 
    top: 150px; 
    left: 150px; 
    width: 500px; 
    height: 500px; 
    overflow: hidden; 
    border: 1px solid black; 
} 

.frame > div { 
    border: 1px solid black; 
} 

.frame .content { 
    margin-right: 0px; 
    height: 498px; 
    overflow: hidden; 
} 

.frame .scrollbar { 
    float: right; 
    width: 20px; 
    text-align: center; 
} 
.frame .scrollbar .scroller { 
    position: relative; 
    border-right: 1px solid black; 
    width: 10px; 
    height: 91.8%; 
} 
.frame .scrollbar .scroll-up, .frame .scrollbar .scroll-down { 
    cursor: pointer; 
} 
.frame .scrollbar .scroll-up:hover, .frame .scrollbar .scroll-down:hover { 
    background: blue; 
    color: White; 
} 

.frame .scroller-draggable { 
    background: #EEF1F7; 
    border: 1px solid #D5DFF3; 
    height: 20px; 
    margin-left: 1px; 
    margin-right: -10px; 
    cursor: pointer; 
} 
</style> 

<div class="frame"> 
<div class="scrollbar"> 
    <div class="scroll-up">[^]</div> 
    <div class="scroller"> 
    <div class="scroller-draggable"></div> 
    </div> 
    <div class="scroll-down">[v]</div> 
</div> 
<div class="content"> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer enim elit, tristique id tristique sed, vulputate eu libero. Nam nec lectus orci, at varius est. Aenean quis velit a lorem bibendum dignissim eu ac ipsum. Vestibulum convallis diam faucibus dolor placerat sed iaculis sapien mattis. Maecenas in velit nec mauris aliquam condimentum. Mauris porttitor magna id est ultrices dapibus. Fusce at urna felis. Quisque congue dignissim bibendum. Praesent egestas elementum ante, non condimentum libero tempor quis. Nullam fermentum tincidunt aliquam. Suspendisse nec mi velit. Nulla facilisi. Etiam vitae sem nec orci feugiat mattis a quis massa. Vivamus rutrum suscipit tempor. Proin varius interdum arcu eget auctor. Vivamus quis placerat nulla. Praesent imperdiet tempus dictum. Donec pharetra, orci ac gravida euismod, sapien tellus feugiat velit, eu egestas nunc nisi at enim. Phasellus blandit placerat neque, non rhoncus tellus commodo sit amet. Donec lectus erat, ornare sit amet venenatis id, viverra ac quam.</p> 
    <p>Sed aliquet metus vitae urna vulputate in mattis orci accumsan. Quisque dictum odio ac massa aliquet porttitor. Donec accumsan tortor sit amet ante vulputate at ullamcorper arcu auctor. Aenean gravida venenatis interdum. Aliquam erat volutpat. Integer eget dui vitae eros iaculis pharetra. In aliquam volutpat tincidunt. Sed vel imperdiet eros. Ut est nunc, venenatis sed varius et, scelerisque quis mi. Nullam aliquam pretium luctus. In hac habitasse platea dictumst. Etiam nec nibh libero. Nam pellentesque accumsan justo eget gravida. Ut egestas, mauris vitae egestas convallis, nibh turpis gravida justo, sit amet tincidunt libero orci eget metus.</p> 
    <p>Praesent convallis pellentesque tristique. Etiam vulputate, arcu sit amet dignissim feugiat, risus nulla adipiscing lectus, in dignissim metus mi iaculis sem. Duis pulvinar vehicula leo nec porta. Cras nisl felis, elementum sit amet commodo sit amet, gravida quis augue. Praesent pretium sapien ut orci rutrum auctor. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed porta mattis cursus. Duis facilisis enim quam, quis imperdiet nulla. Mauris dapibus tincidunt felis vel ultrices. Fusce ut diam lectus. In lacinia ultrices leo, ut fringilla tellus egestas eget. Ut in odio et est tristique tempor quis a orci. Integer sodales adipiscing condimentum. Ut lacinia vehicula tellus sed feugiat. Sed libero libero, vestibulum ut pharetra nec, vestibulum vel augue. Aliquam consequat nibh id nulla porta porta.</p> 
    <p>Nullam ligula tortor, sollicitudin et sollicitudin a, vestibulum vel dui. Ut at facilisis nisi. Duis id ante quis augue iaculis congue. Nulla facilisi. Phasellus tincidunt condimentum nisi, ac ultricies augue ultricies et. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec id mauris a sapien suscipit adipiscing. Pellentesque accumsan pulvinar tortor et elementum. Nulla facilisi. Nulla tempor lectus et purus luctus ultricies. Phasellus aliquam, libero non ullamcorper vulputate, est lectus ultricies massa, vel tempus magna elit ac lacus. Sed id dui purus. Quisque vel erat ipsum. In in lectus diam, a tempor velit.</p> 
    <p>Duis tincidunt neque quis ipsum feugiat malesuada. Sed et tortor vel nunc porta commodo. Mauris lacinia suscipit sagittis. Praesent non nibh ac elit congue sagittis vitae non dui. Nunc risus urna, sodales faucibus rhoncus at, interdum faucibus velit. Vivamus ultrices neque vehicula turpis luctus non fringilla orci aliquam. Maecenas commodo, est vitae consequat scelerisque, metus sem malesuada dolor, non tincidunt nunc turpis non arcu. Donec rutrum mi nec neque dignissim ac gravida neque dignissim. Quisque porttitor elit a ante ultrices interdum. In tempor neque vitae tellus laoreet tincidunt. Pellentesque bibendum accumsan sapien suscipit vestibulum. Nullam justo libero, consectetur id rhoncus at, vulputate eu tortor. Suspendisse mattis, erat sed viverra malesuada, sapien leo interdum leo, in adipiscing nibh purus quis diam. Sed vitae convallis purus. Maecenas leo mauris, egestas ut vehicula vel, sodales non justo. In consequat scelerisque velit, id pharetra arcu fringilla eget.</p> 
    <p>Phasellus convallis porta velit at tempor. Etiam non quam tortor. Vivamus eget nulla turpis. Suspendisse potenti. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras sollicitudin arcu quis libero tristique vel tempus turpis eleifend. Fusce sed justo sed sem tempor mattis vel eu nulla. Phasellus hendrerit tellus et dui luctus fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas ullamcorper, dolor eu egestas tincidunt, velit nulla sollicitudin metus, a ultrices nunc diam eu ante. Suspendisse sit amet hendrerit ante. Proin viverra posuere dolor. Nullam blandit lacus quis tortor dignissim non hendrerit risus pharetra.</p> 
</div> 
</div> 

<script type="text/javascript"> 
$(function() { 
    $(".frame .scrollbar").find(".scroll-up, .scroll-down").click(function() { 
    var $content = $(this).closest(".frame").children(".content"); 
    var dir = $(this).is(".scroll-up") ? -20 : 20; 
    $content.scrollTop($content.scrollTop() + dir); 
    }); 

    $(".frame .content") 
    .bind("mousewheel", function (e) { 
    $(this).scrollTop($(this).scrollTop() - e.wheelDelta); 
    }) 
    .scroll(function (e) { 
    var $scroller = $(this).closest(".frame").children(".scrollbar").children(".scroller"); 
    var $scrollerDraggable = $scroller.children(".scroller-draggable"); 

    if ($scrollerDraggable.data("isscrolling")) 
    return; 

    var pos = $(this).scrollTop()/($(this)[0].scrollHeight - $(this).height()); 
    console.log([pos]); 
    $scrollerDraggable.css("top", ($scroller.height() - $scrollerDraggable.height()) * pos); 
    }) 

    $(".frame .scroller-draggable").draggable({ 
    axis: 'y', 
    containment: $(".frame .scroller"), 
    start: function() { 
    $(this).data("isscrolling", true); 
    }, 
    drag: function (event, ui) { 
    var $scroller = $(this).closest(".scroller"); 
    var $content = $scroller.closest(".frame").children(".content"); 
    var pos = ui.position.top/($scroller.height() - $(this).height()); 

    $content.scrollTop(($content[0].scrollHeight - $content.height()) * pos); 
    }, 
    stop: function() { 
    $(this).data("isscrolling", false); 
    } 
    }); 
}); 
</script> 

它需要JQuery和JQuery UI,并且该示例仍然存在一些问题,但主要思想已经实现。仅在Chrome 7中测试的示例。 你可以从中制作一个jQuery插件。

0

虽然别人都表示这是如何完成(这是问题,因此它们是“正确”的答案)我想提出一个备选答案...

认真考虑你为什么会要做到这一点

滚动条是一样容易通过设置2个CSS属性添加(如无需代码)

.container{ 
    height:200px;/*some fixed height*/ 
    overflow-y:auto;/*adds a native scrollbar, only when needed*/ 
} 

与自定义滚动条的问题是,它并没有表现得很像本地人一样。

  • 你不能在轨道单击滚动内容
  • 无法使用鼠标上的滚轮滚动内容
  • 您不能使用起来/箭头键,结束向上翻页页DN滚动康特NT
  • 旋螺钉的尺寸不会改变,以反映可以滚动

的内容量,这些似乎并不像一个大问题,但改变/删除UI控件的“行为”通常不建议用户习惯。

雅各布尼尔森的可用性网站报价 “Alertbox” 的文章: “Scrolling and Scrollbars” - 7月11日,2005年(重点煤矿)

滚动条很容易得到的权利。事实上,你做的工作越少,滚动条越好。 当您使用内置滚动条而非设计自己的时,可用性几乎始终得到增强。