Three.js || 优化 || 旋转不触发点击

本文探讨了在3D模型应用中,通过优化左键点击和旋转事件处理,解决bug问题。作者提出了三种策略,最终选择通过计算鼠标落下和抬起位置差异来触发查看事件,以适应不同用户点击速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 功能:左键按下并拖拽可旋转模型;左键点击可查看媒体资源
  • bug:旋转后会触发查看事件
  • 接手代码:mouseup监听绑定点击事件,并触发查看事件onView

优化思路一:新增mousedown监听,设置定时器,落下300秒后值为真;抬起值为假。(则长按旋转时值为假,点击时值为真。)

// 绑定mousedown
setDownTime()
{
	setTimeout(() =>
	{
		this.downUpTime = true
	}, 300)
},
// 绑定mouseup
onUpdateRay()
{
	this.downUpTime = false
	setTimeout(() =>// 我这里的代码逻辑需要缓冲300秒,具体情况具体分析
	{
		'''原代码'''
		if (this.downUpTime)
			this.onView()// 查看事件
	}, 300)
}

优化思路二:新增mousedown监听,计算左键落下与抬起时间差,小于阈值才触发查看事件

// 绑定mousedown
setDownTime()
{
	this.downUpTime = Date.now()
},
// 绑定mouseup
onUpdateRay()
{
	'''原代码'''
	if (Date.now() - this.downUpTime < 300)
		this.onView()// 查看事件
}

优化思路三:新增mousedown监听,计算左键落下和抬起位置差,完全相等才触发查看事件

// 绑定mousedown
setDownTime()
{
	this.x = (event.clientX / window.innerWidth) * 2 - 1
    this.y = -(event.clientY / window.innerHeight) * 2 + 1
},
// 绑定mouseup
onUpdateRay()
{
	'''原代码'''
    let x = (event.clientX / window.innerWidth) * 2 - 1
    let y = -(event.clientY / window.innerHeight) * 2 + 1
	if (x === this.x && y === this.y)
		this.onView()// 查看事件

目前采用的是思路三,怕有的人点击快,有的人点击慢,300ms的阈值不普适。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值