javascript 隐藏可滚动div的滚动条
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23132053/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Hide scrollbar for scrollable div
提问by user2990762
I am working on a HTML 5 app so there is no fix height. I want to make my div
scrollable, but the scrollbar should not visible. Is there any way to achieve this?
我正在开发 HTML 5 应用程序,因此没有固定高度。我想让我的div
滚动条,但滚动条不应该可见。有没有办法实现这一目标?
HTML:
HTML:
<!DOCTYPE html>
<html>
<body>
<div id="chatlist" class="mousescroll gridcontainer">
<ul>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
<li>Aug 19, 2011 - Here is an update to Stephen P.'s post to have a styled scroll bar. -Mike ... You set the overflow to none normally and ...</li>
</ul>
</div>
</body>
</html>
CSS:
CSS:
<style>
.gridcontainer {
position: absolute;
top: 0; bottom: 0; left: 0; right: 0;
overflow: auto;
}
div#chatlist {
/**width: 50px;
height: 540px;**/
border: 1px solid black;
}
div.mousescroll {
overflow: hidden;
}
div.mousescroll:hover {
overflow-y: scroll;
}
ul {
list-style-type: none;
padding-left: 10px;
padding-right: 10px;
}
.slimScrollDiv { border: 1px solid #ccc; margin:10px; }
li {
margin-bottom:20px;
}
</style>
Javascript :
Javascript :
<script>
(function($) {
jQuery.fn.extend({
slimScroll: function(o) {
var ops = o;
//do it for every element that matches selector
this.each(function(){
var isOverPanel, isOverBar, isDragg, queueHide, barHeight,
divS = '<div></div>',
minBarHeight = 30,
wheelStep = 30,
o = ops || {},
cwidth = o.width || 'auto',
cheight = o.height || '250px',
size = o.size || '7px',
color = o.color || '#000',
position = o.position || 'right',
opacity = o.opacity || .4,
alwaysVisible = o.alwaysVisible === true;
//used in event handlers and for better minification
var me = $(this);
//wrap content
var wrapper = $(divS).css({
position: 'relative',
overflow: 'hidden',
width: cwidth,
height: cheight
}).attr({ 'class': 'slimScrollDiv' });
//update style for the div
me.css({
overflow: 'hidden',
width: cwidth,
height: cheight
});
//create scrollbar rail
var rail = $(divS).css({
width: '15px',
height: '100%',
position: 'absolute',
top: 0
});
//create scrollbar
var bar = $(divS).attr({
'class': 'slimScrollBar ',
style: 'border-radius: ' + size
}).css({
background: color,
width: size,
position: 'absolute',
top: 0,
opacity: opacity,
display: alwaysVisible ? 'block' : 'none',
BorderRadius: size,
MozBorderRadius: size,
WebkitBorderRadius: size,
zIndex: 99
});
//set position
var posCss = (position == 'right') ? { right: '1px' } : { left: '1px' };
rail.css(posCss);
bar.css(posCss);
//wrap it
me.wrap(wrapper);
//append to parent div
me.parent().append(bar);
me.parent().append(rail);
//make it draggable
bar.draggable({
axis: 'y',
containment: 'parent',
start: function() { isDragg = true; },
stop: function() { isDragg = false; hideBar(); },
drag: function(e)
{
//scroll content
scrollContent(0, $(this).position().top, false);
}
});
//on rail over
rail.hover(function(){
showBar();
}, function(){
hideBar();
});
//on bar over
bar.hover(function(){
isOverBar = true;
}, function(){
isOverBar = false;
});
//show on parent mouseover
me.hover(function(){
isOverPanel = true;
showBar();
hideBar();
}, function(){
isOverPanel = false;
hideBar();
});
var _onWheel = function(e)
{
//use mouse wheel only when mouse is over
if (!isOverPanel) { return; }
var e = e || window.event;
var delta = 0;
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
if (e.detail) { delta = e.detail / 3; }
//scroll content
scrollContent(0, delta, true);
//stop window scroll
if (e.preventDefault) { e.preventDefault(); }
e.returnValue = false;
}
var scrollContent = function(x, y, isWheel)
{
var delta = y;
if (isWheel)
{
//move bar with mouse wheel
delta = bar.position().top + y * wheelStep;
//move bar, make sure it doesn't go out
delta = Math.max(delta, 0);
var maxTop = me.outerHeight() - bar.outerHeight();
delta = Math.min(delta, maxTop);
//scroll the scrollbar
bar.css({ top: delta + 'px' });
}
//calculate actual scroll amount
percentScroll = parseInt(bar.position().top) / (me.outerHeight() - bar.outerHeight());
delta = percentScroll * (me[0].scrollHeight - me.outerHeight());
//scroll content
me.scrollTop(delta);
//ensure bar is visible
showBar();
}
var attachWheel = function()
{
if (window.addEventListener)
{
this.addEventListener('DOMMouseScroll', _onWheel, false );
this.addEventListener('mousewheel', _onWheel, false );
}
else
{
document.attachEvent("onmousewheel", _onWheel)
}
}
//attach scroll events
attachWheel();
var getBarHeight = function()
{
//calculate scrollbar height and make sure it is not too small
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
bar.css({ height: barHeight + 'px' });
}
//set up initial height
getBarHeight();
var showBar = function()
{
//recalculate bar height
getBarHeight();
clearTimeout(queueHide);
//show only when required
if(barHeight >= me.outerHeight()) {
return;
}
bar.fadeIn('fast');
}
var hideBar = function()
{
//only hide when options allow it
if (!alwaysVisible)
{
queueHide = setTimeout(function(){
if (!isOverBar && !isDragg) { bar.fadeOut('slow'); }
}, 1000);
}
}
});
//maintain chainability
return this;
}
});
jQuery.fn.extend({
slimscroll: jQuery.fn.slimScroll
});
})(jQuery);
//invalid name call
$('#chatlist').slimscroll({
color: '#00f',
size: '10px',
width: '50px',
height: '150px'
});
</script>
回答by Innodel
I am too late for this question but just add following sentence to css will make your scroll bar hidden
我回答这个问题为时已晚,但只需在 css 中添加以下句子即可隐藏滚动条
.element::-webkit-scrollbar { width: 0 !important }
where .element is a class of the div which has scroll bar
其中 .element 是具有滚动条的 div 类
you can find more about this on http://blogs.msdn.com/b/kurlak/archive/2013/11/03/hiding-vertical-scrollbars-with-pure-css-in-chrome-ie-6-firefox-opera-and-safari.aspx
您可以在http://blogs.msdn.com/b/kurlak/archive/2013/11/03/hiding-vertical-scrollbars-with-pure-css-in-chrome-ie-6-firefox上找到更多相关信息-opera-and-safari.aspx
回答by 4dgaurav
CSS only solution
仅 CSS 解决方案
<div id="container"> <--your code goes here--> </div>
#container{
height: 100% !important;
width: 100% !important;
overflow: hidden !important;
}
#chatlist{
width: 100% !important;
height: 99% !important;
overflow: auto !important;
padding-right: 15px !important;
}
html, body{
height: 99% !important;
border: 1px solid red;
overflow:hidden !important;
}
回答by Gromo
You can try jQuery Scrollbarwhich uses native scrollbar that are hidden with negative margins. Scrollbars are fully CSS customizable, so you can just hide them with display:none
if you don't need them visible. Mouse wheel scroll, trackpads and touch scroll will continue working.
您可以尝试使用使用负边距隐藏的本机滚动条的jQuery 滚动条。滚动条是完全 CSS 可定制的,因此display:none
如果您不需要它们可见,您可以将它们隐藏起来。鼠标滚轮滚动、触控板和触摸滚动将继续工作。
回答by SW4
Demo Fiddle
演示小提琴
Why not contain the scrollable element and push the scrollbar out of view? At some point the container will need its height constrained however.
为什么不包含可滚动元素并将滚动条推出视图?然而,在某些时候容器将需要其高度限制。
#chatlist {
width: 500px;
height: 300px;
border: 1px solid black;
overflow: hidden;
}
#chatlist ul {
height: 100%;
width: 520px;
overflow-y: scroll;
}