【问题标题】:Remove scrollbar but not scrolling functionality [duplicate]删除滚动条但不滚动功能[重复]
【发布时间】:2012-11-09 23:08:20
【问题描述】:

我知道你可以定义溢出:隐藏;在 HTML 的主体上删除滚动条,但我仍然希望能够使用鼠标上的箭头或滚轮滚动。

提前感谢您的帮助。

编辑: 感谢有关悬停滚动条和自定义条的所有建议。还要感谢您对删除滚动条影响用户体验的所有担忧。我将详细说明,以便您解释我来自哪里。

我有一个圆形页面(如果您使用滚轮或箭头按钮滚动,当它到达底部时它会重置到页面顶部并重新开始)。一个永无止境的循环。滚动条对此的影响是有限的,当它到达底部并重置到顶部时,用户的鼠标仍位于页面底部,这意味着当他们移动它时,页面顶部和底部之间会有一些闪烁。

我计划移除滚动条并用窗口顶部和底部的箭头按钮替换它。这就是我想完全移除滚动条但保留滚动功能的原因。

【问题讨论】:

  • 没有鼠标滚轮的人可悲的一天:(
  • @Prupel 我同意,但另一方面,现在谁使用没有滚轮的鼠标?
  • @MilkyWayJoe - 只有触控板的笔记本电脑用户?这个想法的更大问题不是使用错误设备(或某些身体残疾)的用户如何使其工作,而是任何用户如何知道该内容可以滚动?
  • 只在鼠标悬停时保持滚动条感觉如何?我个人认为它是外观和功能的完美结合。
  • @Iain_b #foo { overflow: hidden; } #foo:hover { overflow: auto; },很有趣。

标签: javascript jquery html css


【解决方案1】:

有一个名为 jscrollpane http://jscrollpane.kelvinluck.com/#examples 的 jQuery 库,可以进行很多修改。

但是如果你只想隐藏这个栏,你也可以把这个滚动条推到视野之外:http://jsfiddle.net/H27BK/

<div id="content">
    <div id="scrollable"> ... ... ... </div>
</div>

使用 CSS

#content {
    position: relative;
    width: 200px;
    height: 150px;
    border: 1px solid black;
    overflow: hidden;
}
#scrollable {
   height: 150px;   
   width: 218px; /* #content.width + 18px */
   overflow-y: scroll;    
}

这一切都基于 18 像素的条形宽度。


所以我们可以做一些 javascript 滚动条宽度检测脚本,或者简单地添加另一个我们放在可滚动 div 前面的 div。

http://jsfiddle.net/uNzEz/

HTML 现在是:

<div id="content">
<div id="scrollable">
<div id="txt"> ... ... ...
</div></div></div>

与 CSS 类似:

#content {
    position: relative;
    width: 200px;
    height: 150px;
    border: 1px solid black;
    overflow: hidden;
}
#scrollable {
   height: 150px;   
   width: 240px; /* the bar-width can be theoretical 240px - 200px = 40px */
   overflow-y: scroll;    
}
#txt {
    width: 200px;
}

【讨论】:

  • 只是好奇,你为什么需要position:relative;?我删除了它,它仍然可以正常工作,有什么原因吗?非常有用的代码,感谢您发布。
  • 非常有帮助的先生
【解决方案2】:

好的,新的答案。我刚刚开发了一个小技巧,与 jQuery 混合使用。

在正文中创建一个包装器div,使用以下 css。

body { overflow: hidden; }

#wrapper { overflow: auto; }

然后,只需设置它们各自的高度:

$("body").height($(window).height());
$("#wrapper").height($("#text").height());

Demo


支持调整大小

$(window).trigger('scroll');

$(window).scroll(function() {
    $("body").height($(window).height());
    $("#wrapper").height($("#text").height());    
});

Demo

【讨论】:

  • 我需要将 body 定义为 4000px 这样大的东西,但要移除滚动条。
  • 这对我不起作用,根本没有意义
  • 这对我不起作用 - 键盘或滚轮没有任何反应(在单击主体以确保它具有焦点之后)。将其更改为overflow: scroll; 并且它可以工作,但随后会出现滚动条。
  • @nnnnnn,我有点误解了这个问题,以前的解决方案适用于固定 sizez。无论如何,新答案检查一下。
  • 感谢您的宝贵时间,但这不支持笔记本电脑上的上下按钮或鼠标触控板
【解决方案3】:

您可以尝试使用其中一个 jQuery 滚动条插件,它们允许自定义 css 设计...

您可以简单地选择将滚动条设计为不可见,但鼠标功能将保留...

我个人最喜欢的是malihu's,只要确保使用它的鼠标滚轮扩展。

编辑:

也许在您查看了自定义设计的滚动条的外观之后,您可以重新考虑显示滚动条。毕竟,它们是有用且具有启发性的。

【讨论】:

  • 我还没有看到不是很糟糕的 JS“自定义滚动”解决方案(生涩、滚动缓慢等)。为什么要重新发明轮子?
  • 好吧,你可能还没有见过这个插件,其次,它非常适合提问者的情况。
  • manos.malihu.gr/tuts/custom-scrollbar-plugin/… ?事实上,我有,而且和我见过的其他人一样糟糕。
  • 我认为这不值得被否决。正如我上面所说,我认为滚动条应该在悬停时显示,但一旦它们显示,我认为建议的插件是一个不错的选择。
  • 让我们同意将其称为我的想法的缺点,同时它对于如此平凡的任务来说太复杂了,而且它是另一个依赖项。
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2017-02-18
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多