Threejs轨道控制器(OrbitControls)对touchmove事件的拦截
Threejs的轨道控制器(OrbitControls)对touchmove冒泡事件的拦截
作者:咕魂
时间:2021年7月18日
问题描述:
创建控制器的方法:
new THREE.OrbitControls(camera, renderer.domElement) //创建控件对象
添加touch相关的事件监听函数
document.addEventListener('touchstart', onTouchStart)
document.addEventListener('touchmove', onTouchMove)
document.addEventListener('touchend', onTouchEnd)
function onTouchStart(event){...}
function onTouchMove(event){...}
function onTouchEnd(event){...}
此时document的事件函数是renderer.domElement的父级
查看OrbitControls.js的源码
找到onTouchMove(event)函数
往下找两行可以看到
event.preventDefault()
event.stopPropagation()
其中stopPropagation()会对冒泡事件进行拦截,即上文中通过对document对象添加监听函数会无法触发
解决办法:
直接改OrbitControls.js的源码,注释掉event.stopPropagation()
但一般不会这么做,毕竟这是人家官方给的
还有一个方法就是监听事件不要挂载在document上,和OrbitControls.js中的onTouchMove(event)一样,挂载到renderer.domElement上,即:
document.addEventListener('touchstart', onTouchStart)
renderer.domElement.addEventListener('touchmove', onTouchMove)
document.addEventListener('touchend', onTouchEnd)
之后就可以触发onTouchMove函数了
应用项目:3D扫雷
参考链接:js中的preventDefault与stopPropagation详解
Threejs轨道控制器(OrbitControls)对touchmove事件的拦截的更多相关文章
- three.js轨道控制器OrbitControls.js
https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址
- 实现html元素跟随touchmove事件的event.touches[0].clientX移动
主要是使用了transform:translateX 实现 <!DOCTYPE html> <html lang="en"> <head> &l ...
- 关于如何获取移动端 touchmove 事件中真正触摸点下方的元素
移动端的touchstart, touchmove, touchend三个事件,点击元素并拖动时,获取到了touchmove事件, 但是event.touches[0].target所指向的元素却是t ...
- H5页面开发的touchmove事件
在做一屏滚动的H5页面的时候,必须移除touchmove事件,如果不移除,在安卓机上会触发微信原生的向下滚动拉出刷新.在IOS上出现上下都可以继续滑动,所以需要移除document的touchmove ...
- Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- android 事件反拦截
有一种方法可以阻止父层的View截获touch事件,就是调用 getParent().requestDisallowInterceptTouchEvent(true);方法.一旦底层View收到tou ...
- android view、viewgroup 事件响应拦截处理机制
文章中会用到部分网络资源,首先将原作者的链接附上. 但是还是会附上数量较大的关于此部分内容的自己的思考. ----------------------------------------------- ...
- 移动端touchstart、touchmove事件的基本使用
在pc端,我们通常使用$(window).scroll()事件来监听元素的位置,来做一些入场动效,如: $(window).scroll(function(){ var panel3Move = do ...
- angularjs控制器之间通信,事件通知服务
service要记住一点就是所有的services都是singleton(单例)的,service更多的是做一些业务逻辑,数据交互.当然,利用单例这特点也可以用来做不同控制器间的通信.控制器间的通信也 ...
- threejs Object的点击(鼠标)事件(获取点击事件的object)
objects=[]; raycaster = new THREE.Raycaster(); mouse = new THREE.Vector2(); //监听全局点击事件,通过ray检测选中哪一个o ...
随机推荐
- TDesign腾讯高保真Axure RP中后台交互模板及元件组件库
TDesign腾讯Axure RP中后台交互模板部件及元件组件库素材基于腾讯TDesign素材库,进行二次创作,并非官网的免费静态版.具体内容,可以看右侧的预览按钮,确认内容. 在线演示及下载:htt ...
- HUAWEI USG6505E 如何使用光电互斥口
1.display ip interface brief 2.display int g0/0/4 查看端口 是否为光电互斥口,并确定端口当前状态 Copper 电口 Fiber 光口 3.inte ...
- 鸿蒙NEXT开发实战教程:仿抖音短视频
今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图: 下面为大家讲解这个项目的详细教程. tabbar Tabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里 ...
- Flex布局-子项
弹性盒子是一种用于 按行 或 按列的一维布局方法. 元素可以膨胀以填充额外的空间, 也可以 收缩 以适应更小的空间. flex 容器项重点 只是用表格进行排版而已, 横向内容无关联哈, 只是简要回忆一 ...
- Excel 拼接为 SQL 并打包 exe
关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...
- Web前端入门第 55 问:JavaScript 严格模式与非严格模式区别
JavaScript 默认是非严格模式的,可以通过 "use strict"; 启用严格模式.此声明语句可以放在 JS 文件顶部,也可以放在函数内部. 启用严格模式 1.外部脚本在 ...
- TINYINT[M]、INT[M]和BIGINT[M]中M值的意义
TINYINT[(M)] [UNSIGNED] [ZEROFILL] A very small integer. The signed range is -128 to 127. The unsign ...
- 万字长文: 仅花7天,利用AI编程神器Cursor 从0到1开发上线个人网站,保姆级教程!
大家好,我是狂师. 今天我们来分享一下,如何利用AI编程帮助我们开发一款个人定制网站,保姆级教程,篇符较长,建议先保存收藏. 这篇文章,将从0到1,讲解如何利用AI编程开发并上线一款个人网站产品,包括 ...
- ansible-playbook常用模块
lineinfile 此模块是针对文件特殊行,使用后端引用的正则表达式来替换. - hosts: 192.168.50.1 gather_facts: no tasks: - name: 设置UseD ...
- Spring基础-AOP
AOP AOP:面向切面编程 Spring 的Aop是为了解耦.弥补OOP的不足. Spring支持Aspect J的注解式切面编程 使用@Aspect是一个切面 使用@After.@Before.@ ...