Bilibili-Evolved/min/touch-move.min.js
2019-10-12 09:51:39 +08:00

1 line
1.7 KiB
JavaScript

(()=>{return(e,t)=>{const n=(e,t,n)=>{const c=Math.pow(Math.abs(e.x-t.x),2);const s=Math.pow(Math.abs(e.y-t.y),2);return c+s>=n*n};const c=(e,t)=>{return new MouseEvent(e,{screenX:t.screenX,screenY:t.screenY,clientX:t.clientX,clientY:t.clientY,bubbles:true,cancelable:true,view:unsafeWindow,detail:1})};const s=(e,t,n)=>{return new WheelEvent("wheel",{deltaY:t.y-e.y,screenX:n.screenX,screenY:n.screenY,clientX:n.clientX,clientY:n.clientY,bubbles:true,cancelable:true,view:unsafeWindow})};const o=[];const l={passive:false,capture:true};const r=(e,t)=>{if(o.some(t=>t.element===e)){return}let r;let a;let u;let i;const h=_.get(t,"minMoveDistance",20);const v=_.get(t,"scroll",false);const d=e=>{if(e.touches.length<1){return}const t=e.touches[0];a=t;r={x:t.clientX,y:t.clientY};e.target.dispatchEvent(c("mousedown",t))};e.addEventListener("touchstart",d,l);const f=e=>{if(e.touches.length!==1){return}const t=e.touches[0];const o={x:t.clientX,y:t.clientY};if(!v){if(n(r,o,h)){e.target.dispatchEvent(c("mousemove",t));i=true;if(e.cancelable){e.preventDefault()}}else{i=false}}else{const t={x:u?u.clientX:r.x,y:u?u.clientY:r.y};console.log("touch scroll",t,o);e.target.dispatchEvent(s(t,o,a))}u=t};e.addEventListener("touchmove",f,l);const b=e=>{if(i){e.target.dispatchEvent(c("mouseup",u));if(e.cancelable){e.preventDefault()}i=false}};e.addEventListener("touchend",b,l);e.addEventListener("touchcancel",b,l);o.push({element:e,touchstart:d,touchmove:f,touchend:b})};const a=e=>{const t=o.findIndex(t=>t.element===e);if(t===-1){return}const n=o[t];["touchstart","touchmove","touchend"].forEach(t=>{e.removeEventListener(t,n[t],l)});e.removeEventListener("touchcancel",n.touchend,l);o.splice(t,1)};return{export:{enableTouchMove:r,disableTouchMove:a}}}})();