import THREE from 'THREE'; import { debounce } from './utils'; let raycaster = new THREE.Raycaster(); export function setEvents(camera, elem,items, type, wait) { let listener = function(event) { let mouse = { //-1更利于手指点击 x: ((event.clientX - 4 ) / event.target.clientWidth ) * 2 - 1, y: -((event.clientY - 4 ) / event.target.clientHeight) * 2 + 1 }; let vector = new THREE.Vector3(); vector.set(mouse.x, mouse.y, 0.5); vector.unproject(camera); raycaster.ray.set(camera.position, vector.sub(camera.position).normalize()); //console.log(event.type + ": " +mouse.x+", " +mouse.y); //console.log(event.type + ": " +event.offsetX+", " +event.offsetY); let target = raycaster.intersectObjects(items); if(event.type==="click"&&!target.length){//当很快地滑动时会造成target.length==0 window.lastMouse.x = null; window.lastMouse.y = null; } if (target.length) { target[0].type = type; target[0].object.dispatchEvent(target[0],event);//改 } }; if (!wait) { (elem||document).addEventListener(type, listener, false); } else { (elem||document).addEventListener(type, debounce(listener, wait), false); } }