setEvents.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import THREE from 'THREE';
  2. import { debounce } from './utils';
  3. let raycaster = new THREE.Raycaster();
  4. export function setEvents(camera, elem,items, type, wait) {
  5. let listener = function(event) {
  6. let mouse = { //-1更利于手指点击
  7. x: ((event.clientX - 4 ) / event.target.clientWidth ) * 2 - 1,
  8. y: -((event.clientY - 4 ) / event.target.clientHeight) * 2 + 1
  9. };
  10. let vector = new THREE.Vector3();
  11. vector.set(mouse.x, mouse.y, 0.5);
  12. vector.unproject(camera);
  13. raycaster.ray.set(camera.position, vector.sub(camera.position).normalize());
  14. //console.log(event.type + ": " +mouse.x+", " +mouse.y);
  15. //console.log(event.type + ": " +event.offsetX+", " +event.offsetY);
  16. let target = raycaster.intersectObjects(items);
  17. if(event.type==="click"&&!target.length){//当很快地滑动时会造成target.length==0
  18. window.lastMouse.x = null;
  19. window.lastMouse.y = null;
  20. }
  21. if (target.length) {
  22. target[0].type = type;
  23. target[0].object.dispatchEvent(target[0],event);//改
  24. }
  25. };
  26. if (!wait) {
  27. (elem||document).addEventListener(type, listener, false);
  28. } else {
  29. (elem||document).addEventListener(type, debounce(listener, wait), false);
  30. }
  31. }