【发布时间】:2014-03-02 22:23:00
【问题描述】:
我找到了一个 JQuery 解决方案,可以在打开模式视图时禁用正文滚动,但我正在寻找一个 Javascript 解决方案,谁能告诉我如何转换为 JS:
$(function () {
var $body = $(window.document.body);
function bodyFreezeScroll() {
var bodyWidth = $body.innerWidth();
$body.css('overflow', 'hidden');
$body.css('marginRight', ($body.css('marginRight') ? '+=' : '') + ($body.innerWidth() - bodyWidth))
}
function bodyUnfreezeScroll() {
var bodyWidth = $body.innerWidth();
$body.css('marginRight', '-=' + (bodyWidth - $body.innerWidth()))
$body.css('overflow', 'auto');
}
$('.modal').hide()
$('.longcontent.main button').click(function () {
$('.modal').show()
bodyFreezeScroll()
})
$('.modal button').click(function () {
$('.modal').hide()
bodyUnfreezeScroll()
})})
【问题讨论】:
-
你想把哪一部分翻译成 vanilla js?诀窍是拥有一个与当前视口一样大的“背景”容器(上:0;右:0;下:0;左:0;)此容器具有 css 属性
overflow: auto(或滚动)所以视口更大的内容可以滚动。然后你可以将它应用到正文中,只要打开拨号:document.body.style.overflow = "hidden"; -
是的,禁用滚动并重新启用它效果很好,但是有一个隐藏和显示滚动条的动画,宽度会改变我想获得这一行的等效项:` $body.css('marginRight', ($body.css('marginRight') ? '+=' : '') + ($body.innerWidth() - bodyWidth))`
-
我在你的 jsfiddle 中没有看到动画。这只会为正文添加一个边距。
-
这里是我想要实施解决方案的地方:jsfiddle.net/3xv6A/424
-
问题是,当模态视图打开时,由于滚动条将被隐藏,身体向右移动,当滚动条再次返回时,它向左移动,所以我不想有这个问题
标签: javascript jquery html css