Guest User

Untitled

a guest
Apr 13th, 2020
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5.98 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.     <meta charset="utf-8">
  6.     <meta name="viewport" content="width=device-width,initial-scale=1.0">
  7.     <meta name="author" content="Morpheus">
  8.     <meta name="copyright" content="Morpheus">
  9.     <meta name="keywords" content="Morpheus,app">
  10.     <meta name="description" content="paint app">
  11.     <title>JOYSTICK</title>
  12. </head>
  13.  
  14. <body>
  15.     <div id="box" style="width: 20px; height: 20px; background: #000;"></div>
  16.  
  17.     <script>
  18.         window.onload = () => {
  19.             controller(document.querySelector('#box'))
  20.             //console.log("started");
  21.         };
  22.  
  23.         function controller(element) {
  24.             let canvas = document.createElement('CANVAS');
  25.             document.body.appendChild(canvas);
  26.             canvas.style.background = "radial-gradient(deepskyblue, black)";
  27.             canvas.style.borderRadius = "50%";
  28.             canvas.style.opacity = "0.6";
  29.             canvas.style.zIndex = "10";
  30.             canvas.style.position = "absolute";
  31.             canvas.style.bottom = "0";
  32.             canvas.style.right = "0";
  33.             let cx = canvas.getContext('2d');
  34.             const W = innerWidth;
  35.             const H = innerHeight;
  36.             const CW = 150;
  37.             const CH = 150;
  38.             const EW = parseInt(element.style.width);
  39.             const EH = parseInt(element.style.height);
  40.             const SPEED = 5;
  41.             canvas.width = CW;
  42.             canvas.height = CH;
  43.  
  44.             //set CSS for the moving element and canvas
  45.             (function setObject() {
  46.                 element.style.position = 'absolute';
  47.                 element.style.left = `${Math.ceil(W / 2)}px`;
  48.                 element.style.top = `${Math.ceil(H / 2)}px`;
  49.                 element.style.zIndex = "5";
  50.                 //console.log("CSS set");
  51.             })();
  52.  
  53.             const controller = {
  54.                 x: 0,
  55.                 y: 0
  56.             };
  57.             canvas.addEventListener("touchstart", handleStart, false);
  58.             canvas.addEventListener("touchend", handleEnd, false);
  59.             canvas.addEventListener("touchcancel", handleCancel, false);
  60.             canvas.addEventListener("touchmove", handleMove, false);
  61.             canvas.addEventListener("mousedown", mouseStart, false);
  62.             canvas.addEventListener("mouseup", mouseEnd, false);
  63.             canvas.addEventListener("mouseover", mouseMove, false);
  64.             let ongoingTouches = [];
  65.             let interval;
  66.             let mouseMode = false;
  67.  
  68.             function handleStart(evt) {
  69.                 evt.preventDefault();
  70.                 let touches = evt.changedTouches;
  71.                 for (var i = 0; i < touches.length; i++) {
  72.                    controller.x = (touches[i].pageX - W + CW / 2) / (CW / 2);
  73.                    controller.y = (touches[i].pageY - H + CH / 2) / (CH / 2);
  74.                }
  75.                //console.log(`x:${controller.x} Y:${controller.y}`);
  76.                interval = setInterval(positionElement, 20);
  77.            }
  78.  
  79.            function handleEnd(evt) {
  80.                evt.preventDefault();
  81.                clearInterval(interval);
  82.                controller.x = 0;
  83.                controller.y = 0;
  84.            }
  85.  
  86.            function handleCancel(evt) {
  87.                evt.preventDefault();
  88.                var touches = evt.changedTouches;
  89.                clearInterval(interval);
  90.                for (var i = 0; i < touches.length; i++) {
  91.                    //var idx = ongoingTouchIndexById(touches[i].identifier);
  92.                    //ongoingTouches.splice(idx, 1); // remove it; we're done
  93.                }
  94.            }
  95.            function handleMove(evt) {
  96.                evt.preventDefault();
  97.                let touches = evt.changedTouches;
  98.                for (var i = 0; i < touches.length; i++) {
  99.                    controller.x = (touches[i].pageX - W + CW / 2) / (CW / 2);
  100.                    controller.y = (touches[i].pageY - H + CH / 2) / (CH / 2);
  101.                }
  102.                //console.log(`x:${controller.x} Y:${controller.y}`);
  103.                positionElement();
  104.            }
  105.            function mouseStart(evt){
  106.              controller.x = (evt.pageX - W + CW / 2) / (CW / 2);
  107.              controller.y = (evt.pageY - H + CH / 2) / (CH / 2);
  108.              mouseMode =  true;
  109.              interval = setInterval(positionElement, 20);
  110.            }
  111.            function mouseEnd(){
  112.              controller.x = 0;
  113.              controller.y = 0;
  114.              mouseMode = false;
  115.              clearInterval(interval);
  116.            }
  117.            function mouseMove(evt){
  118.              if(mouseMode){
  119.                // clearInterval(interval);
  120.                controller.x = (evt.pageX - W + CW / 2) / (CW / 2);
  121.                controller.y = (evt.pageY - H + CH / 2) / (CH / 2);
  122.                positionElement();
  123.              }
  124.            }
  125.            function positionElement() {
  126.                let currentX = parseInt(element.style.left);
  127.                let currentY = parseInt(element.style.top);
  128.                //console.log(parseInt(element.style.left));
  129.                //console.log(parseInt(currentY));
  130.                // parseInt(element.style.left) + Math.ceil(SPEED * controller.x)
  131.                if(currentX >= 0 && currentX <= (W - EW) && currentY >= 0 && currentY <= (H - EH)){
  132.                    element.style.left = `${currentX + Math.ceil(SPEED * controller.x)}px`;
  133.                     element.style.top = `${currentY + Math.ceil(SPEED * controller.y)}px`;
  134.                 }else if (currentX < 0) {
  135.                    element.style.left = "0px";
  136.                }else if (currentX > (W - EW)) {
  137.                   element.style.left = `${W - EW}px`;
  138.                 }else if (currentY < 0) {
  139.                  element.style.top = "0px";
  140.                }else if (currentY > (H - EH)) {
  141.                   element.style.top = `${H - EH}px`;
  142.                 }
  143.             }
  144.         }
  145.     </script>
  146. </body>
  147.  
  148. </html>
Advertisement
Add Comment
Please, Sign In to add comment