【发布时间】:2020-05-25 19:37:01
【问题描述】:
我正在尝试根据要到达的位置计算球上箭头的角度。 箭头在移动,但方向完全无法解释,谁能指点一下?
Codepen 可用:Codepen
我在这里添加了完整的代码(根据输入编辑): 我添加了一个步骤来使角度计算的差异更大,不确定这是否是正确的方法,但它似乎更实用。加上在角度方法中添加了 +/- 90,但这似乎并没有解决它。感觉还是怪怪的。
class Throwable {
constructor(){
this.throwObject = null;
this.canDrag = null;
this.initialDiffX = 0;
this.initialDiffY = 0;
this.previousX = 0;
this.previousY = 0;
this.intervalCounter = 0;
}
set x(input) {
this.throwObject.style.left = input + 'px';
}
set y(input) {
this.throwObject.style.top = input + 'px';
}
set rotation(input) {
this.throwObject.style.transform = `rotate(${input}deg)`;
}
init(){
this.throwObject = document.querySelector('.throwable');
this.throwObject.addEventListener('mousedown', this.activateDrag.bind(this));
this.throwObject.addEventListener('mouseup', this.deactivateDrag.bind(this));
document.addEventListener('mousemove', this.drag.bind(this));
}
activateDrag(event) {
this.canDrag = true;
this.initialDiffX = event.clientX - this.throwObject.offsetLeft;
this.initialDiffY = event.clientY - this.throwObject.offsetTop;
}
deactivateDrag() {
this.canDrag = false;
}
drag(event) {
if(this.canDrag === true) {
if(this.intervalCounter >= 30) {
this.intervalCounter = 0;
}
if(this.intervalCounter === 0) {
this.previousX = event.clientX;
this.previousY = event.clientY;
}
this.intervalCounter++;
this.y = event.clientY- this.initialDiffY;
this.x = event.clientX - this.initialDiffX;
this.rotation = this.angle(event.clientX, event.clientY, this.previousX, this.previousY);
}
}
angle(ex, ey, cx, cy) {
var dy = ey - cy;
var dx = ex - cx;
return Math.atan2(dy, dx) * 180 / Math.PI + 90;
}
// Untility
log(logObject) {
let logStr = '';
for(let key in logObject) {
logStr += `${key}: ${logObject[key]}<br>`;
}
document.getElementById('log').innerHTML = logStr;
}
}
let throwable = new Throwable();
throwable.init();
我在比较两个不同的值时犯了一个错误,我修复了它,它工作得更好,有时仍然有一些奇怪的行为,似乎在某些点不知道该去哪里。但比以前工作得更好。
【问题讨论】:
-
angle()函数返回一个以度为单位的值,您确定这是this.rotation所期望的吗? -
是的,它的期望度数:` set rotation(input) { this.throwObject.style.transform =
rotate(${input}deg); } `
标签: javascript math arrows atan2