/
trackball.min.js
11 lines (10 loc) · 2.43 KB
/
trackball.min.js
1
2
3
4
5
6
7
8
9
10
11
/*
Trackball.js v1.1.1 10/08/2023
Copyright (c) 2023, Robert Eisele (robert@raw.org)
Licensed under the MIT license.
*/
(function(u){function g(c){function e(b){0!==f&&p();var q=l.getBoundingClientRect();b=a.g(b.clientX,b.clientY,q);m=k=performance.now();a.drag={startVector:b,box:q};requestAnimationFrame(a._doDraw)}function d(b){null!==a.drag&&(b=Quaternion.fromBetweenVectors(a.drag.startVector,a.g(b.clientX,b.clientY,a.drag.box)),a.q=b.mul(a.p),requestAnimationFrame(a._doDraw))}function h(b){if(null!==a.drag){m=k;k=performance.now();b=Quaternion.fromBetweenVectors(a.drag.startVector,a.g(b.clientX,b.clientY,a.drag.box));
a.p=a.q=b.mul(a.p);a.drag=null;if(a.opts.smooth&&(f=Math.min(.2,Math.abs(2*Math.acos(b.w)/Math.max((k-m)/50,1))),0<f)){r=[b.x,b.y,b.z];n=0;a.slideID=requestAnimationFrame(t);return}requestAnimationFrame(a._doDraw)}}function t(){n+=f;f*=.93;a.q=Quaternion.fromAxisAngle(r,n).mul(a.p);a._doDraw();.001>f?p():a.slideID=requestAnimationFrame(t)}function p(){cancelAnimationFrame(a.slideID);a.p=a.q;a.slideID=null;f=0}var a=this,m=0,k=0,f=0,r=null,n=0;c||(c={});c.nodeType&&(c={scene:c});"string"===typeof c.scene&&
(c.scene=document.querySelector(c.scene));c.onDraw||(c.onDraw=function(){});a.opts=c;a.p=a.q=c.q||Quaternion.ONE;var l=c.scene;a._doDraw=function(){c.onDraw.call(a,a.q)};l.addEventListener("mousedown",e,{passive:!0});document.addEventListener("mousemove",d,{passive:!0});document.addEventListener("mouseup",h,{passive:!0});l.addEventListener("touchstart",function(b){b.preventDefault();1===b.touches.length&&e(b.touches[0])},{passive:!1});document.addEventListener("touchmove",function(b){1===b.changedTouches.length&&
d(b.changedTouches[0])},{passive:!0});document.addEventListener("touchend",function(b){1===b.changedTouches.length&&h(b.changedTouches[0])},{passive:!0});requestAnimationFrame(a._doDraw)}g.prototype={p:null,q:null,opts:null,slideID:null,drag:null,g:function(c,e,d){var h=Math.max(d.width,d.height)-1;c="x"===this.opts.limitAxis?0:(2*(c-d.x)-d.width-1)/h;e="y"===this.opts.limitAxis?0:(2*(e-d.y)-d.height-1)/h;d=c*c+e*e;return 1>=2*d?[c,e,Math.sqrt(1-d)]:[c,e,.5/Math.sqrt(d)]},rotate:function(c){this.drag||
this.slideID||(this.q=this.p=this.p.mul(c),requestAnimationFrame(this._doDraw))}};"function"===typeof define&&define.amd?define([],function(){return g}):"object"===typeof exports?(Object.defineProperty(exports,"__esModule",{value:!0}),Quaternion["default"]=g,Quaternion.Trackball=g,module.exports=g):u.Trackball=g})(this);