我想阻止实际滚动元素但我确实想要滚动条的好处(因此有些事情不需要通过编程方式使用某些JavaScript而不是浏览器为我们处理事情)
是否有人为此提供了更好或更好的解决方案?任何帮助都非常感谢。
我终于想出了一个似乎有效的解决方案(经测试使用)IE11,Edge,Chrome,Firefox,Chrome for Android和Firefox for Android。
因此,可以忽略此问题或问题描述的其余部分。
找到一种方法来切换(阻止)滚动浏览IE 11,Edge,Firefox,Chrome和Firefox for Android。虽然它在Chrome for Android中确实运行得不是很好(非常滞后)。谁知道为什么?
这是我的解决方案(12-03-2017)的摘要,但 Chrome for Android似乎不喜欢它(!)。请帮助改进这个解决方案(或者可能有更好的方法与这个特定的解决方案不同?)。
div
,其滚动内容在我的代码中有position: fixed
(#scrollsviascrolldistract
)。div
与滚动内容div
具有相同的高度,其中position: absolute
(或者可能position: relative
更好)。这是嵌入式代码示例中的#scrolldistract
。window.requestAnimationFrame
,该函数会根据当前marginTop
值调整滚动内容div
(#scrollsviascrolldistract
)的scrollTop
值窗口(使用负边距)。marginTop
值,以使滚动内容div
不受当前滚动条位置的影响。在IE 11,Edge,Firefox和Chrome(可以正常工作)和Chrome for Android(不喜欢它)的代码片段下进行测试,并测试了Firefox for Android(确实喜欢它)。似乎比使用div
两个position: fixed
元素要好得多。
var scrollDisabled = false;
function toggleScroll() {
scrollDisabled = !scrollDisabled;
}
function doScroll() {
var st;
if (!scrollDisabled) {
$("#scrollsviascrolldistract").css("marginTop", -$(window).scrollTop());
}
window.requestAnimationFrame(doScroll);
}
window.requestAnimationFrame(doScroll);
$("#scrolltoggler").on('click', toggleScroll);
body {
background-color: whitesmoke;
}
#scrollsviascrolldistract {
position: fixed;
left: 0px;
top: 0px;
width: 100%;
}
#scrolldistract {
position: absolute;
left: 0;
top: 0;
height: 6000px;
}
.red,
.blue {
position: relative;
width: 100%;
height: 300px;
}
.red {
background-color: red;
}
.blue {
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="scrolldistract">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" height="6000">
</div>
<div id="scrollsviascrolldistract">
<div class="red">BEGIN</div>
<div class="blue"><button id="scrolltoggler">Toggle Scroll On/Off</button></div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue">END</div>
</div>
所以我制作一个元素滚动但不要让它可见。我在其中放置了一个间隔图像,以将其填充到合适的高度。
然后出现跨浏览器问题。
一些HTML5(使用适当的DOCTYPE):
<div id="scrollsviascrolldistract">
<div class="red">BEGIN</div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue"> </div>
<div class="red"> </div>
<div class="blue">END</div>
</div>
一些CSS:
body {
background-color: whitesmoke;
}
#scrollsviascrolldistract {
position: fixed;
left: 0px;
top: 0px;
}
#scrolldistract {
position: fixed;
left: 0;
top: 0;
bottom: 0;
right: 0;
overflow-y: scroll;
background: rgba(0,0,0,0);
z-index: 999;
}
.red, .blue {
position: relative;
width: 900px;
height: 300px;
}
.red {
background-color: red;
}
.blue {
background-color: blue;
}
一些JavaScript(使用jQuery):
$(function() {
var $window = $(window);
var $scrollsviascrolldistract = $('#scrollsviascrolldistract');
var $scrolldistract = $('#scrolldistract');
$scrolldistract.focus();
$scrolldistract.on('scroll', function() {
var scrollTop = $scrolldistract.scrollTop();
$scrollsviascrolldistract.css('marginTop', -scrollTop);
});
});
答案 0 :(得分:0)
我现在准备好回答我自己的问题了。
所以这是一种切换(阻止)滚动的方法:
div
,其滚动内容在我的代码中有position: fixed
(#scrollsviascrolldistract
)。div
与滚动内容div
具有相同的高度,其中position: absolute
(或者可能position: relative
更好)。这是嵌入式代码示例中的#scrolldistract
。window.requestAnimationFrame
,该函数会调整拉出器marginTop
(此处称为div
)的#puller
值,该值应为滚动内容的第一个子句{{ 1}}(div
)与窗口的当前#scrollsviascrolldistract
值相关(使用负边距)。起初我认为我可以自己提取滚动内容(更改scrollTop
的{{1}}),但这在某些浏览器中不起作用。marginTop
值,以使滚动内容#scrollsviascrolldistract
不受当前滚动条位置的影响。在IE 11,Edge,Firefox和Chrome以及适用于Android的Chrome和适用于Android的Firefox的代码段中进行了测试。似乎比使用marginTop
两个div
元素要好得多。
div
position: fixed
$(function() {
var scrollDisabled = false;
var $window = $(window);
function doScroll() {
var st = $window.scrollTop();
if (!scrollDisabled) {
console.log(st);
if (st > 6000 - $window.innerHeight()) {
$("#puller").css("marginTop", -(6000 - $window.innerHeight()));
} else {
$("#puller").css("marginTop", -st);
}
}
window.requestAnimationFrame(doScroll);
}
window.requestAnimationFrame(doScroll);
$("#scrolltoggler").on('click', function(e) {
scrollDisabled = !scrollDisabled;
});
});