Advertisement
LimePaste888

Movable <span> window

May 25th, 2023 (edited)
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Number.prototype.inRange = function(a, b, exclusive=0){
  2.     if(a>b){c=b;b=a;a=c}
  3.     switch (exclusive) {
  4.         case 0: {return this >= a && this <= b;}
  5.         case 1: {return this > a && this <= b;}
  6.         case 2: {return this >= a && this < b;}
  7.         case 3: {return this > a && this < b;}
  8.     }
  9. }
  10. document.body.appendChild(box=document.createElement('span'));
  11. box.innerText = 'hello';
  12. box.style.border = '1px solid black';
  13. box.style.position = 'absolute';
  14. box.style.top = '0px';
  15. box.style.left = '0px';
  16. mouseDown = trueMouseDown = false;
  17. mouseCoords = [];
  18. function upd(e){
  19.     if(!trueMouseDown){mouseCoords = [e.clientX-box.offsetLeft, e.clientY-box.offsetTop];};
  20.     if(!mouseDown){return}
  21.     box.style.left = e.clientX-mouseCoords[0]+'px';
  22.     box.style.top = e.clientY-mouseCoords[1]+'px';
  23.     if(box.offsetLeft+box.offsetWidth >= innerWidth){
  24.         box.style.left = innerWidth-box.offsetWidth-1+'px';
  25.     }
  26.     if(box.offsetTop+box.offsetHeight >= innerHeight){
  27.         box.style.top = innerHeight-box.offsetHeight-1+'px';
  28.     }
  29.     if(box.offsetLeft<=0){box.style.left='0px';}
  30.     if(box.offsetTop<=0){box.style.top='0px';}
  31. }
  32. document.addEventListener('mousedown', function(e){
  33.     mouseCoords = [e.clientX-box.offsetLeft, e.clientY-box.offsetTop];
  34.     mouseDown = mouseCoords[0].inRange(0, +box.offsetWidth)&&mouseCoords[1].inRange(0, +box.offsetHeight);
  35.     trueMouseDown = true;
  36.     upd(e)
  37. });
  38. document.addEventListener('mouseup', e=>{mouseDown = trueMouseDown = false;upd(e)});
  39. document.addEventListener('mousemove', e=>upd(e));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement