polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
64 lines (52 loc) • 2.05 kB
text/typescript
import {Vector2} from 'three/src/math/Vector2';
export class EventHelper {
constructor(private element: HTMLElement) {}
set_element(element: HTMLElement) {
this.element = element;
}
static element_position(event: MouseEvent | TouchEvent, element: HTMLElement, position: Vector2) {
const dim = element.getBoundingClientRect();
if ((event as TouchEvent).changedTouches) {
event = event as TouchEvent;
const touch = event.changedTouches[0];
position.x = touch.pageX - dim.x;
position.y = touch.pageY - dim.y;
} else {
event = event as MouseEvent;
position.x = event.pageX - dim.x;
position.y = event.pageY - dim.y;
}
}
// static element_position_old(event: MouseEvent, element: HTMLElement) {
// const dim = element.getBoundingClientRect();
// const x = event.pageX - dim.x;
// const y = event.pageY - dim.y;
// // console.log(event, x, y)
// return new Vector2(x, y);
// }
static normalized_position(event: MouseEvent, element: HTMLElement, position: Vector2) {
this.element_position(event, element, position);
const dim = element.getBoundingClientRect();
// const mouse = new Vector2();
position.x = ((position.x - window.scrollX) / dim.width) * 2 - 1;
position.y = -(((position.y - window.scrollY) / dim.height) * 2 - 1);
// return mouse;
}
static normalized_position_0_1(event: MouseEvent, element: HTMLElement, position: Vector2) {
this.element_position(event, element, position);
const dim = element.getBoundingClientRect();
// const mouse = new Vector2();
position.x = (position.x - window.scrollX) / dim.width;
position.y = (position.y - window.scrollY) / dim.height;
// return mouse;
}
element_position(event: MouseEvent, position: Vector2) {
EventHelper.element_position(event, this.element, position);
}
// element_position_old(event: MouseEvent) {
// return EventHelper.element_position_old(event, this.element);
// }
normalized_position(event: MouseEvent, position: Vector2) {
EventHelper.normalized_position(event, this.element, position);
}
}