Hover effect only when dragging

Viewed 32

Is it possible to highlight a box when I drag a document over it? It should be highlighted only when

  1. you hover over the element
  2. you drag something
  3. when you drag-leave it shouldn't be highlighted anymore

I use React + Typescript, but any CSS Tipps would help.

Right now it looks something like this:

import { useDragging } from '../../../common/useDragging';
    
const useStyles = makeStyles(
  theme => ({
    root: {
      '&.dragging, &:focus': {
        outline: `4px solid ${theme.palette.primary.main}50`,
        boxShadow: '0px 4px 12px rgba(131, 142, 158, 0.22)',
      },
    }
  })
);
1 Answers

Maybe not exactly what you're searching for, but you can check the state of the dragged element like this:

let currentDroppable = null;
egg.onmousedown = function(event) {
  let shiftX = event.clientX - egg.getBoundingClientRect().left;
  let shiftY = event.clientY - egg.getBoundingClientRect().top;
  egg.style.position = 'absolute';
  egg.style.zIndex = 1000;
  document.body.append(egg);
  moveAt(event.pageX, event.pageY);

  function moveAt(pageX, pageY) {
    egg.style.left = pageX - shiftX + 'px';
    egg.style.top = pageY - shiftY + 'px';
  }

  function onMouseMove(event) {
    moveAt(event.pageX, event.pageY);
    egg.hidden = true;
    let elemBelow = document.elementFromPoint(event.clientX, event.clientY);
    egg.hidden = false;
    if (!elemBelow) return;
    let droppableBelow = elemBelow.closest('.droppable');
    if (currentDroppable != droppableBelow) {
      if (currentDroppable) {
        leaveDroppable(currentDroppable);
      }
      currentDroppable = droppableBelow;
      if (currentDroppable) {
        enterDroppable(currentDroppable);
      }
    }
  }
  document.addEventListener('mousemove', onMouseMove);
  egg.onmouseup = function() {
    document.removeEventListener('mousemove', onMouseMove);
    egg.onmouseup = null;
  };
};

function enterDroppable(elem) {
  elem.style.background = 'green';
}

function leaveDroppable(elem) {
  elem.style.background = '';
}
egg.ondragstart = function() {
  return false;
};
#nest {
  cursor: pointer;
  margin-bottom: 100px;
  width: 230px;
  height: 100px;
}

#egg {
  cursor: pointer;
  width: 80px;
  height: 80px;
}
<p>Drag the egg:</p>

<img src="https://raw.githubusercontent.com/luis-rieke/visual-objects/aaf9721e6c9c8e77c6cb6c8bd61455a83c13b5a9/nest.svg" id="nest" class="droppable">

<img src="https://raw.githubusercontent.com/luis-rieke/visual-objects/aaf9721e6c9c8e77c6cb6c8bd61455a83c13b5a9/egg.svg" id="egg">

Related