javascript - 仅使用滚动条滚动
问题描述
我正在使用three.js 来允许用户创建和编辑涉及使用滚轮/两指功能的3D 模型来放大和缩小。我想要页面的第二部分默认情况下不在屏幕上,但用户可以向下滚动查看它。优选地,这将仅使用滚动条来完成,而仍然可以使用滚轮。
出于性能原因,我宁愿不必使用诸如 vue.js 之类的东西。用户提供保留在他们计算机上的数据,我在这两个部分都使用了这些数据。这可以防止我只是将数据放在另一个屏幕上。
Overflow:hidden
是不可能的,因为那时我无法滚动到底部。
我尝试使用PreventDefault
几种不同EventListeners
的方法,但它们都不能正常工作。
下面是确定窗口大小的函数,应该包含一个函数或代码来防止滚动。没有特定的元素不应该滚动,它们都不应该滚动。
function onWindowResize() {
var viewWidth;
var viewHeight;
viewHeight=window.innerHeight-315;
//For Mobile
if(!UIactive && innerWidth < 640){
viewWidth= window.innerWidth;
//For Computer & Tablet
} else {
viewWidth= window.innerWidth -317;
if(window.innerHeight < 700){
viewHeight=window.innerHeight-52.67;
//Disable Scrollwheel
window.addEventListener('wheel',function(event){
//mouseController.wheel(event);
event.preventDefault();
}, false);
}
}
camera.aspect = (viewWidth) / (viewHeight);
camera.updateProjectionMatrix();
renderer.setSize(viewWidth, viewHeight);
UI.style.height= (viewHeight+'px');
}
编辑:我尝试使用类似问题的答案。这没有达到预期的结果。我将代码更改为窗口......和文档......并且包含的console.log语句有效,但我仍然可以滚动。
this.canvas.addEventListener('wheel',function(event){
mouseController.wheel(event);
return false;
}, false);
然后我继续尝试再次使用 preventDefault 并收到以下错误
由于目标被视为被动,无法在被动事件侦听器中阻止默认值
解决方案
谷歌浏览器文档说,
通过这种干预,滚轮/触摸板滚动不会在文档级别的滚轮事件侦听器上被阻止,这些侦听器不需要在滚轮事件上调用 preventDefault()。
因此,您应该在特定 div 上应用 onmousewheel 事件,如下所示:
<div id="ScrollableDiv" style="height : 900px;background-color : red">
</div>
function stop(){
return false;
}
var div = document.getElementById('ScrollableDiv');
div.onmousewheel= stop;
请参考这个工作小提琴。
推荐阅读
- routes - 将命名路由转换为资源集合
- quill - 创建 Quill.js 主题
- react-native - 获取原始文本不能在 a 之外使用
标签。不渲染字符串:” - protocol-buffers - 停止省略协议缓冲区中的默认值
- symfony - 使用 LexikJWTAuthenticationBundle 2.4 生成令牌 Symfony flex
- node.js - 如何将大量数据上传到 Firebase Firestore
- oracle - 当 job_action 需要调用具有 CLOB 参数的过程时,如何创建作业
- python - Google Stackdriver 使用 Redis 队列登录 App Engine (Python)
- javascript - 如何在语义-ui反应的下拉文本字段中添加新行?
- jenkins - 无法建立 JDBC 连接