如何在JavaScript中确定水平滚动条的高度或垂直滚动条的宽度?
来自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); };
使用jQuery,您可以缩短Matthew Vines的答案:
function getScrollBarWidth () { var $outer = $('').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'), widthWithScroll = $('').css({width: '100%'}).appendTo($outer).outerWidth(); $outer.remove(); return 100 - widthWithScroll; };
如果JQuery的整个源代码在它之前被复制粘贴,这个解决方案真的会感觉更干净吗?因为这就是这个解决方案正在做的事情.这个问题并未在JQuery中寻求答案,并且在不使用库的情况下执行此任务是完全可能且高效的.
如果你已经在使用JQuery,那么守护进程的评论是无关紧要的.是的,添加JQuery只是为了做到这一点是无稽之谈,但对于那些已经在他们的项目中使用JQuery的人来说,这是一个比接受的更简单的解决方案.
谢谢,这个解决方案非常干净!
比投票的解决方案更清洁
3> Jan Šafránek..:这只是我发现的脚本,它在webkit浏览器中工作...... :)
$.scrollbarWidth = function() { var parent, child, width; if(width===undefined) { parent = $('').appendTo('body'); child=parent.children(); width=child.innerWidth()-child.height(99).innerWidth(); parent.remove(); } return width; };最小化版本:
$.scrollbar').appendTo('body');b=a.children();c=b.innerWidth()-b.height(99).innerWidth();a.remove()}return c};当文档准备就绪时你必须调用它......所以
$(function(){ console.log($.scrollbarWidth()); });在Windows 7上测试了最新的FF,Chrome,IE和Safari以及100%正常运行的2012-03-28.
来源:http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
@MartinAnsty但[width]变量在函数内部声明*,因此每次调用函数时都会重新创建它.
宽度将始终===在该代码中未定义.也许如果(真){...}
@MartinAnsty,如果你看一下[source](https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-scrollbarwidth.js#L12),它会在外部闭包中声明.
更正:`width`将_always_ === undefined**函数被调用的第一个**时间.在后续对函数"width"的调用已经设置好后,该检查只会阻止计算再次不必要地运行.
为了强调@sstur和@TheCloudlessSky的观点,上面的代码与Ben Alman的插件中的代码相同,并且它不会将结果缓存在`width`中,而是每次重新计算它.它有效,但效率非常低.请帮助世界,并在Alman的插件中使用[正确版本](https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-scrollbarwidth.js).
4> Beep.exe..:如果你正在寻找一个简单的操作,只需混合普通的dom js和jquery,
var swidth=(window.innerWidth-$(window).width());返回当前页面滚动条的大小.(如果它是可见的,否则将返回0)
如果窗口没有滚动条(大显示器或小页面/应用程序),这将失败
5> Josh Stodola..:window.scrollBarWidth = function() { document.body.style.overflow = 'hidden'; var width = document.body.clientWidth; document.body.style.overflow = 'scroll'; width -= document.body.clientWidth; if(!width) width = document.body.offsetWidth - document.body.clientWidth; document.body.style.overflow = ''; return width; }
如果身体有一个固定的宽度,则不起作用.
6> Memet Olsen..:我找到了一个简单的解决方案,适用于页面内部的元素,而不是页面本身:
$('#element')[0].offsetHeight - $('#element')[0].clientHeight
这将返回x轴滚动条的高度.
7> 小智..:对我来说,最有用的方式是
(window.innerWidth - document.getElementsByTagName('html')[0].clientWidth)用香草JavaScript.
正是我所需要的。一个建议:第二项可以用`document.documentElement.clientWidth`代替。`documentElement`更清晰,干净地表达了获取`<html>`元素的意图。
8> mpen..:来自David Walsh的博客:
// Create the measurement node var scrollDiv = document.createElement("div"); scrollDiv.className = "scrollbar-measure"; document.body.appendChild(scrollDiv); // Get the scrollbar width var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; console.info(scrollbarWidth); // Mac: 15 // Delete the DIV document.body.removeChild(scrollDiv);
.scrollbar-measure { width: 100px; height: 100px; overflow: scroll; position: absolute; top: -9999px; }
推荐阅读
如何解决《基础6核心js错误》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Flux实施分析》经验,为你挑选了0个好方法。 ... [详细] 如何解决《在使用MSVC2015构建boost1.55时指定工具集版本》经验,为你挑选了1个好方法。 ... [详细] 如何解决《JBoss-如何在jboss-deployment-structure中排除javax.validation?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《一种方法调用,多种可能的错误条件-如何在面向对象编程中进行管理?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《添加矢量中相同的值》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在Xcode中的UITests之间保持应用程序打开》经验,为你挑选了2个好方法。 ... [详细] 如何解决《D3找到线的角度》经验,为你挑选了1个好方法。 ... [详细] 如何解决《邮件合并复选框形式字段》经验,为你挑选了1个好方法。 ... [详细] 如何解决《golang将一个字符串添加到切片interface{}》经验,为你挑选了1个好方法。 ... [详细] 如何解决《是否可以使用SpriteKit在应用程序上使用XcodeUITesting?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《将<script>中的字符串插入<ahref="">》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Python中seaborntsplot函数中的标准偏差和误差条》经验,为你挑选了2个好方法。 ... [详细] 如何解决《我可以使用TensorFlow测量单个操作的执行时间吗?》经验,为你挑选了5个好方法。 ... [详细] 如何解决《类型动画师的预期资源[ResourceType]》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Jekyll:在SCSS部分中使用_config.yml中的值》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何使用HttpsUrlConnection而不是DefaultHttpClient》经验,为你挑选了3个好方法。 ... [详细] 如何解决《使用RxAndroid安排》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在Python中创建类的不同实例?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何使用.translate()从Python3.x中的字符串中删除标点符号?》经验,为你挑选了3个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1Visual Studio代码中的XML自动注释C#
- 2DateTime未正确保存到我的数据库中
- 3如何在node.js中发送200响应
- 4如何覆盖wkwebview超链接操作表
- 5全局变量类c ++
- 6差异两个rpms? - linux
- 7监视生产服务器上的django rest framework api
- 8在不同的Linux机器上部署PyQt5应用程序
- 9以编程方式获取内存使用率iOS
- 10计划中的汽车和Cdr
- 11使用iomanip匹配printf格式
- 12如何在Swift中以wav格式录制音频?
- 13在dplyr和列中使用重命名时避免错误不存在
- 14DjangoRestFramework ModelSerializer DateTimeField仅在创建对象时转换为当前时区
- 15RxJS:如何让一个Observer处理多个Observables?
- 16如何使用moment.js获取上个月的第一天和未来一个月的最后一天
- 17如何创建响应式(变化列数)Angular-Material卡网格
- 18NodeJS/Express4端点生成损坏的xlsx文件
- 19排列,但有一些数字保持在一个顺序
- 20如何获取桌面位置?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有