如何获取浏览器的滚动条大小?

IT技术 javascript scrollbar
2021-02-04 21:49:21

如何在 JavaScript 中确定水平滚动条的高度或垂直滚动​​条的宽度?

6个回答

Alexandre Gomes 博客 我还没有尝试过。请让我知道这对你有没有用。

function getScrollBarWidth () {
  var inner = document.createElement('p');
  inner.style.width = "100%";
  inner.style.height = "200px";

  var outer = document.createElement('div');
  outer.style.position = "absolute";
  outer.style.top = "0px";
  outer.style.left = "0px";
  outer.style.visibility = "hidden";
  outer.style.width = "200px";
  outer.style.height = "150px";
  outer.style.overflow = "hidden";
  outer.appendChild (inner);

  document.body.appendChild (outer);
  var w1 = inner.offsetWidth;
  outer.style.overflow = 'scroll';
  var w2 = inner.offsetWidth;
  if (w1 == w2) w2 = outer.clientWidth;

  document.body.removeChild (outer);

  return (w1 - w2);
};
如果您将主题更改为具有不同大小滚动条的主题,则计算与实际的偏差是多少?
2021-03-15 21:49:21
是的,我得到了相同的谷歌结果。:) 我正在努力让你了解情况。
2021-03-18 21:49:21
这个想法是天才,我肯定会基于此制作一个 MooTools 类。
2021-03-29 21:49:21
请参阅此处以获取交叉参考:stackoverflow.com/questions/3417139/...
2021-04-02 21:49:21
使用不同的页面缩放返回不同的值。Win7,歌剧,FF。
2021-04-07 21:49:21

使用 jQuery,您可以将 Matthew Vines 的回答缩短为:

function getScrollBarWidth () {
    var $outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),
        widthWithScroll = $('<div>').css({width: '100%'}).appendTo($outer).outerWidth();
    $outer.remove();
    return 100 - widthWithScroll;
};
谢谢,这个解决方案很干净!!
2021-03-13 21:49:21
如果您已经在使用 JQuery,那么 Daemon 的评论是无关紧要的。是的,添加 JQuery 只是为了做到这一点是无稽之谈,但对于那些已经在他们的项目中使用 JQuery 的人来说,这是一个比公认的更“简单”的解决方案。
2021-03-18 21:49:21
如果在它之前复制粘贴 JQuery 的整个源代码,这个解决方案真的会感觉更干净吗?因为这几乎就是这个解决方案所做的。这个问题并没有在 JQuery 中寻求答案,并且在不使用库的情况下执行此任务是完全可能且高效的。
2021-03-29 21:49:21

如果你正在寻找一个简单的操作,只需混合纯 dom js 和 jquery,

var swidth=(window.innerWidth-$(window).width());

返回当前页面滚动条的大小。(如果它是可见的,否则将返回 0)

这正是我想要的
2021-03-31 21:49:21
如果窗口没有滚动条(大显示器或小页面/应用程序),这将失败
2021-04-01 21:49:21
对于我们这些不使用 jQuery 的人,有什么用$(element).width()没有jQuery怎么写?
2021-04-03 21:49:21

这是我发现的唯一脚本,它在 webkit 浏览器中工作...... :)

$.scrollbarWidth = function() {
  var parent, child, width;

  if(width===undefined) {
    parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
    child=parent.children();
    width=child.innerWidth()-child.height(99).innerWidth();
    parent.remove();
  }

 return width;
};

最小化版本:

$.scrollbarWidth=function(){var a,b,c;if(c===undefined){a=$('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');b=a.children();c=b.innerWidth()-b.height(99).innerWidth();a.remove()}return c};

你必须在文档准备好时调用它......所以

$(function(){ console.log($.scrollbarWidth()); });

2012 年 3 月 28 日在最新的 FF、Chrome、IE 和 Safari 中在 Windows 7 上测试,100% 工作。

来源:http : //benalman.com/projects/jquery-misc-plugins/#scrollbarwidth

只是为了加强通过@sstur和@TheCloudlessSky提出的观点,上面的代码是一样的一个在本Alman的插件,它不会缓存的结果width,而是重新计算每一次。它有效,但效率极低。请帮个忙,改用Alman 插件中正确版本
2021-03-11 21:49:21
该代码中的宽度总是 === 未定义。也可以这样做 if (true) { ... }
2021-03-21 21:49:21
@MartinAnsty,如果您查看源代码,它是在外部闭包中声明的。
2021-03-28 21:49:21
@MartinAnsty 但是 [width] 变量是函数内部声明的,因此每次调用该函数时都会重新创建它。
2021-04-05 21:49:21
更正:width始终===未定义的第一时间的函数被调用。在对该函数的后续调用中width,该检查只是防止不必要地再次运行计算。
2021-04-08 21:49:21

对我来说,最有用的方法是

(window.innerWidth - document.getElementsByTagName('html')[0].clientWidth)

使用原生 JavaScript。

在此处输入图片说明

正是我所需要的。一个建议:第二项可以用 代替document.documentElement.clientWidthdocumentElement更清晰干净地表达了获取<html>元素的意图
2021-03-26 21:49:21
谢谢@stephen-kendy。问候。
2021-04-04 21:49:21
如果您使用 JS,最好、最简单的解决方案!
2021-04-06 21:49:21