当前位置: 首页 > 面试题库 >

使用JavaScript获取滚动条的宽度

缪嘉志
2023-03-14
问题内容

以下HTML将在div.container的右侧边缘显示滚动条。

是否可以确定该滚动条的宽度?

<div class="container" style="overflow-y:auto; height:40px;">
  <div class="somethingBig"></div>
</div>

问题答案:

此功能应为您提供滚动条的宽度

function getScrollbarWidth() {

  // Creating invisible container
  const outer = document.createElement('div');
  outer.style.visibility = 'hidden';
  outer.style.overflow = 'scroll'; // forcing scrollbar to appear
  outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
  document.body.appendChild(outer);

  // Creating inner element and placing it in the container
  const inner = document.createElement('div');
  outer.appendChild(inner);

  // Calculating difference between container's full width and the child width
  const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);

  // Removing temporary elements from the DOM
  outer.parentNode.removeChild(outer);

  return scrollbarWidth;

}

基本步骤如下:

  1. 创建隐藏的div(外部)并获取其偏移宽度
  2. 使用CSS溢出属性强制滚动条显示在div(外部)中
  3. 创建新的div(内部)并附加到外部,将其宽度设置为“ 100%”并获得偏移宽度
  4. 根据收集的偏移量计算滚动条宽度

更新资料

如果在Windows(metro)应用程序上使用此功能,请确保将“外部” div 的-ms-overflow-
style属性设置为scrollbar,否则将无法正确检测到宽度。(代码已更新)

更新#2 在默认设置为“仅在滚动时显示滚动条”(Yosemite及更高版本)的Mac OS上,这将不起作用。



 类似资料:
  • 问题内容: 我正在尝试使用JavaScript检测浏览器滚动条的位置,以确定当前视图在页面中的位置。我的猜测是,我必须检测轨道上的拇指在哪里,然后检测拇指的高度占轨道总高度的百分比。我是不是过于复杂了,还是JavaScript提供了比这更简单的解决方案?任何想法代码明智? 问题答案: 您可以使用和获取分别滚动的垂直和水平偏移。可如果你关心整个页面。如果需要百分比,可以将其与和(再次可能是主体)进行

  • 问题内容: 有没有办法可靠地告诉浏览器的视口宽度(包括滚动条,但不包括其余的浏览器窗口)? 此处列出的所有属性都不能告诉我屏幕的宽度,包括滚动条(如果存在) 问题答案: 只要身体是100%,就可以工作。 HTML: CSS: 脚本: 我在演示中放了一个高大的div以强制滚动条。

  • 问题内容: 亲朋好友,是否可以增加放置在元素内部的滚动条的宽度? 我不是在谈论 浏览器本身 的默认滚动条,此页面以全屏模式运行,并且由于浏览器滚动条从不显示图片,因此内部元素具有自己的滚动条。 问题答案: 如果您谈论的是带有(或)自动出现在滚动条上的滚动条,那么没有,那仍然是浏览器使用常规OS小部件呈现的本机滚动条,而不是可以样式化的(*)。 虽然您可以按照Matt的建议,将其替换为由可样式化的d

  • 问题内容: 我在HTML5项目中使用了Google图表。它使用JSON值(来自DB)来绘制图形。 我的需求是如果JSON值中的数据大于5到6,则需要一个滚动条。我已经通过JSFiddle创建了示例附加链接。 目前,我已经给出了22个值。当JSON值具有3或4个值时,我需要相同的效果。条形宽度没有任何变化,即使JSON有50个值,它也应保持相同的宽度。 请给我解决方案,非常感谢。:) 这是链接:-h

  • 返回当前页面的滚动位置。 如果浏览器支持 pageXOffset 和 pageYOffset ,那么请使用 pageXOffset 和 pageYOffset ,否则请使用 scrollLeft 和 scrollTop 。 你可以省略 el 参数,默认值为 window。 const getScrollPosition = (el = window) => ({ x: el.pageXOffs

  • 我使用的是RichTextFX,我很惊讶代码区没有默认启用滚动条。我怎样才能让它出现?