【问题标题】:How do I hide a scrollbar after scrolling and make it visible again on scroll?如何在滚动后隐藏滚动条并使其在滚动时再次可见?
【发布时间】:2022-01-23 10:56:06
【问题描述】:

我的意图是在滚动后(比如说,在我完成滚动后 2 或 3 秒)隐藏我的滚动条(即通过向右滑动来隐藏)

为了让它再次可见,只要我开始滚动(即,通过从右侧滑入可见)

查看代码片段:

div::-webkit-scrollbar {
  width: 8px;
  /* helps remove scrollbar which resizes or shifts list items */
  /* display: none; */
}

div::-webkit-scrollbar-track {
  background-color: #444444;
}

div::-webkit-scrollbar-button:vertical:increment {
  background-color: rgba(108, 92, 231, 0.65);
}

div::-webkit-scrollbar-button:vertical:decrement {
  background-color: rgba(108, 92, 231, 0.65);
}

div::-webkit-scrollbar-thumb {
  background-color: rgba(108, 92, 231, 0.7);
  border-radius: 10px;
}

div::-webkit-scrollbar-thumb:hover {
  background-color: rgba(108, 92, 231, 1);
}

div {
  width: 500px;
  height: 300px;
  background-color: #ececec;
  overflow: auto;
}
<div>
  <p style="height: 300vh;">Just some tall paragraph to force DIV scrollbars....</p>
</div>

请大家帮帮我(我会很感激的!)

:D

【问题讨论】:

  • 这不能单独使用 CSS 来实现,而且众所周知(因为有 JavaScript 标签)——你有任何 JS 代码可以分享吗?一些"scroll" 事件?请展示您尝试过的内容。从上面给出的代码来看,没有任何问题的迹象。阅读:How to Ask.

标签: javascript html css scroll scrollbar


【解决方案1】:

由于 CSS 没有超时和清除超时 - 使用 JavaScript

  • 使用Element.classList 添加和删除类
  • 使用 setTimeout() 设置为 2500 毫秒,但每次触发滚动事件时,使用 clearTimeout 删除上一个挂起的超时。从逻辑上讲,在您完成滚动设置的最后一个超时后,2.5 秒后最终触发类删除。
  • 使用 .is-scrolling 之类的 CSS 类来定义所需的滚动条样式(否则默认为透明)

const showScrollbars = (evt) => {

  const el = evt.currentTarget;
  clearTimeout(el._scrolling); // Cancel pending class removal
  
  el.classList.add("is-scrolling"); // Add class 
  
  el._scrolling = setTimeout(() => { // remove the scrolling class after 2500ms
    el.classList.remove("is-scrolling");
  }, 2500);
};

document.querySelectorAll("[data-scrollbars]").forEach(el => {
  el.addEventListener("scroll", showScrollbars); 
});
[data-scrollbars] {
  width: 500px;
  height: 180px;
  background-color: #ececec;
  overflow: auto;
}

[data-scrollbars]::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

[data-scrollbars]::-webkit-scrollbar-track {
  background-color: transparent;
}

[data-scrollbars]::-webkit-scrollbar-thumb {
  background-color: transparent;
  border-radius: 10px;
}

[data-scrollbars].is-scrolling::-webkit-scrollbar-track {
  background-color: #777;
}

[data-scrollbars].is-scrolling::-webkit-scrollbar-thumb {
  background-color: gold;
}
<div data-scrollbars>
  <p style="height: 300vh;">
    Just some tall paragraph to force DIV scrollbars...<br>
    Scroll me! (<<< PS: See the problem?!)
  </p>
</div>

我强烈不建议您隐藏滚动条。滚动条是向用户提供实际要滚动的内容的视觉提示。做一个简单的 A/B 测试。对于一半的访问者显示滚动条。对于另一半,做那些时髦的事情 - 不要惊讶于您的应用程序(或元素)的首屏部分的点击率与第二组用户的互动更少甚至没有.

【讨论】:

    【解决方案2】:

    我正在考虑如果用户没有任何用于滚动的鼠标滚轮以及用户是否使用实际使用的滚动条滚动。 无论如何,请在谷歌搜索苗条的褪色滚动条示例。你会发现一些细长卷轴的例子,它可能不是隐形的,但它是透明的,形状很好。

    【讨论】:

    • 就这是一个伟大的可访问性问题评论;回答说:“请在 Google 上做一些研究” 不能算作优质回答 - 不是本网站的预期格式。欲了解更多信息,请阅读How to provide a good answer
    • @RokoC.Buljan 我不知道该怎么说谢谢!!!不仅帮助我解决了我的问题,还帮助我警告了这个人-不确定他是否只是想让我看起来很愚蠢:(我还在学习。谢谢先生!我想我也看到了你试图向我解释(即关于用户结束应用程序的使用)。现在我想我可以决定是否在我的应用程序中实现它。再次感谢先生,帮助我( - 提供建议关于是否实施)并通过与该用户交谈来为我辩护。MERCI BEAUCOUP。
    • @MattDon 没问题 :) 但我不明白你为什么接受这个答案? :)
    • @CaferAydın 呵呵,这真的很混乱和有趣 :) 我没有写那个 :) 马特(原始海报)做了
    • @RokoC.Buljan 对此感到抱歉。你说的对。用手机在 stackoverflow 上冲浪很痛苦。
    猜你喜欢
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2011-02-09
    • 2020-11-09
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多